스크립트
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، وهو ما أغطيه في هذا الفيديو.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기