هل تصرخ ميكروسيرفيسات 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
Service Mesh الشهيرة لـ Go: Istio مقابل Linkerd
\n\nهناك لاعبان رئيسيان في السوق: Istio و Linkerd. كلاهما يدعم تطبيقات Go، لكن الأساليب مختلفة.
\n\n| الخاصية | \nIstio | \nLinkerd | \n
|---|---|---|
| الوكيل | \nEnvoy (C++) | \nLinkerd-proxy (Rust) | \n
| صعوبة التثبيت | \nعالية | \nمنخفضة | \n
| الأداء | \nتأخير أعلى قليلاً | \nتأخير منخفض جداً | \n
| دعم Go | \nممتاز (عبر gRPC) | \nممتاز (أصلي) | \n
نصيحة: إذا كنت مبتدئًا، ابدأ بـ Linkerd - فهو أبسط وأسرع. إذا كنت بحاجة إلى أقصى مرونة وتخصيص (على سبيل المثال، طب