انسَ SQS وRabbitMQ وKafka. استخدم Postgres فحسب.

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00يمكنك الاستغناء تماماً عن SQS وKafka وRabbitMQ، إذ أصبح بإمكانك إدارة قوائم الانتظار مباشرةً
00:00:05داخل قاعدة بيانات Postgres باستخدام PGMQ. ويمكنني بالفعل سماع من يقولون إنها لا تدعم التوسع.
00:00:11ولكن في الواقع هي تدعم ذلك، لأن Postgres يمكنها التعامل بكل مرونة مع ملايين الصفوف
00:00:15وآلاف الطلبات في الثانية. لذا إذا كنت تريد الحفاظ على بساطة بنيتك التحتية،
00:00:20سنستکشف اليوم بناء تطبيقات موزعة عالية الكثافة باستخدام PGMQ.
00:00:30حسنًا، بدون إطالة، سننتقل مباشرة إلى العرض التوضيحي. لقد أعددت مشروعاً
00:00:34باستخدام Docker وقمت بتثبيت PGMQ. يمكنك استخدام هذا بنمطين: إما عبر SQL فقط أو باستخدام إحدى
00:00:41مكتبات العميل الرسمية مثل Rust أو Python، بالإضافة إلى مجموعة من مكتبات المجتمع مثل Ruby أو نكهات متعددة
00:00:47من TypeScript. وبما أننا لن نتفق أبداً على لغة واحدة، سأقوم بتشغيل هذا العرض التوضيحي باستخدام
00:00:52خيار SQL فقط. لنبدأ بإنشاء قائمة انتظار جديدة. سنقوم بتنفيذ الأمر select pgmq.create ثم تمرير
00:00:58اسم قائمة الانتظار نفسها. كل قائمة انتظار هنا تمثل جدولاً خاصاً بها. وإذا نظرنا إلى قاعدة البيانات مباشره،
00:01:04فيمكننا أن نرى أن الجدول الجديد موجود الآن. يمكننا بعد ذلك إرسال رسائل إلى قائمة الانتظار مع تحديد اسمها،
00:01:09ثم الرسالة بتنسيق JSON. يمكنك اختيارياً تضمين فترة تأخير، بحيث يتم إرسال الرسالة إلى
00:01:15قائمة الانتظار، ولكن لا يمكن استهلاكها إلا بعد خمس ثوانٍ مثلاً. حسنًا، لقد أصبحت لدينا الآن رسائل في قائمة الانتظار.
00:01:20دعنا نستهلكها. يمكننا فعل ذلك باستخدام أمر read. يشير رمز VT إلى مهلة الظهور (visibility timeout)، وهنا تعني
00:01:26أن الرسائل التي تقرأها ستكون مرئية لمدة 30 ثانية، لكي لا تتمكن أي عملية أخرى من التقاطها.
00:01:31بهذه الطريقة تضمن PGMQ التسليم مرة واحدة فقط. تشير الكمية (quantity) بعد ذلك إلى عدد الرسائل التي نود
00:01:38قراءتها. وإذا لم يتم حذفها أو أرشفتها خلال تلك النافذة الزمنية، فسوف تصبح مرئية مرة أخرى. وللقيام بذلك،
00:01:44يمكنك تشغيل إما أمر archive، الذي يحذف الرسالة من قائمة الانتظار ويضيفها إلى جدول الأرشيف، أو ببساطة
00:01:49عن طريق تشغيل delete. على سبيل المثال، هنا أقوم بحذف الرسالة ذات المعرف 2. وملاحظة جانبية سريعة، إذا وجدت هذا
00:01:54مفيداً، فلا تبخل علينا بالاشتراك في القناة لدعمنا. فهذا يساعدنا على الاستمرار في إنشاء محتوى مجاني
00:01:59لمساعدة اكبر عدد ممكن من المطورين. حسنًا، لنقم بإجراء اختبار ضغط على PGMQ. أولاً، سأضيف 100,000 صف
00:02:06إلى قائمة الانتظار، ويستغرق ذلك تقريبًا 0.4 ثانية. الآن سأقوم بإطلاق 100 عامل (worker) لمعالجة مهمة لكل منهم
00:02:13على دفعات من 10 رسائل لنرى كم من الوقت يستغرقه قراءة الكل. هنا، كل ما يفعله العامل هو قراءة
00:02:18الرسالة، وتسجيل ما قرأه في سجلات النظام، ثم حذفها. بالطبع، في الواقع سترغب في فعل شيء مفيد بهذه البيانات،
00:02:23لكنني مهتم هنا فقط اختبار أداء PGMQ مباشرة. وقد استغرق ذلك تسع ثوانٍ.
00:02:29قام كل عامل بمعالجة 111 رسالة في الثانية في المتوسط. لذا فبالمجمل تم معالجة نحو 11,100 رسالة في الثانية.
00:02:37لقد قمت عمداً بتقييد حاوية Docker بمعالجين (CPUs) وذاكرة بحجم غيغابايتين، وهي مواصفات نموذجية لخدمة حية.
00:02:44وكما ذكرت سابقاً، يمكنك أيضاً استخدام مكتبات العملاء للتفاعل مع PGMQ.
00:02:49باستخدام TypeScript مع Prisma، يمكننا إنشاء قائمة انتظار، وإرسال رسالة، وقراءة دفعة من الرسائل، ويمكنك
00:02:55أيضاً فعل الشيء نفسه باستخدام Python. لذا إذا كنت لا ترغب في وجود اعتماديات إضافية، يمكنك حقاً تشغيل
00:03:01قوائم انتظار واسعة النطاق داخل Postgres باستخدام PGMQ. ويمكننا الذهاب إلى أبعد من ذلك بكثير عبر استبدال أكبر قدر ممكن
00:03:08من حزمة التقنيات بـ Postgres، وهو ما أغطيه في هذا الفيديو.

핵심 요약

تغني أداة PGMQ المستخدمة داخل Postgres عن أنظمة الرسائل الخارجية عبر معالجة 11,100 رسالة في الثانية بموارد محدودة.

하이라이트

  • تتيح أداة PGMQ إدارة قوائم الانتظار مباشرة داخل قاعدة بيانات Postgres للاغستناء عن الأنظمة الخارجية مثل SQS وKafka.

  • تتعامل قاعدة بيانات Postgres المحدودة بمعالجين وذاكرة بحجم غيغابايتين مع 11,100 رسالة في الثانية بمتوسط 111 رسالة لكل عامل.

  • تعتمد PGMQ على نمط SQL الصرف أو مكتبات العملاء مثل Rust وPython وTypeScript لتنفيذ عمليات قوائم الانتظار.

  • تضمن ميزة مهلة الظهور (VT) تسليم الرسائل مرة واحدة فقط عبر حجبها مؤقتاً لمدة محددة أثناء المعالجة.

타임라인

إدارة قوائم الانتظار عبر Postgres باستخدام PGMQ

  • تستغني أداة PGMQ عن خدمات SQS وKafka وRabbitMQ لإدارة قوائم الانتظار.
  • تتعامل قاعدة بيانات Postgres مع ملايين الصفوف وآلاف الطلبات في الثانية بكفاءة عالية.

تتيح البنية التحتية القائمة على PGMQ دمج قوائم الانتظار داخل قاعدة بيانات Postgres مباشرة دون الحاجة لتقنيات خارجية معقدة. تدعم هذه الطريقة التعامل مع ملايين الصفوف بمرونة كاملة للحفاظ على بساطة الأنظمة الموزعة عالية الكثافة.

التنفيذ العملي وعمليات الرسائل الأساسية

  • تتفاعل PGMQ عبر أوامر SQL أو مكتبات العملاء الرسمية ومكتبات المجتمع لمختلف لغات البرمجة.
  • تحدد مهلة الظهور (VT) مدة بقاء الرسالة المقروءة مخفية لمنع تكرار المعالجة وضمان التسليم الفردي.
  • تتيح أوامر الأرشيف والحذف إزالة الرسائل المنتهية من قوائم الانتظار أو حفظها في جداول مخصصة.

تتطلب عملية الإنشاء تنفيذ أمر pgmq.create لتمثيل كل قائمة انتظار بجدول مستقل داخل قاعدة البيانات. تُرسل الرسائل بتنسيق JSON مع إمكانية إضافة فترات تأخير اختيارية، بينما تضمن مهلة الظهور بقاء الرسائل غير مرئية للعمليات الأخرى خلال فترة معالجتها.

اختبار الأداء والقدرة الاستيعابية

  • تستغرق إضافة 100,000 صف إلى قائمة الانتظار نحو 0.4 ثانية فقط.
  • تتم معالجة 11,100 رسالة في الثانية عبر 100 عامل باستخدام بيئة Docker بموارد محدودة من معالجين وذاكرة بحجم غيغابايتين.

تثبت اختبارات الضغط قدرة PGMQ العالية على معالجة المهام بكفاءة ضمن بيئة تشغيل قياسية. يعالج كل عامل 111 رسالة في الثانية بمتوسط إجمالي يبلغ 11,100 رسالة في الثانية، مما يتيح تشغيل قوائم انتظار واسعة النطاق دون اعتماديات إضافية.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기