Cloudflare تطلق K2: خدمة تدفق أحداث سحابية بلا خادم
تقدم Cloudflare حلاً جديداً لفصل منتجي ومستهلكي البيانات في الحافة، مما يتيح معالجة تدفقات ضخمة من الأحداث مع ضمان عدم فقدان البيانات.

إطلاق K2 في بيتا عامة
أعلنت شركة Cloudflare رسمياً عن إطلاق خدمتها الجديدة K2 في مرحلة بيتا عامة. وتُعد K2 خدمة تدفق أحداث خفيفة الوزن (Serverless) مصممة خصيصاً لمعالجة نقل البيانات على نطاق واسع مع دعم الاحتفاظ الطويل الأمد بالبيانات. وتقوم فكرة الخدمة على فصل منتجي البيانات عن مستهلكيها في حافة الشبكة (Edge)، مما يتيح إنشاء سجلات منطقية مرتبة ودائمة دون الحاجة إلى تحمل الأعباء التشغيلية المرتبطة بتجميعات الوساطة التقليدية (Broker Clusters).
تحديات البنية التقليدية
تواجه البنى التحتية التقليدية القائمة على استدعاء الإجراءات عن بعد (RPC) تحدياً جوهرياً يتمثل في ضرورة توافق منتجي ومستهلكي البيانات في الحجم والزمن. فعندما يرسل المنتجون بيانات تتجاوز قدرة المستهلكين، أو عند تعطل الخدمات downstream، يتم فقدان الأحداث. وتتفاقم هذه المشكلة عند وجود مستهلكين متعددين يحتاجون إلى معالجة البيانات بشكل مستقل، مثل أنظمة التحليل وكشف الاحتيال التي تستقبل أحداث المعاملات من نظام تجارة إلكترونية.
للتغلب على هذه المشكلة، تقدم K2 حلاً يعتمد على إدخال خدمة وسيطة تمتص عمليات الكتابة وتسمح للقراء بالاستهلاك بوتيرتهم الخاصة. وبفضل طبيعتها الخفيفة الوزن وقدرتها على التوسع لكميات هائلة من البيانات، تضمن K2 عدم فقدان البيانات حتى في فترات التوقف الطويلة للمستهلكين.
الاعتماد على تخزين R2
تقوم K2 في جوهرها على تنفيذ سجل دائم مقسم (Partitioned Durable Log) فوق نظام تخزين الكائنات R2. وقد تم بناء K2 في الأصل لتلبية حاجة داخلية لوجود مخزن مؤقت دائم في الحافة، يعمل كطبقة استهلاك لخدمة Basin Pipelines. ونظراً لأن Pipelines تعمل على حافة Cloudflare التي تمتد عبر أكثر من 335 مدينة، يصعب تشغيل أنظمة موزعة تقليدية مثل Apache Kafka بسبب طبيعة البنية التحتية التي توفر شرائح صغيرة من الأجهزة المؤقتة.
يعتمد تصميم K2 على مزايا R2، الذي يوفر تخزيناً ذا موثوقية عالية جداً (11 9s!) مع واجهات برمجة تطبيقات متسقة بقوة. ومن خلال تفويض عمليات التكرار والتوافق (Consensus) لطبقة التخزين، تصبح طبقة التطبيق (K2) أبسط وأرخص وأسرع أداءً. كما يسمح هذا الفصل بين الحوسبة والتخزين بتوسيع كل منهما بشكل مستقل، مما يتيح تخزين كميات ضخمة من البيانات التاريخية بتكلفة منخفضة.

آلية بناء السجل
تواجه بناء السجلات فوق تخزين الكائنات تحدياً فنياً رئيسياً يتمثل في عدم دعم R2 لعمليات الإضافة (Appends) القياسية. ولحل هذه المشكلة، تجمع K2 عمليات الكتابة في الذاكرة داخل خدمة حافة، وبعد انتظار فترة قصيرة لتراكم البيانات، تكتب جميع الأحداث كملف مقطع (Segment) كامل. ويتم تحقيق الترتيب والإزاحات المتزايدة الصارمة باستخدام العمليات الذرية (Atomic Operations) الخاصة بـ R2، دون الحاجة إلى خدمة تنسيق منفصلة.
يذكر فريق التطوير أن هذا النهج يأتي مع عيب واحد يتمثل في زيادة زمن استجابة الإنتاج (Produce Latency). فكتابة البيانات إلى تخزين الكائنات أبطأ من القرص المحلي، ويتطلب انتظار تراكم الدفعة المحلية. وفي الإصدار الأولي من K2، يضيف هذا التأخير حوالي ثانية واحدة في النسبة المئوية 99 من أوقات الاستجابة.
الفرق بين K2 و Queues
توفر Cloudflare عدة بدائل أخرى للتسليم غير المتزامن، مثل Queues و Basin Pipelines. وتختلف K2 عن Queues في أن الأخيرة مصممة لتتبع عناصر عمل فردية مكلفة أو تستغرق وقتاً طويلاً، وتدعم منطقاً معقداً مثل إعادة المحاولة والرسائل الميتة. في المقابل، صُممت K2 لنقل البيانات عالية النطاق والاحتفاظ الطويل، حيث تُنتج وتُستهلك الرسائل على شكل دفعات (Batches) لتمكين المعالجة الفعالة، على حساب إعادة المحاولة على مستوى الرسالة الواحدة.
أما Basin Pipelines فهي خدمة استهلاك خفيفة الوزن تتيح إرسال أحداث JSON وتحويلها وكتابتها إلى R2 أو جداول Iceberg. وتوصي Cloudflare باستخدام Pipelines عندما يكون الهدف النهائي هو الكتابة إلى تخزين الكائنات، بينما تُعد K2 الخيار الأنسب للمعالجة المخصصة أو الكتابة إلى وجهات أخرى.
البدء باستخدام K2
يبدأ استخدام K2 بإنشاء تدفق (Stream)، حيث يمكن للمستخدمين إنشاء عدة تدفقات لحالات استخدام مختلفة عبر واجهة cf أو Wrangler أو لوحة التحكم. ويمكن إنتاج البيانات إلى التدفق عبر واجهة HTTP أو ربط Worker، مع إمكانية استخدام أي تنسيق أو ترميز للبيانات بما أنها تُعامل كبايتات. ولتقسيم العمل بين المستهلكين وتفعيل القراءة المتوازية، يقوم المستخدمون بإنشاء اشتراكات (Subscriptions) التي تتيح توسيع نطاق القراءة عبر عدة قراء.
عند استهلاك البيانات، يحصل العميل على إيجار (Lease) لمدة 5 دقائق لكل دفعة من الأحداث. ويمكن للعميل إما تأكيد المعالجة (Ack) لضمان عدم إعادة التسليم، أو رفضها (Nack) لإعادة المحاولة، أو تمديد الإيجار في حال الحاجة إلى وقت إضافي. ويمكن للمطورين البدء بإنشاء أول تدفق لهم خلال ثوانٍ باتباع الدليل المتاح.
المصادر
- Cloudflare BlogAnnouncing Cloudflare K2: serverless event streams