0Pricing
AWS Solutions Architect · درس

قوائم SQS القياسية مقابل FIFO

قارنوا بين القوائم القياسية لتحقيق أعلى معدل نقل وقوائم FIFO للمعالجة المرتبة ولمرة واحدة تمامًا، واختاروا النوع المناسب.

قوائم SQS القياسية مقابل FIFO درس مجاني في AWS Solutions Architect على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AWS Solutions Architect، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.

لماذا تُعد قوائم انتظار الرسائل مهمة

تعمل قوائم انتظار الرسائل على فصل المنتجين عن المستهلكين: إذ يرسل المنتج رسالة إلى قائمة الانتظار من دون انتظار أن يعالجها المستهلك. ويعالج المستهلك الرسائل بالسرعة التي تناسبه. يمنع هذا النمط المنتجين السريعين من إرهاق المستهلكين البطيئين، ويتيح توسيع نطاق كل طبقة بشكل مستقل، كما يوفر مخزنًا مؤقتًا دائمًا إذا لم يكن المستهلك متاحًا مؤقتًا. وتُعد Amazon SQS خدمة قوائم انتظار رسائل مُدارة بالكامل وعالية التوافر من AWS.

خصائص قائمة الانتظار القياسية في SQS

توفر قوائم الانتظار القياسية إنتاجية غير محدودة (عددًا شبه غير محدود من المعاملات في الثانية). وهي تضمن التسليم مرة واحدة على الأقل، ما يعني أن الرسالة قد تُسلَّم أكثر من مرة في حالات نادرة (بسبب البنية التحتية الموزعة). أما ترتيب الرسائل فيعتمد على أفضل جهد: فعادةً ما تُسلَّم الرسائل بالترتيب الذي أُرسلت به، لكن لا يوجد ضمان لذلك. وتناسب قوائم الانتظار القياسية الحالات التي تكون فيها الإنتاجية بالغة الأهمية، ويستطيع فيها المستهلك التعامل مع التكرار العرضي والتسليم خارج الترتيب.

# Create a Standard queue
aws sqs create-queue \
  --queue-name 'OrderProcessingQueue'

# Send a message
aws sqs send-message \
  --queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/OrderProcessingQueue' \
  --message-body 'OrderId-12345'

خصائص قائمة انتظار FIFO في SQS

تضمن قوائم انتظار FIFO (الوارد أولًا، يخرج أولًا) المعالجة مرة واحدة بالضبط والترتيب الصارم للرسائل. وتُسلَّم الرسائل بالترتيب نفسه الذي أُرسلت به تمامًا. وتدعم قوائم انتظار FIFO ما يصل إلى 300 معاملة في الثانية (و3,000 معاملة عند استخدام التجميع). ويجب أن تنتهي أسماء قوائم انتظار FIFO بالامتداد .fifo. استخدموا قوائم انتظار FIFO عندما يكون الترتيب ودلالات المعالجة مرة واحدة بالضبط أمرين بالغي الأهمية، مثل المعاملات المالية، ومعالجة طلبات التجارة الإلكترونية، وتحديثات المخزون.

# Create a FIFO queue
aws sqs create-queue \
  --queue-name 'OrderProcessingQueue.fifo' \
  --attributes '{
    "FifoQueue": "true",
    "ContentBasedDeduplication": "true"
  }'

مجموعات الرسائل في قوائم انتظار FIFO

تستخدم قوائم انتظار FIFO معرّفات مجموعات الرسائل لتقسيم الترتيب داخل قائمة الانتظار. وتُسلَّم الرسائل التي لها معرّف المجموعة نفسه بالترتيب، بينما يمكن معالجة الرسائل ذات معرّفات المجموعات المختلفة بالتوازي. على سبيل المثال، استخدموا customerId معرّفًا للمجموعة: تتم معالجة طلبات كل عميل بالتسلسل، في حين تتم معالجة طلبات العملاء المختلفين بشكل متزامن. ويتيح ذلك دلالات FIFO مع قابلية التوسع الأفقي عبر المستهلكين.

aws sqs send-message \
  --queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/Orders.fifo' \
  --message-body 'Order details here' \
  --message-group-id 'customer-789' \
  --message-deduplication-id 'order-uuid-abc123'

إزالة التكرار في قوائم انتظار FIFO

تمنع قوائم انتظار FIFO معالجة الرسائل المكررة باستخدام معرّف إزالة التكرار. فإذا أُرسلت رسالتان بالمعرّف نفسه خلال فترة إزالة التكرار البالغة 5 دقائق، تُهمَل الرسالة الثانية بصمت. ويمكنكم تقديم معرّف إزالة التكرار صراحةً (MessageDeduplicationId) أو تمكين إزالة التكرار المستندة إلى المحتوى، حيث تحسب SQS تلقائيًا تجزئة SHA-256 لنص الرسالة وتستخدمها معرّفًا لإزالة التكرار. وتُعد إزالة التكرار المستندة إلى المحتوى أبسط، لكنها تتطلب أن تكون نصوص الرسائل فريدة.

الاحتفاظ بالرسائل وحدود الحجم

تحتفظ SQS بالرسائل لفترة قابلة للتهيئة: حد أدنى دقيقة واحدة وحد أقصى 14 يومًا (والقيمة الافتراضية 4 أيام). وتُحذف الرسائل التي لم تُستهلك خلال فترة الاحتفاظ تلقائيًا. ويبلغ الحد الأقصى لحجم الرسالة 256 كيلوبايت. أما الحمولة الأكبر، فاستخدموا SQS Extended Client Library أو خزّنوا الحمولة في S3 وأرسلوا مرجع كائن S3 فقط داخل رسالة SQS. وتشترك قوائم الانتظار القياسية وقوائم FIFO في هذه الحدود.

استلام الرسائل وحذفها

يستطلع المستهلكون قائمة الانتظار باستخدام receive-message. وبعد الاستلام، تصبح الرسالة غير مرئية (مخفية عن المستهلكين الآخرين) طوال فترة مهلة الظهور. ويجب على المستهلك معالجة الرسالة ثم حذفها صراحةً باستخدام مقبض الاستلام قبل انتهاء المهلة. وإذا تعطل المستهلك أو لم يحذف الرسالة في الوقت المحدد، فستظهر الرسالة مجددًا ويمكن لمستهلك آخر معالجتها، ما يتيح التسليم مرة واحدة على الأقل في قوائم الانتظار القياسية.

RECEIPT=$(aws sqs receive-message \
  --queue-url 'https://...' \
  --query 'Messages[0].ReceiptHandle' --output text)

# Process message, then delete it
aws sqs delete-message \
  --queue-url 'https://...' \
  --receipt-handle "$RECEIPT"

مقارنة الإنتاجية عمليًا

تناسب قوائم الانتظار القياسية حالات مثل: إنشاء الصور المصغرة، وإرسال رسائل البريد الإلكتروني للإشعارات، ومعالجة السجلات، أي أعباء العمل التي يمكن فيها التعامل مع التكرار بطريقة idempotent ولا يكون الترتيب مهمًا. وتلزم قوائم انتظار FIFO في حالات مثل: معالجة التحويلات المصرفية (الخصم قبل الإضافة)، وتحديثات سلة التجارة الإلكترونية (إضافة العنصر قبل إتمام الشراء)، وخطوات سير العمل التي يجب أن تتبع فيها الخطوة 2 الخطوة 1. وبالنسبة إلى معظم البنى ذات الإنتاجية العالية، تكون قوائم الانتظار القياسية هي الخيار الافتراضي؛ وانتقلوا إلى FIFO فقط عندما يكون الترتيب أو التسليم مرة واحدة بالضبط متطلبًا إلزاميًا.

التجميع لتحسين الإنتاجية وخفض التكلفة

تفرض SQS رسومًا على كل طلب من طلبات API. استخدموا عمليات التجميع لإرسال ما يصل إلى 10 رسائل واستلامها وحذفها في كل استدعاء لـ API، ما يخفض التكاليف بما يصل إلى 10 أضعاف. وتدعم قوائم انتظار FIFO وضع الإنتاجية العالية (الذي يتيح التجميع)، ما يرفع الحد إلى 3,000 رسالة في الثانية عند تجميع 10 رسائل. استخدموا دائمًا send-message-batch وdelete-message-batch في بيئات الإنتاج لتقليل تكاليف استدعاءات API.

aws sqs send-message-batch \
  --queue-url 'https://...' \
  --entries '[
    {"Id": "msg1", "MessageBody": "Order-001"},
    {"Id": "msg2", "MessageBody": "Order-002"},
    {"Id": "msg3", "MessageBody": "Order-003"}
  ]'

سياسات الوصول إلى قوائم الانتظار

تُؤمَّن قوائم انتظار SQS باستخدام سياسات مستندة إلى الموارد (سياسات قوائم الانتظار) التي تتحكم فيمن يمكنه الإرسال إلى قائمة الانتظار أو الاستلام منها. ويكتسب ذلك أهمية خاصة عند السماح بالوصول عبر الحسابات أو عند نشر SNS إلى قائمة انتظار SQS. ويتحكم دور IAM الخاص بدور تنفيذ Lambda في وصول Lambda إلى SQS، من خلال سياسة IAM التي تتضمن sqs:ReceiveMessage وsqs:DeleteMessage وsqs:GetQueueAttributes. طبّقوا دائمًا مبدأ أقل الصلاحيات: لا تمنحوا المستهلك صلاحيات تتجاوز الاستلام والحذف.

اختيار Standard أم FIFO: دليل لاتخاذ القرار

اطرحوا الأسئلة التالية للاختيار: (1) هل الترتيب مهم؟ إذا كانت الإجابة نعم ← FIFO. (2) هل المعالجة مرة واحدة بالضبط مطلوبة؟ إذا كانت الإجابة نعم ← FIFO. (3) هل نحتاج إلى إنتاجية تتجاوز 3,000 TPS؟ إذا كانت الإجابة نعم ← Standard (إذ يقتصر FIFO على 3,000 TPS عند استخدام التجميع). (4) هل يستطيع المستهلكون التعامل مع التكرار؟ إذا كانت الإجابة نعم ← يكون Standard أبسط وأقل تكلفة. بالنسبة إلى اختبار SAA-C03، تشمل الكلمات المفتاحية لـ FIFO: 'ordering' و'exactly-once' و'sequential' و'deduplication'. وتشمل الكلمات المفتاحية لـ Standard: 'high throughput' و'best effort' و'at-least-once'.

تحقق سريع

اختبروا فهمكم لمفاهيم AWS Solutions Architect (SAA-C03) التي تناولها هذا الدرس.

مراجعة الدرس

تعلمتم في هذا الدرس أن قوائم الانتظار القياسية توفر إنتاجية غير محدودة مع التسليم مرة واحدة على الأقل والترتيب بأفضل جهد، ولذلك تناسب أعباء العمل ذات الحجم الكبير التي يمكنها تحمّل التكرار؛ وأن قوائم انتظار FIFO تضمن المعالجة مرة واحدة بالضبط والترتيب الصارم للرسائل باستخدام معرّفات مجموعات الرسائل ومعرّفات إزالة التكرار، مع حد أقصى يبلغ 3,000 TPS عند استخدام التجميع؛ وأن الاختيار بينهما يعتمد على ما إذا كان الترتيب وإزالة التكرار متطلبين إلزاميين. في الدرس التالي، سنستكشف مهلة الظهور، وقوائم انتظار الرسائل غير القابلة للتسليم، والاستطلاع الطويل.

الأسئلة الشائعة

هل درس «قوائم SQS القياسية مقابل FIFO» مجاني؟

نعم — نص درس «قوائم SQS القياسية مقابل FIFO» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AWS Solutions Architect، انتقل إلى CoddyKit PRO. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.

ماذا ستتعلم في «قوائم SQS القياسية مقابل FIFO»؟

قارنوا بين القوائم القياسية لتحقيق أعلى معدل نقل وقوائم FIFO للمعالجة المرتبة ولمرة واحدة تمامًا، واختاروا النوع المناسب. تتمرن على AWS Solutions Architect مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AWS Solutions Architect؟

لا تُشترط خبرة سابقة. AWS Solutions Architect على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «قوائم SQS القياسية مقابل FIFO»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AWS Solutions Architect هذا؟

نعم. كل درس في AWS Solutions Architect يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قوائم SQS القياسية مقابل FIFO
  2. مهلة الرؤية وDLQ والاستقصاء الطويل
  3. موضوعات SNS وبنية التوزيع المتعدد
  4. تصفية رسائل SQS وتكامل SNS مع SQS
← العودة إلى AWS Solutions Architect