كيف تعمل هندسة الخدمات المصغرة

تعد بنية الخدمات المصغرة أسلوبًا مرنًا وقابلًا للتطوير ونمط معياري لتطوير تطبيقات البرامج. يتضمن تقسيم التطبيقات الكبيرة إلى أجزاء صغيرة مستقلة تؤدي وظائف محددة.

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

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

المصدر: microsoft.com

اليوم ، تحولت شركات مثل Netflix و Amazon و Uber و eBay وغيرها من التطبيقات التقليدية المتجانسة إلى الخدمات المصغرة. أدى التغيير إلى المزيد من التطبيقات الصديقة للعملاء والخدمات الموثوقة والمحسّنة.

ملخص

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

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

تدعم بنية الخدمات المصغرة التطوير المستمر ونشر البرامج. يمكن لكل فريق إنشاء سلسلة من التغييرات الصغيرة واختبار التطبيق والميزات الجديدة بشكل أسرع باستخدام خط أنابيب النشر الآلي.

المصدر: aws.amazon.com

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

كيف تعمل هندسة الخدمات المصغرة

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

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

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

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

  مشكلة برنامج تشغيل جهاز تخزين USB كبير السعة (تم الإصلاح)

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

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

خصائص بنية الخدمات المصغرة

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

بعض خصائص بنية الخدمات المصغرة هي:

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

متجانسة مقابل. معماريات الخدمات المصغرة

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

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

تتضمن بعض العيوب الرئيسية للتطبيق الأحادي ما يلي:

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

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

المصدر: ibm.com

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

فوائد هندسة الخدمات المصغرة

الفوائد الرئيسية لبنية الخدمات المصغرة هي:

# 1. توسيع نطاق الخدمات بسهولة ومرونة

تمكن بنية الخدمات المصغرة المطورين من توسيع نطاق كل خدمة بشكل مستقل لتلبية المتطلبات الفريدة لميزة معينة.

مع هذا ، لا يتعين على الفرق توسيع نطاق التطبيق بأكمله. بدلاً من ذلك ، فإنهم يركزون فقط على الوحدة ذات الطلب الأعلى وبالتالي توسيع نطاقها مع البنية التحتية المرتبطة بها.

  كيفية إصلاح Adobe Save for Web Error في Photoshop

# 2. مرونة أفضل

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

في بنية متجانسة ، من المحتمل أن تتسبب مشكلة في ميزة واحدة في فشل التطبيق بأكمله.

# 3. كود قابل لإعادة الاستخدام

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

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

الفوائد الأخرى هي:

  • تستفيد بنية الخدمات المصغرة من الحاويات والحوسبة بدون خادم و DevOps وغيرها من تقنيات تطوير البرامج الحديثة.
  • يسمح للمطورين بإنشاء وتقديم العديد من الخدمات في وقت واحد.
  • القدرة على اختبار وظائف معينة أو استكشافها وإصلاحها أو تحديثها أو إزالتها دون التأثير على وظائف أخرى.
  • دورات تطوير أقصر ونشر أسرع.
  • فرق تطوير أصغر

عيوب بنية الخدمات المصغرة

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

  • بالنسبة للتطبيقات الكبيرة ، قد تكون هناك تحديات تشفير معقدة بين الخدمات المصغرة.
  • تُعد إدارة الأمان تحديًا حيث يزداد عدد الخدمات المصغرة وينمو التطبيق. في الممارسة العملية ، ينتج عن البنية نظام موزع على نطاق واسع بسطح هجوم أكبر ، وقواعد وصول معقدة ، والمزيد من حركة مرور الشبكة للمراقبة. على سبيل المثال ، هناك العديد من المنافذ المكشوفة وواجهات برمجة التطبيقات والمكونات الأخرى ، مثل أدوات الأمان التقليدية وجدران الحماية لا يمكنها تأمينها بشكل كافٍ. هذا يجعل الخدمات المصغرة عرضة لـ DDoS ، و man-in-the-middle ، والبرمجة النصية عبر المواقع ، والهجمات الأخرى.
  • يصبح استكشاف أخطاء التطبيقات الكبيرة والمعقدة وإصلاحها أكثر صعوبة مع نموها. قد يؤدي عدد كبير من الوحدات النمطية التي تتواصل مع بعضها البعض إلى زيادة تكلفة الاتصال بسبب زيادة حركة مرور الشبكة ومكالمات RPC.
  • يجلب عدد كبير من الخدمات والعمليات والحاويات وقواعد البيانات والأجزاء المتحركة الأخرى تعقيدات وتحديات النظام الموزع.
  • مع نمو التطبيقات بشكل أكبر وأكثر تعقيدًا ، يصبح ضمان أمان المعاملات أمرًا صعبًا.

المصدر: developer.redhat.com

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

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

تتضمن بعض الأدوات الشائعة ما يلي:

  • أنظمة التشغيل مثل لينوكس وويندوز
  • لغات البرمجة – Spring Boot، Elixir، Java، Golang، Python، Node JS
  • إدارة API وأدوات الاختبار API Fortress، Postman، Tyk
  • أدوات المراسلة – RabbitMQ و Amazon Simple Queue Service (SQS) و Apache Kafka و Google Cloud Pub / Sub
  • مجموعات الأدوات – Seneca و fabric8 و Google Cloud Functions
  • الأطر المعمارية – كونغ ، جوا ، هيليدون ، كواركوس ، جزيئي
  • أدوات التنظيم – موصل ، Kurbenetes ، خدمة Azure Kurbenetes (AKS) ، Apache Mesos ، Amazon Elastic Container Service.
  • أدوات المراقبة – Logstash و Graylog Elastic Stack و Middleware
  • أدوات بدون خادم – Kubeless ، و Claudia ، و Apache Openwhisk
  •   كيفية إنشاء USB قابل للتشغيل لأي نظام تشغيل سطح مكتب

    حالات استخدام هندسة الخدمات المصغرة

    تعد الخدمات المصغرة مثالية لمختلف الصناعات والتطبيقات حيث تعمل على تحسين الأداء والكفاءة. فيما يلي بعض حالات الاستخدام الشائعة:

    # 1. تدفق البيانات

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

    # 2. تطبيقات الويب القابلة للتطوير

    على الرغم من أن بعض تطبيقات الويب عادةً ما تكون متجانسة ، إلا أن استخدام بنية الخدمات المصغرة يمكن أن يحسن قابلية التوسع والأداء.

    # 3. تطبيقات إنترنت الأشياء (IoT)

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

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

    أمثلة على الشركات التي تستخدم هندسة الخدمات المصغرة

    تشمل بعض شركات التكنولوجيا الكبرى التي تبنت خدمات مصغرة ما يلي:

    أمازون

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

    لمعالجة هذا الأمر ، انتقلوا إلى الخدمات المصغرة ، والتي تضمن الآن سهولة الصيانة ، وإضافة ميزات جديدة ، وصيانة الخدمات المستقلة الفردية ، وبالتالي منع الانقطاعات الكاملة.

    إلى جانب استخدام الخدمات المصغرة على موقع Amazon للتسوق على الويب ، فإنها توفر أيضًا بنية أساسية ، خدمات الويب من Amazon (AWS) ، حيث يمكن للشركات إنشاء الخدمات المصغرة واستضافتها وإدارتها.

    اوبر

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

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

    المصدر: uber.com

    نيتفليكس

    بفضل الخدمات المصغرة ، تمكنت Netflix من التغلب على تحديات قابلية التوسع التي كانت تواجهها مع نمو قاعدة العملاء.

    يستخدم أكثر من 500 خدمة مصغرة قائمة على السحابة لمعالجة حوالي 2 مليار طلب يوميًا. إلى جانب تحسين الموثوقية والتوافر ، قللت بنية الخدمات المصغرة من تكلفة البث.

    الكلمات الأخيرة

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

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

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

    على هذا النحو ، من الضروري تقييم وفهم مزايا وعيوب بنية الخدمات المصغرة قبل اعتماد التكنولوجيا.

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