Service Mesh في Go: كيفية جعل الميكروسيرفيسات تعمل معًا دون ألم

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

هل تصرخ ميكروسيرفيسات Go الخاصة بك ولكنك لا تسمعها؟

\n\n

تخيل: لديك عشرات من ميكروسيرفيسات Go. تتواصل عبر gRPC، وتنقل البيانات عبر قوائم الانتظار، وتصل إلى قواعد البيانات. كل شيء يعمل... حتى تبدأ الفوضى. الخدمة A لا تستطيع الوصول إلى الخدمة B - مهلات زمنية. الخدمة C تتعطل، وتنهار السلسلة بأكملها. وعندما تكتشف المشكلة أخيرًا، تجد أنها ناتجة عن تأخيرات الشبكة وغياب إعادة المحاولة.

\n\n

هل هذا مألوف؟ مرحبًا بك في عالم بنية الميكروسيرفيسات على Go. هنا كل خدمة هي جزيرة منفصلة، والتواصل بينها هو محيط مليء بالجبال الجليدية. ولكن هناك طوق نجاة - Service Mesh.

\n\n

في هذه المقالة، لن نلقي محاضرات مملة. سنشرح كيف يحول service mesh الفوضى إلى نظام منظم، وسنوضح ذلك بكود حقيقي على Go. هيا بنا!

\n\n

ما هو Service Mesh ولماذا يحتاجه مطور Go؟

\n\n

باختصار: Service Mesh هو طبقة بنية تحتية مخصصة لإدارة التفاعل بين الميكروسيرفيسات. يتولى كل "العمل القذر": التوجيه، موازنة التحميل، التشفير، المراقبة (المقاييس، التتبع، السجلات).

\n\n

بالنسبة لـ ميكروسيرفيسات Go، هذا مهم بشكل خاص. Go هي لغة للأنظمة عالية التحميل، لكن مكتبتها القياسية لا تحل مشاكل التواصل الشبكي في البيئة الموزعة. يمكنك كتابة آلية إعادة محاولة خاصة بك، ولكن لماذا تفعل ذلك عندما يوجد حل جاهز؟

\n\n

كيف يعمل؟

\n\n

تخيل أن كل ميكروسيرفيس Go يحصل على "حارس شخصي" - وكيل جانبي (sidecar proxy) (عادةً يعتمد على Envoy). جميع الطلبات الواردة والصادرة تمر عبر هذا الوكيل. تتواصل الوكلاء مع بعضهم البعض ومع لوحة التحكم المركزية. تحصل على:

\n\n
    \n
  • إعادة محاولة ومهلات زمنية تلقائية - لم تعد بحاجة لكتابة كود retry خاص بك.
  • \n
  • قاطع الدائرة (Circuit breaker) - حماية من الأعطال المتتالية.
  • \n
  • TLS المتبادل (mTLS) - تشفير حركة المرور بين الخدمات دون تغيير الكود.
  • \n
  • تتبع الطلبات - ترى أين يتباطأ نظامك.
  • \n
\n\n

Service Mesh الشهيرة لـ Go: Istio مقابل Linkerd

\n\n

هناك لاعبان رئيسيان في السوق: Istio و Linkerd. كلاهما يدعم تطبيقات Go، لكن الأساليب مختلفة.

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
الخاصيةIstioLinkerd
الوكيلEnvoy (C++)Linkerd-proxy (Rust)
صعوبة التثبيتعاليةمنخفضة
الأداءتأخير أعلى قليلاًتأخير منخفض جداً
دعم Goممتاز (عبر gRPC)ممتاز (أصلي)
\n\n

نصيحة: إذا كنت مبتدئًا، ابدأ بـ Linkerd - فهو أبسط وأسرع. إذا كنت بحاجة إلى أقصى مرونة وتخصيص (على سبيل المثال، طب

المدونات

توصيات الكتب