كيف يؤدي AWS Graviton3؟
API7.ai
June 7, 2022
الخلفية
أطلقت AWS أحدث عائلة من المعالجات القائمة على ARM وهي AWS Graviton في نهاية مايو 2022 - AWS Graviton3. وفقًا للبيانات الرسمية من AWS، مقارنةً بمعالج Graviton2، فإن معالج Graviton3 يعتمد على تقنية الذاكرة الرائدة DDR5، ويمكن أن يوفر تحسينًا في الأداء يصل إلى 25%، وأداءً في العمليات الحسابية العائمة يصل إلى ضعفين، وسرعة وصول إلى الذاكرة أسرع بنسبة 50%؛ كما أن Graviton3 يستخدم طاقة أقل بنسبة 60% في نفس نوع مثيل EC2.
إذن، كيف تبدو البيانات الفعلية؟ لنأخذ بوابة API كثيفة الاستخدام لشبكة IO كمثال لنرى كيف يؤدي AWS Graviton3. هنا نستخدم Apache APISIX لإجراء اختبارات مقارنة الأداء في بيئات خوادم AWS Graviton2 (C6g) و AWS Graviton3 (C7g).
Apache APISIX هي بوابة API سحابية الأصل، عالية الأداء، وقابلة للتوسع. بناءً على NGNIX+LuaJIT و etcd، مقارنةً ببوابات API التقليدية، تتميز APISIX بميزات التوجيه الديناميكي وإعادة تحميل الإضافات الساخنة، مما يجعلها مناسبة بشكل خاص لإدارة API تحت بنية السحابة الأصلية.
التثبيت والنشر
قم بإعداد خادم بمعالج ARM64، هنا نختار Amazon EC2 C7g (حيث أن هذا النموذج فقط يحتوي على AWS Graviton3 حاليًا)، ونظام التشغيل المختار هو Ubuntu 20.04.
لا تنسَ تثبيت Docker:
sudo apt-get update && sudo apt-get install docker.io
أصدرت Apache APISIX أحدث إصدار من صورة ARM64، والتي يمكن نشرها بنقرة واحدة باستخدام Docker. يمكن العثور على العملية التفصيلية أدناه.
- بدء etcd
sudo docker run -d \
--name etcd -p 2379:2379 -e ETCD_UNSUPPORTED_ARCH=arm64 \
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
-e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 \
rancher/coreos-etcd:v3.4.16-arm64
- بدء APISIX
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
- تسجيل المسار
curl "http://127.0.0.1:9080/apisix/admin/routes/1" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"uri": "/anything/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
- الاختبار
curl -i http://127.0.0.1:9080/anything/das
HTTP/1.1 200 OK
.....
مقارنة أداء AWS Graviton2 و AWS Graviton3
وفقًا للعمليات السابقة، بناءً على النص البرمجي الرسمي، تم إكمال تثبيت واختبار توافق APISIX على معالج AWS Graviton3 بنجاح. دعونا نلقي نظرة على أداء Apache APISIX على AWS Graviton2 (C6g) و AWS Graviton3 (C7g).
لتبسيط الأمور، تم تمكين عامل واحد فقط في APISIX في هذا الاختبار، وجميع بيانات اختبار الأداء التالية تم تشغيلها على وحدة معالجة مركزية أحادية النواة.
السيناريو 1: مصدر واحد
استخدام مصدر واحد، بدون أي إضافات. يتم اختبار أداء APISIX في وضع الوكيل النقي للعودة إلى الأصل.
# apisix: 1 worker + 1 upstream + no plugin
# register route
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980":1
}
}
}'
السيناريو 2: مصدر واحد + إضافتين
استخدام مصدر واحد، مع إضافتين. يتم اختبار أداء APISIX عند تمكين الإضافتين الأساسيتين المستهلكتين للأداء، limit-count
و prometheus
.
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# register route
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {
"limit-count": {
"count": 2000000000000,
"time_window": 60,
"rejected_code": 503,
"key": "remote_addr"
},
"prometheus": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980":1
}
}
}'
مقارنة البيانات
في السيناريوهين السابقين، تم إجراء اختبارات ومقارنات من مستويين: معالجة الطلبات ووقت التأخير. النتائج كالتالي:
- مقارنة QPS
- مقارنة التأخير
يمكن أيضًا أن نرى من البيانات أعلاه أنه في سيناريو الحوسبة الكثيفة لشبكة IO مثل بوابة API، فإن AWS Graviton3 يحسن الأداء بنسبة 76% مقارنةً بـ AWS Graviton2، مع تقليل وقت التأخير بنسبة 38%. هذه البيانات أفضل حتى من البيانات الرسمية التي قدمتها AWS والتي ذكرت في البداية (تحسين الأداء بنسبة 25%).
الخلاصة
تناولت هذه المقالة بشكل رئيسي استخدام Apache APISIX لمقارنة أداء AWS Graviton3 و AWS Graviton2. يمكن أن نرى أنه في سيناريو الحوسبة الكثيفة لشبكة IO في بوابة API، فإن AWS Graviton3 يظهر خصائص وحش الأداء. بالطبع، يُنصح أيضًا بالتدرب كثيرًا، ونتطلع إلى المزيد من بيانات الاختبار للمشاريع الكثيفة الحوسبة في المستقبل.