Software Architecture

أنماط السحابة الأصلية: تنفيذ شبكة الخدمات ووكلاء الجار للملاحظة

في المشهد المتطور بسرعة للحوسبة الأصلية للسحابة، أصبحت الخدمات المصغرة هي البنية القياسية لبناء تطبيقات قابلة للتوسع ومرنة. ومع ذلك، مع زيادة عدد الخدمات، تزداد تعقيدات إدارة الاتصال بينها. غالباً ما تفشل أدوات المراقبة التقليدية في التعامل مع الطبيعة المؤقتة للحاويات والتوجيه الديناميكي المتأصل في الأنظمة الموزعة. وهنا تبرز أنماط شبكة الخدمات (Service Mesh) ووكيل الجار (Sidecar Proxy) كمكونات معمارية حاسمة، حيث توفر طريقة موحدة للتعامل مع مخاوف البنية التحتية مثل الأمان، والموثوقية، والأهم من ذلك، الملاحظة (Observability).

تحدي الملاحظة في الأنظمة الموزعة

تعد الملاحظة في التطبيقات الأحادية (Monolithic) أمرًا مباشرًا نسبيًا: تقوم بمراقبة عملية واحدة ذات نقطة دخول معروفة. في بنية الخدمات المصغرة، يمكن لطلب مستخدم واحد أن يعبر عشرات الخدمات، وكل منها قد يكون مستضافًا في مساحات عمل (namespaces) أو عناقيد (clusters) أو حتى مزودي سحابة مختلفين. وبدون طبقة موحدة، يصبح الحصول على رؤى حول زمن الاستجابة، ومعدلات الأخطاء، وتتبع الطلبات تمريرًا مجزأً وعملية يدوية. غالبًا ما يجد المطورون أنفسهم يكتبون أكوادًا للتشغيل الآلي (Instrumentation) مخصصة في كل خدمة، مما يؤدي إلى تكرار الكود وعدم الاتساق.

ظهور وكيل الجار

يعالج نمط وكيل الجار (Sidecar Proxy) هذه المشكلة من خلال فصل مخاوف البنية التحتية عن منطق التطبيق. من خلال نشر وكيل شبكة خفيف الوزن جنبًا إلى جنب مع حاوية التطبيق، يمكننا اعتراض جميع حركة المرور الواردة والصادرة. يعمل هذا الوكيل، المعروف باسم وكيل الجار، كضابط مرور، حيث يتولى مهامًا مثل إنهاء TLS، وتوازن الحمل، وكسر الدائرة (Circuit Breaking) دون الحاجة إلى إجراء أي تغييرات على كود التطبيق.

أكثر تنفيذ شعبي لهذا النمط هو Envoy، الذي يعمل كمستوى البيانات للعديد من تنفيذات شبكة الخدمات، بما في ذلك Istio وLinkerd. تم تصميم Envoy خصيصًا لبيئات السحابة الأصلية، حيث يوفر أداءً عاليًا وتكاملًا عميقًا مع مجموعات الملاحظة الحديثة مثل Prometheus وJaeger وZipkin.

تنفيذ الملاحظة باستخدام شبكة الخدمات

عند دمج شبكة الخدمات، تحصل على ملاحظة تلقائية وخالية من الكود. تقوم وكلاء الجار بحقن البيانات الوصفية تلقائيًا في رؤوس HTTP، وبيانات gRPC، وسياقات التتبع، مما يتيح لك ربط السجلات والمقاييس والتتبعات عبر الرسم البياني الكامل للخدمات. وهذا يخلق رؤية موحدة لصحة نظامك وأدائه.

خذ في الاعتبار تكوين نشر بسيط في Kubernetes. لتمكين وكيل الجار لتطبيق ما، عادةً ما تقوم بتعديل مواصفات الحزمة (pod specification) لتشمل حاوية Envoy. فيما يلي مثال مفاهيمي لكيفية ظهور مواصفات الحزمة مع حقن حاوية الجار:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app
      image: my-application:latest
      ports:
        - containerPort: 8080
    - name: envoy
      image: envoyproxy/envoy:v1.20-latest
      ports:
        - containerPort: 15001
          protocol: TCP
      volumeMounts:
        - name: envoy-config
          mountPath: /etc/envoy
  volumes:
    - name: envoy-config
      configMap:
        name: envoy-config-map

في هذا المثال، تعمل حاوية envoy جنبًا إلى جنب مع حاوية app. يرسل التطبيق حركة المرور إلى localhost:15001، والتي يعترضها وكيل Envoy. ثم يتولى Envoy التواصل الفعلي الصادر، مع إثراء حركة المرور ببيانات الملاحظة مثل نطاقات التتبع الموزع والمقاييس التفصيلية.

أفضل الممارسات للتنفيذ

في حين تقدم شبكات الخدمات فوائد هائلة، فإنها تقدم أيضًا تعقيدًا. لضمان تنفيذ سلس، ضع في اعتبارك أفضل الممارسات التالية:

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

الخاتمة

إن تنفيذ شبكة الخدمات مع وكلاء الجار لا يتعلق فقط بإدارة حركة المرور؛ بل يتعلق بالحصول على رؤى عميقة وقابلة للتنفيذ حول أنظمتك الموزعة. من خلال تجريد مخاوف الملاحظة في طبقة بنية تحتية مخصصة، يمكن لفرق التطوير التركيز على بناء ميزات قيّمة بينما تعتمد على الشبكة لتوفير رؤية شاملة لتطبيقاتهم. مع استمرار نضج بنيات السحابة الأصلية، سيصبح إتقان هذه الأنماط أمرًا ضروريًا لأي مطور يهدف إلى بناء أنظمة مرنة وقابلة للملاحظة وقابلة للتوسع.

Share: