ما بعد السرعة: لماذا تستخدم لنكر gRPC لضمان الموثوقية الموزعة

فريق لنكر الهندسي,

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

إليك كيف يضمن تطبيقنا لـ gRPC بقاء لنكر مرنًا تحت الضغط.

1. نشر المهلة (Deadline Propagation): حل مشكلة "الطلبات الميتة" (Zombie Request)

في REST التقليدي، المهل الزمنية (timeouts) غالبًا ما تكون محلية. إذا استدعت الخدمة "أ" الخدمة "ب" بمهلة 5 ثوانٍ، واستدعت "ب" الخدمة "ج"، فإن الخدمة "ج" لا تعرف مقدار الوقت المتبقي.

  • ميزة gRPC: نحن نستخدم نشر المهلة. يتم تشفير الموعد النهائي الأولي في بيانات الطلب الوصفية. مع انتقال الطلب عبر مكدسنا (خدمة الزيارة ← خدمة الشركة ← خدمة التدقيق)، تعرف كل خدمة بالضبط عدد المللي ثانية المتبقية.
  • النتيجة: إذا انتهت المهلة، تتوقف الخدمات اللاحقة عن المعالجة تلقائيًا. هذا يمنع "الطلبات الميتة" من استهلاك وحدة المعالجة المركزية واتصالات قاعدة البيانات لنتيجة لم يعد المريض ينتظرها.

2. تحكم متطور في التدفق (Backpressure)

بيانات الرعاية الصحية ليست موحدة. يمكن أن يكون سحب "تاريخ المريض" بحجم 2 كيلوبايت؛ بينما قد يكون "تقرير التدقيق المالي" بحجم 50 ميجابايت. يمكن لـ REST/JSON عبر HTTP/1.1 أن يغمر المستقبِل بسهولة.

  • إدارة نافذة HTTP/2: يستخدم gRPC التحكم في التدفق الخاص بـ HTTP/2. إذا كانت "خدمة الفوترة" لدينا مشغولة، فإنها تشير إلى "خدمة المزود" لإبطاء تدفق البيانات على مستوى البروتوكول.
  • قيمة العمل: يمنع هذا الضغط الخلفي (Backpressure) الأصلي خدماتنا من التعطل خلال ساعات الذروة (مثل فترات الخروج من المستشفى في الصباح)، مما يضمن توفرًا عاليًا دون الحاجة إلى توفير مفرط في موارد السحابة باهظة الثمن.

3. المعترضات (Interceptors): "البرمجيات الوسيطة" للامتثال

العمل مع البيانات الطبية والمالية الحساسة يتطلب نهج "عدم الثقة" (Zero Trust).

  • المعترضات العالمية: لقد قمنا بتنفيذ معترضات gRPC (middleware) التي تغلف كل استدعاء. يتيح لنا هذا التعامل مع المصادقة (JWT)، والتسجيل، ومسارات التدقيق بشكل متسق عبر جميع الخدمات (المكتوبة بلغة Python/FastAPI) دون تكرار الكود.
  • سلامة البيانات: يتم التحقق من صحة كل حقل مقابل تعريفات .proto الخاصة بنا قبل أن يلمس منطق العمل البيانات. إذا كان معرف الشركة يفتقد رقمًا، يتم رفض الطلب على مستوى السلك (wire level).

4. تقليل "ضريبة السحابة" (ضغط HPACK)

النطاق الترددي (Bandwidth) في بيئة الخدمات المصغرة ليس مجانيًا—إنه جزء رئيسي من "ضريبة السحابة".

  • ضغط الرأس (Header Compression): على عكس REST، الذي يرسل الرؤوس كنص عادي مع كل طلب، يستخدم gRPC ضغط HPACK. بالنسبة للطلبات الصغيرة والمتكررة (مثل تنبيهات الحالة)، يقلل هذا من الحمل على الشبكة بنسبة تقارب 90%.
  • الكفاءة: يعني النطاق الترددي الأقل تكاليف أقل لنقل البيانات (egress costs) على AWS وأوقات استجابة أسرع للمقدمين الذين يستخدمون اتصالات العيادة ذات النطاق الترددي المنخفض.

الفلسفة الهندسية

في لنكر، نؤمن بأن كفاءة نظام الرعاية الصحية محدودة بمدى كفاءة "أنابيب البيانات" (data plumbing) الخاصة به. باختيارنا لـ gRPC، نحن نستثمر في بنية "العقد أولاً" (contract-first) التي تتسم بالمتانة والسرعة معًا.