بسط عملية تطوير الخدمات الدقيقة باستخدام Dapr و Amazon EKS

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

دابر، أو Runtime التطبيقات الموزعة، هو بيئة تشغيل مفتوحة المصدر لبناء الميكروسيرفيسز في بيئات السحابة والحافة. يوفر دابر مكونات أساسية غير مرتبطة بالمنصة مثل اكتشاف الخدمات، إدارة الحالة، رسائل النشر/الاشتراك، والرصد من دون أي إعداد. انتقل دابر إلى مستوى النضج المتخرج من CNCF (مؤسسة الحوسبة الأصلية للسحاب) ويستخدم حاليًا من قبل العديد من المؤسسات.

عند دمجه مع خدمة أمازون إلكتريك كوبرنيتس (Amazon EKS)، وهي خدمة كوبرنيتس مُدارة من أمازون ويب سيرفيسز، يمكن لدابر تسريع اعتماد الميكروسيرفيسز والحاويات، مما يمكّن المطورين من التركيز على كتابة منطق الأعمال دون القلق بشأن البنية التحتية. تجعل خدمة Amazon EKS إدارة مجموعات كوبرنيتس سهلة، مما يمكّن من التوسع بسهولة مع تغير الأحمال.

في هذه المدونة، سنستكشف كيف يبسط دابر تطوير الميكروسيرفيسز على Amazon EKS. سنبدأ بالتعمق في مكونين أساسيين: استدعاء الخدمة و إدارة الحالة.

استدعاء الخدمة

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

مع استدعاء الخدمة في Dapr، تصبح هذه المشاكل من الماضي. يمكن لخدماتك التواصل بسهولة مع بعضها البعض باستخدام بروتوكولات صناعية معيارية مثل gRPC وHTTP/HTTPS. يتولى استدعاء الخدمة كل الأعباء الثقيلة، بدءًا من تسجيل الخدمة واكتشافها إلى إعادة المحاولات للطلبات، والتشفير، ومراقبة الوصول، وتتبع التوزيع.

إدارة الحالة

يبسط كتلة بناء إدارة الحالة في Dapr الطريقة التي يعمل بها المطورون مع الحالة في تطبيقاتهم. يوفر واجهة برمجة تطبيقات متسقة لتخزين البيانات واسترجاعها، بغض النظر عن متجر الحالة الأساسي (مثل Redis، AWS DynamoDB، Azure Cosmos DB).

تمكن هذه التجريد المطورين من بناء تطبيقات تحتفظ بالحالة دون القلق بشأن تعقيدات إدارة وتوسيع متاجر الحالة.

المتطلبات الأساسية

من أجل متابعة هذه المقالة، يجب أن تكون لديك ما يلي:

  • حساب AWS. إذا لم يكن لديك حساب، يمكنك التسجيل للحصول على واحد.
  • مستخدم IAM بصلاحيات مناسبة. يجب أن يكون المبدأ الأمني IAM الذي تستخدمه لديه إذن للعمل مع أدوار IAM الخاصة بـ Amazon EKS والأدوار المرتبطة بالخدمة و AWS CloudFormation و VPC والموارد ذات الصلة. لمزيد من المعلومات، انظر Actions, resources, and condition keys for Amazon Elastic Container Service for Kubernetes و Using service-linked roles في دليل مستخدم AWS Identity and Access Management.

هندسة التطبيقات

في الرسم البياني أدناه، لدينا خدمتين صغيرتين: تطبيق Python وتطبيق Node.js. يقوم تطبيق Python بإنشاء بيانات الطلب ويستدعي نقطة النهاية /neworder التي يتعرض لها تطبيق Node.js. يكتب تطبيق Node.js البيانات الواردة للطلب في مخزن حالة (في هذه الحالة، Amazon ElastiCache) ويُعيد معرف الطلب إلى تطبيق Python كاستجابة.

من خلال استغلال كتلة بناء استدعاء الخدمة في Dapr، يمكن لتطبيق Python التواصل بسلاسة مع تطبيق Node.js دون القلق بشأن اكتشاف الخدمة، توحيد واجهة برمجة التطبيقات، أمان قناة الاتصال، التعامل مع الأخطاء، أو قابلية المراقبة. ينفذ mTLS لتوفير تواصل آمن بين الخدمات.

يتعامل Dapr مع هذه القضايا العابرة، مما يتيح للمطورين التركيز على كتابة منطق الأعمال الأساسي.

بالإضافة إلى ذلك، يبسط كتلة بناء إدارة حالة Dapr كيفية تفاعل تطبيق Node.js مع متجر الحالة (Amazon ElastiCache). يوفر Dapr واجهة برمجة تطبيقات متسقة لتخزين البيانات واسترجاعها، مجردةً عن تعقيدات إدارة وتوسيع متجر الحالة الأساسي. تمكين المطورين من بناء تطبيقات تحتفظ بالحالة دون القلق بشأن تفاصيل إدارة متجر الحالة.

تستضيف مجموعة Amazon EKS مساحة اسم تسمى dapr-system، تحتوي على مكونات خطة التحكم Dapr. يقوم dapr-sidecar-injector تلقائيًا بحقن تشغيل Dapr إلى الأشرطة لخدمات الميكروسيرفيسات التي تدعم Dapr.

خطوات استدعاء الخدمة

  1. يقوم تطبيق مُنشئ الطلبات (تطبيق Python) باستدعاء طريقة تطبيق الـ Node، /neworder. يتم إرسال هذا الطلب إلى الأشرطة المحلية لـ Dapr، التي تعمل في نفس الأشرطة التي يعمل فيها تطبيق Python. 
  2. يُحل Dapr التطبيق المستهدف باستخدام موفر خدمة DNS لمجموعة Amazon EKS ويرسل الطلب إلى الأشرطة لتطبيق الـ Node. 
  3. ثم يرسل أشرطة تطبيق الـ Node الطلب إلى ميكروسيرفيس تطبيق الـ Node. 
  4. يكتب تطبيق الـ Node ثمرة الطلب الهوية التي تلقاها من تطبيق Python إلى Amazon ElasticCache. 
  5. يُرسل تطبيق الـ Node الرد إلى أشرطته المحلية لـ Dapr. 
  6. يُوجه أشرطة تطبيق الـ Node الرد إلى أشرطة تطبيق Python. 
  7. تُعيد أشرطة تطبيق Python الرد إلى تطبيق Python، الذي بدأ الطلب إلى طريقة تطبيق الـ Node /neworder

خطوات النشر

إنشاء وتأكيد عنقود EKS

لإعداد عنقود أمازون EKS (خدمة كوبيرنيتيس المرنة)، ستحتاج إلى اتباع عدة خطوات. إليك نظرة عامة على العملية:

المتطلبات الأولية

  • قم بتثبيت وضبط AWS CLI
  • قم بتثبيت eksctl، kubectl، ومصادق AWS IAM

1. إنشاء عنقود EKS. استخدم eksctl لإنشاء عنقود أساسي باستخدام أمر مثل:

Shell

 

2. ضبط kubectl. قم بتحديث kubeconfig للاتصال بالعنقود الجديد:

Shell

 

3. التحقق من العنقود. تحقق مما إذا كانت العقد جاهزة:

Shell

 

تثبيت DAPR على عنقودك EKS

1. تثبيت DAPR CLI:

Shell

 

2. التحقق من التثبيت:

Shell

 

3. تثبيت DAPR والتحقق:

Shell

 

تم إنشاء مكونات Dapr statestore و pubsub في النطاق الافتراضي. يمكنك التحقق من ذلك باستخدام الأمر التالي:

Shell

 

ضبط Amazon ElastiCache كـ Dapr StateStore الخاص بك

قم بإنشاء Amazon ElastiCache لتخزين الحالة للخدمة المصغرة. في هذا المثال، نحن نستخدم ElastiCache لاختيار خوادم، التي تنشئ بسرعة ذاكرة مؤقتة تتطابق تلقائيًا مع متطلبات حركة مرور التطبيق دون وجود خوادم لإدارتها.

قم بتكوين مجموعة الأمان لـ ElastiCache للسماح بالاتصالات من خادم EKS الخاص بك. لأسباب بسيطة، احتفظ بها في نفس VPC الخاص بكادر EKS. احرص على الحفاظ على عنوان الذاكرة المؤقتة، الذي سنحتاجه في الخطوات التالية.

تشغيل تطبيق عينة

1. استنسخ مستودع Git لتطبيق العينة:

Shell

 

2. أنشئ redis-state.yaml وقم بتوفير عنوان Amazon ElasticCache لـ redisHost:

YAML

 

قم بتطبيق تكوين yaml لمكون متجر الحالة باستخدام kubectl.

Shell

 

3. نشر خدمات صغيرة مع السايدكار. 

بالنسبة لتطبيق العقدة الصغيرة، انتقل إلى الملف /quickstarts/tutorials/hello-kubernetes/deploy/node.yaml وستلاحظ الإعلامات أدناه. تخبر سطح التحكم في Dapr بحقن سايدكار وتعيين اسم لتطبيق Dapr.

YAML

 

أضف تعليقًا service.beta.kubernetes.io/aws-load-balancer-scheme: “internet-facing” في node.yaml لإنشاء AWS ELB.

YAML

 

نشر تطبيق العقدة باستخدام kubectl. انتقل إلى المجلد /quickstarts/tutorials/hello-kubernetes/deploy وقم بتنفيذ الأمر أدناه.

Shell

 

احصل على AWS NLB، الذي يظهر تحت عنوان IP الخارجي، في الإخراج من الأمر أدناه. 

Shell

 

انتقل إلى المجلد /quickstarts/tutorials/hello-kubernetes، الذي يحتوي على ملف sample.json لتنفيذ الخطوة أدناه.

Shell

 

يمكنك التحقق من الناتج عن طريق الوصول إلى نقطة النهاية /order باستخدام جهاز الوزن في المتصفح.

Plain Text

 

سوف ترى الناتج كـ {“OrderId”:“42”}

بعد ذلك، قم بنشر تطبيق Python للخدمات الصغيرة الثاني، الذي يحتوي على منطق تجاري لإنشاء هوية طلب جديدة كل ثانية واستدعاء طريقة التطبيق Node /neworder.

انتقل إلى الدليل /quickstarts/tutorials/hello-kubernetes/deploy وقم بتنفيذ الأمر أدناه.

Shell

 

4. التحقق من صحة واختبار نشر تطبيقك.

الآن بعد أن قمنا بنشر كل من التطبيقات الصغيرة، التطبيق Python يقوم بإنشاء الطلبات واستدعاء /neworder كما هو واضح من السجلات أدناه.

Shell

 

SystemVerilog

 

يمكننا رؤية أن التطبيق Node يستقبل الطلبات ويكتب إلى مخزن الحالة Amazon ElasticCache في مثالنا. 

Shell

 

SystemVerilog

 

لتأكيد ما إذا كانت البيانات محفوظة في Amazon ElasticCache، نصل إلى النقطة النهائية /order أدناه. يُعيد ذلك هوية الطلب الأحدث التي تم إنشاؤها بواسطة تطبيق Python.

Plain Text

 

سوف ترى الناتج مع أحدث طلب كـ {“OrderId”:“370”}

تنظيف

قم بتشغيل الأمر أدناه لحذف تطبيقات Node و Python مع مكون مخزن الحالة. 

انتقل إلى الدليل /quickstarts/tutorials/hello-kubernetes/deploy لتنفيذ الأمر أدناه.

YAML

 

يمكنك إزالة مجموعة EKS الخاصة بك باستخدام أمر eksctl وحذف Amazon ElastiCache.

انتقل إلى الدليل الذي يحتوي على ملف cluster.yaml المستخدم لإنشاء المجموعة في الخطوة الأولى.

Shell

 

الاستنتاج

يشكل Dapr وAmazon EKS تحالفًا قويًا لتطوير خدمات ميكرو. يبسط Dapr الاهتمامات العابرة، بينما يدير EKS بنية Kubernetes، مما يتيح للمطورين التركيز على منطق الأعمال الأساسي وزيادة الإنتاجية.

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

Source:
https://dzone.com/articles/streamline-microservices-development-with-dapr-amazon-eks