في هذه الوحدة، ستنشر تطبيق node.js كمجموعة من الخدمات المتصلة داخليًا خلف Application Load Balancer (ALB). وبعد ذلك، ستستخدم ALB لنقل حركة البيانات من التطبيق الموحد إلى الخدمات المُصغَّرة بسلاسة. بدء الإنشاء

هذه هي العملية التي ستتبعها لنشر الخدمات المُصغَّرة ونقل حركة بيانات التطبيق بأمان بعيدًا عن التطبيق الموحد.

نظرة عامة على التصميم
  1. تحويل حركة البيانات
    هذا هو التكوين الأولي. يعمل تطبيق node.js الموحد في حاوية على Amazon ECS.
  2. بدء الخدمات المُصغَّرة
    باستخدام صور الحاويات الثلاث التي أنشأتها ودفعتها إلى Amazon ECR في الوحدة السابقة، ستتمكن من بدء استخدام ثلاث خدمات مُصغَّرة على مجموعة Amazon ECS الحالية.
  3. تكوين المجموعات المستهدفة
    كما هو الحال في الوحدة الثانية، ستضيف مجموعة مستهدفة لكل خدمة وستحدِّث «قواعد ALB» لتوصيل الخدمات المُصغَّرة الجديدة.
  4. إغلاق التطبيق الموحد
    بتغيير قاعدة واحدة في ALB، ستتمكن من البدء في توجيه حركة البيانات إلى الخدمات المُصغَّرة قيد التشغيل. بعد التحقق من إعادة توجيه حركة البيانات، أغلِق التطبيق الموحد.

الوقت اللازم للإكمال: 30 دقيقة

الخدمات المُستخدمة


اتبع التعليمات المفصلة أدناه لنشر الخدمات المُصغَّرة. حدِّد رقم كل خطوة لاستعراض القسم.

  • الخطوة 1. اكتب تعريفات المهام لخدماتك

    ستنشر ثلاث خدمات جديدة للمجموعة التي شغلتها في الوحدة الثانية. كما هو الحال في الوحدة الثانية، ستكتب تعريفات المهام لكل خدمة.

    ⚐ ملاحظة: من الممكن إضافة حاويات متعددة لتعريف مهمة واحد. يعني ذلك أن باستطاعتك تشغيل الخدمات المُصغَّرة الثلاث باعتبارها حاويات مختلفة من خدمة واحدة. ومع ذلك، لا يزال هذا النهج موحّدًا حيث إن كل حاوية ستحتاج إلى التوسع بشكل خطي مع الخدمة. إن هدفك هو أن تكون لديك ثلاث خدمات مستقلة. تتطلب كل خدمة أن يشغّل تعريف مهمتها حاوية بها الصورة الخاصة بهذه الخدمة.

    يمكنك إما إنشاء تعريفات المهام هذه من وحدة تحكم Amazon ECS وإما تسريع الأمور بكتابتها بصيغة JSON. لكتابة تعريفات المهام بصيغة ملف JSON، اتبع الخطوات التالية:

    1. من وحدة تحكم Amazon Container Services، ضمن Amazon ECS، حدِّد «تعريفات المهام».
    2. في صفحة «تعريفات المهام»، حدِّد الزر «إنشاء تعريف مهمة جديد».
    3. في الصفحة «تحديد توافق نوع التشغيل»، حدِّد الخيار «EC2 »ثم حدِّد «الخطوة التالية».
    4. في الصفحة «تكوين المهام وتعريفات الحاويات»، مرِّر وصولاً إلى القسم «الوحدات» وحدِّد الزر «التكوين من خلال JSON».
    5. انسخ أجزاء التعليمات البرمجية التالية وألصقها في حقل JSON، مع استبدال التعليمات البرمجية الحالية.
      تذكر استبدال العناصر النائبة [service-name] و[account-ID] و[region] و[tag].

    ⚐ ملاحظة: تُستخدم المعلمات التالية لتعريف المهمة:

    • الاسم = [service-name: posts, threads, and users] 
    • الصورة = [Amazon ECR repository image URL]:latest
    • وحدة المعالجة المركزية= 256 
    • الذاكرة = 256 
    • منفذ الحاوية = 3000 
    • منشور المضيف = 0
    {
        "containerDefinitions": [
            {
                "name": "[service-name]",
                "image": "[account-id].dkr.ecr.[region].amazonaws.com/[service-name]:[tag]",
                "memoryReservation": "256",
                "cpu": "256",
                "essential": true,
                "portMappings": [
                    {
                        "hostPort": "0",
                        "containerPort": "3000",
                        "protocol": "tcp"
                    }
                ]
            }
        ],
        "volumes": [],
        "networkMode": "bridge",
        "placementConstraints": [],
        "family": "[service-name]"
    }

    ♻ كرر الخطوات لإنشاء تعريف مهمة لكل خدمة:

    • المنشورات
    • مؤشرات الترابط
    • المستخدمون
  • الخطوة 2. تكوين Application Load Balancer: المجموعات المستهدفة

    كما هو الحال في الوحدة الثانية، كِّون مجموعة مستهدفة لكل خدمة (المنشورات، ومؤشرات الترابط، والمستخدمين). تسمح المجموعة المستهدفة بوصول حركة البيانات بشكل صحيح للخدمة المحددة. ستكوِّن المجموعات المستهدفة باستخدام AWS CLI. ولكن تأكد قبل المتابعة من أن لديك اسم VPC الصحيح المستخدم لهذا الشرح التوضيحي:

    • انتقِل إلى القسم «موازن الأحمال» من وحدة تحكم EC2‏.
    • حدِّد مربع الاختيار بجانب العرض التجريبي، وحدِّد علامة التبويب «الوصف» وحدِّد مكان سمة VPC (بهذه الصيغة: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ ملاحظة: ستحتاج إلى سمة VPC عند تكوين المجموعات المستهدفة.

    تكوين المجموعات المستهدفة

    في وحدتك الطرفية، أدخِل الأمر التالي لإنشاء مجموعة مستهدفة لكل خدمة (المنشورات، ومؤشرات الترابط، والمستخدمين). بالإضافة إلى ذلك، ستنشئ مجموعة مستهدفة (إسقاط حركة البيانات) لمنع حركة البيانات من الوصول إلى تطبيقك الموحد بعد تشغيل الخدمات المُصغَّرة بشكل كامل. تذكّر استبدال العناصر النائبة التالية: [region]، و[service-name] و[vpc-attribute].

    أسماء الخدمات: المنشورات ومؤشرات الترابط والمستخدمين وإسقاط حركة البيانات

    aws elbv2 create-target-group --region [region] --name [service-name] --protocol HTTP --port 80 --vpc-id [vpc-attribute] --healthy-threshold-count 2 --unhealthy-threshold-count 2 --health-check-timeout-seconds 5 --health-check-interval-seconds 6
    المجموعات المستهدفة
  • الخطوة 3. تكوين قواعد وحدة الإصغاء

    تتحقق وحدة الإصغاء من طلبات الاتصال الواردة إلى ALB من أجل توجيه حركة البيانات بشكل مناسب.

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

    الوصول إلى قواعد وحدات الإصغاء

    • انتقِل إلى القسم «موازن الأحمال» من وحدة تحكم EC2‏.
    • حدِّد مكان موازن الأحمال المسمى العرض التجريبي وحدِّد مربع الاختيار المجاور له للاطّلاع على تفاصيل موازن الأحمال.
    • حدِّد علامة التبويب «وحدة الإصغاء».

    تحديث قواعد وحدة الإصغاء

    ينبغي أن يكون هناك وحدة إصغاء واحدة مدرجة في علامة التبويب هذه. اتخذ الخطوات التالية لتحرير قواعد وحدة الإصغاء:

    • ضمن العمود «القواعد»، حدِّد «عرض/تحرير القواعد».
    • في الصفحة «القواعد»، حدِّد زر الإضافة (+).
      يظهر الخيار «إدخال القاعدة» على الصفحة. 
    • استخدم قالب القاعدة التالي لإدخال القواعد الضرورية، والتي تتضمن قاعدة للحفاظ على حركة البيانات إلى التطبيق الموحد وقاعدة أخرى لكل خدمة مُصغَّرة:
      • إذا كان المسار = /api/[service-name]* فأعد التوجيه عندئذ إلى [service-name]
        على سبيل المثال: إذا كان المسار = /api/posts* فأعد التوجيه إلى المنشورات
      • أدخِل القواعد بالترتيب التالي:
        • واجهة برمجة التطبيقات: يقوم المسار /api* بإعادة التوجيه إلى واجهة برمجة التطبيقات
        • المستخدمون: يقوم المسار /api/users* بإعادة التوجيه إلى المستخدمين
        • مؤشرات الترابط: يقوم المسار /api/threads* بإعادة التوجيه إلى مؤشرات الترابط
        • المنشورات: يقوم المسار /api/posts* بإعادة التوجيه إلى المنشورات
    • حدِّد «حفظ».
    • حدِّد سهم الرجوع في الركن الأيمن العلوي من الصفحة للعودة إلى وحدة تحكم موازن الأحمال.
    تكوين قواعد وحدة إصغاء Application Load Balancer
  • الخطوة 4. نشر الخدمات المُصغَّرة

    انشر الخدمات المُصغَّرة الثلاث (المنشورات، ومؤشرات الترابط، والمستخدمين) إلى مجموعتك. كرِّر هذه الخطوات لكل من الخدمات المُصغَّرة الثلاث:

    • انتقِل إلى وحدة تحكم Amazon ECS وحدِّد مجموعات من شريط القوائم الأيمن.
    • حدِّد المجموعة «BreakTheMonolith -العرض التجريبي»، وحدِّد علامة التبويب «الخدمات» ثم حدِّد «إنشاء».
    • في صفحة تكوين الخدمات، عدّل المعلمات التالية (وحافظ على القيم الافتراضية للمعلمات غير المذكورة أدناه):
      • بالنسبة إلى نوع التشغيل، حدِّد «EC2».
      • بالنسبة إلى تعريف المهمة، حدِّد الزر «إدخال قيمة» لتحديد أعلى قيمة مراجعة تلقائيًا.
        على سبيل المثال: api:1 
      • بالنسبة إلى اسم الخدمة، أدخِل اسم إحدى الخدمات (المنشورات أو مؤشرات الترابط أو المستخدمين).
      • بالنسبة إلى عدد المهام، أدخِل1
    • حدِّد «الخطوة التالية».
    • في الصفحة تكوين الشبكة، من القسم موازنة الأحمال، نفِّذ ما يلي:
      • بالنسبة إلى نوع موازن الأحمال، حدِّد Application Load Balancer.
      • بالنسبة إلى Service IAM role، حدِّد BreakTheMonolith-Demo-ECSServiceRole.
      • بالنسبة إلى اسم موازن الأحمال، تأكد من تحديد العرض التجريبي.
      • في القسم حاوية موازنة الأحمال، حدِّد الزر «إضافة إلى موازن الأحمال» وأجرِ التعديلات التالية:
        • بالنسبة إلى منفذ وحدة إصغاء الإنتاج، قم بالضبط على 80:HTTP.
        • بالنسبة إلى اسم المجموعة المستهدفة، حدِّد المجموعة المناسبة: (المنشورات، أو مؤشرات الترابط أو المستخدمين)
    • حدِّد «الخطوة التالية».
    • في الصفحة ضبط Auto Scaling، حدِّد «الخطوة التالية».
    • في الصفحة المراجعة، حدِّد «إنشاء الخدمة».
    • حدِّد «عرض الخدمة».

    من المفترض أن يستغرق الأمر بضع ثوانٍ فقط لتبدأ جميع خدماتك. تحقق مرة أخرى من عمل جميع الخدمات والمهام وفعاليتها قبل المتابعة.

    نشر الخدمات المُصغَّرة باستخدام Amazon ECS
  • الخطوة 5. تحويل حركة البيانات إلى خدمات مُصغَّرة

    تعمل الخدمات المُصغَّرة لديك الآن، ولكن حركة البيانات كافة لا تزال تتدفق إلى خدمة التطبيق الموحد. لإعادة توجيه حركة البيانات إلى الخدمات المُصغَّرة، نفِّذ الخطوات التالية لتحديث قواعد وحدات الإصغاء:

    • انتقِل إلى القسم «موازن الأحمال» بوحدة تحكم EC2.
    • حدِّد مربع الاختيار بجوار «العرض التجريبي» للاطِّلاع على تفاصيل موازن الأحمال.
    • حدِّد علامة التبويب «وحدة الإصغاء».
      ينبغي أن تكون هناك وحدة إصغاء واحدة مُدرجة.
    • ضمن العمود «القواعد»، حدِّد «عرض/تحرير القواعد».
    • في الصفحة «القواعد»، حدِّد زر الناقص (-) من القائمة العلوية.
    • احذف القاعدة الأولى (يقوم مسار /api* بإعادة التوجيه إلى واجهة برامج التطبيقات) من خلال تحديد مربع الاختيار بجانب القاعدة.
    • حدِّد «حذف».
    • حدِّث القاعدة الافتراضية لإعادة توجيهها إلى إسقاط حركة البيانات:
      • حدِّد الزر «تحرير» (القلم الرصاص) من القائمة العلوية.
      • حدِّد أيقونة التحرير (القلم الرصاص) بجانب القاعدة الافتراضية (HTTP 80: الإجراء الافتراضي).
      • حدِّد أيقونة التحرير (القلم الرصاص) في العمود THEN لتحرير إعادة التوجيه إلى.
      • في الحقل المجموعة المستهدفة، حدِّد «إسقاط حركة البيانات».
      • حدِّد الزر «تحديث».

    اطّلع على لقطات الشاشة التالية لترى مثالاً على القواعد المُحدَّثة.

    تحويل Amazon EC2 لحركة البيانات إلى الخدمات المُصغَّرة

    تعطيل التطبيق الموحد: بتدفق حركة البيانات الآن إلى خدماتك المُصغَّرة، يمكنك تعطيل خدمة التطبيق الموحد.

    • انتقِل للعودة إلى مجموعة Amazon ECSBreakTheMonolith-Demo-ECSCluster.
    • في علامة التبويب «الخدمات»، حدِّد مربع الاختيار بجانب «واجهة برنامج التطبيقات» ثم حدِّد «تحديث».
    • في الصفحة «تكوين الخدمة»، حدِّد موقع «عدد المهام» وأدخِل 0.
    • حدِّد «تخطٍ للمراجعة».
    • حدِّد «تحديث الخدمة».

    ستقوم Amazon ECS الآن بتفريغ التوصيلات من الحاويات التي نشرتها الخدمة في المجموعة، ثم إيقاف الحاويات. في حال تحديث قوائم المهام أو عمليات النشر بعد حوالي 30 ثانية، سترى أن عدد المهام سينخفض إلى 0. ما زالت الخدمة فعالة؛ لذلك إن احتجت للرجوع لأي سبب، فإنه يمكنك ببساطة تحديثها لنشر مزيد من المهام.

    اختياريًا، يمكنك حذف خدمة واجهة برامج التطبيقات. في علامة التبويب «الخدمات»، حدِّد مربع الاختيار بجانب «واجهة برمجة التطبيقات»، ثم حدِّد «حذف»، وأكِّد الحذف.

    لقد قمت الآن بنقل node.js لديك بالكامل من التطبيق الموحد إلى الخدمات المُصغَّرة دون أي انقطاع للخدمة!

  • الخطوة 6. تحقق من عملية النشر

    العثور على عنوان URL للخدمة: هذا هو نفس عنوان URL الذي استخدمته في الوحدة الثانية من هذا الشرح التوضيحي.

    • انتقِل إلى القسم «موازن الأحمال» من وحدة تحكم EC2 .
    • حدِّد مربع الاختيار بجوار «العرض التجريبي» للاطِّلاع على تفاصيل موازن الأحمال.
    • في علامة التبويب «الوصف»، حدِّد موقع «اسم DNS» ثم حدِّد أيقونة النسخ في نهاية عنوان URL. 
    • ألصق اسم DNS في علامة تبويب أو نافذة جديدة للمتصفح.

    من المفترض أن ترى رسالة «جاهز لتلقي الطلبات».

    انظر القيم لكل من الخدمات المُصغَّرة: يوجه ALB حركة البيانات بناءً على عنوان URL المطلوب. لرؤية كل خدمة، ما عليك سوى إضافة اسم الخدمة لنهاية اسم DNS:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts
    انظر القيم لكل من الخدمات المُصغَّرة

    ⚐ ملاحظة: تؤدي عناوين URL هذه الأداء نفسه عند نشر التطبيق الموحد. ويعد ذلك مهمًا للغاية حيث لن تتأثر أي من واجهات برمجة التطبيقات أو المستهلكين الذين يتوقعون الاتصال بهذا التطبيق بالتغييرات التي أجريتها. لم يتطلب الانتقال من التطبيقات الموحدة إلى الخدمات المُصغَّرة أي تغييرات على الأجزاء الأخرى من بنيتك التحتية.

    يمكنك أيضًا استخدام الأدوات، مثل Postman لاختبار واجهات برمجة التطبيقات لديك.