إنشاء بنية قابلة للتطوير ومرنة مع الخدمات الدقيقة الديناميكية

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




حاشية. ملاحظة


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

1 المقدمة


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

كانت هناك حاجة لزيادة كمية البرامج وجودتها [1]. أحد العوامل الرئيسية في توضيح الاختلافات المختلفة المرتبطة بالتصميم المبتكر هو كفاية استخدام أدوات متنوعة لتصميم وتطوير أنظمة برمجيات أكثر تقدمًا [2]. تم إثبات النجاح الكبير في هذه العملية مؤخرًا من خلال الأنظمة القائمة على الخدمات الدقيقة [3] ، وهي نموذج معماري يركز على تطبيقات مختلفة (على سبيل المثال ، للأشخاص ذوي الإعاقة) [3]. تحت رعاية الخدمات الصغيرة ، يتزايد الاهتمام بالعمارة والتصميم. سمات الجودة (مثل قابلية التوسع والأداء والتحمل للخطأ) أو اختيار النموذج ، مثل "الخدمة التعاقدية" [5] أو بوابة API ،لم تعد تنتهك مبدأ YAGNI ("لن تحتاج إليها" - "تعاني من أخطاء BDUF" ("تصميم كبير مقدمًا" - "تصميم واسع النطاق أولاً"). السؤال البحثي الرئيسي الذي تنوي هذه المقالة الإجابة عنه هو كيف يمكننا تطوير نظام قائم على الخدمات الصغيرة بنفس بساطة النظام المتآلف؟ علاوة على ذلك ، بدءًا من الموضوع السابق ، كيف يمكننا إنشاء بيئة توفر توزيعًا ديناميكيًا لقوة الحوسبة بين العملاء؟ تقترح فرضية البحث لدينا استخدام بنية نظام خادم-خادم تجمع بين الحوسبة الموزعة والخدمات الدقيقة لحل هذه المشاكل.السؤال البحثي الرئيسي الذي تنوي هذه المقالة الإجابة عنه هو كيف يمكننا تطوير نظام قائم على الخدمات الصغيرة بنفس بساطة النظام المتآلف؟ علاوة على ذلك ، بدءًا من الموضوع السابق ، كيف يمكننا إنشاء بيئة توفر توزيعًا ديناميكيًا لقوة الحوسبة بين العملاء؟ تقترح فرضية البحث لدينا استخدام بنية نظام خادم-خادم تجمع بين الحوسبة الموزعة والخدمات الدقيقة لحل هذه المشاكل.السؤال البحثي الرئيسي الذي تنوي هذه المقالة الإجابة عنه هو كيف يمكننا تطوير نظام قائم على الخدمات الصغيرة بنفس بساطة النظام المتآلف؟ علاوة على ذلك ، بدءًا من الموضوع السابق ، كيف يمكننا إنشاء بيئة توفر توزيعًا ديناميكيًا لقوة الحوسبة بين العملاء؟ تقترح فرضية البحث لدينا استخدام بنية نظام خادم-خادم تجمع بين الحوسبة الموزعة والخدمات الدقيقة لحل هذه المشاكل.الذي يوفر التوزيع الديناميكي لقوة الحوسبة بين العملاء؟ تقترح فرضية البحث لدينا استخدام بنية نظام خادم-خادم تجمع بين الحوسبة الموزعة والخدمات الدقيقة لحل هذه المشاكل.الذي يوفر التوزيع الديناميكي لقوة الحوسبة بين العملاء؟ تقترح فرضية البحث لدينا استخدام بنية نظام خادم-خادم تجمع بين الحوسبة الموزعة والخدمات الدقيقة لحل هذه المشاكل.

هيكل الوثيقة كما يلي: يقدم القسم 2 نظرة عامة موجزة عن الأدبيات الحالية التي توضح أهمية الخدمات الدقيقة ، بما في ذلك خدمتين معروفتين جيدتين تقدمهما Azure ، ويناقش القسم 3 البنية المقترحة. يناقش القسم 4 تقييم هذا النظام قبل استخلاص النتائج في القسم الأخير.

2. مراجعة أدبيات الخدمات الصغيرة


بفضل البنية السحابية ، أصبح نشر أنظمة الخدمات الصغيرة أكثر إنتاجية ومرونة وفعالية من حيث التكلفة [6]. ومع ذلك ، يلاحظ زيمرمان أن الخدمات الدقيقة هي موضوع حساس تتم دراسته بشكل رئيسي في الأوساط الأكاديمية [7] والصناعة. نوقش مصطلح "الخدمات المصغرة" لأول مرة في ندوة لمهندسي البرمجيات في إيطاليا في مايو 2011 لوصف ما اعتبره المشاركون أسلوبًا معماريًا مشتركًا تم استكشافه مؤخرًا من قبل العديد منهم. وبعد مرور عام ، أكدت نفس المجموعة أن مصطلح "الخدمات المصغرة" هو الاسم الأنسب. في الواقع ، تم تطوير الخدمات المصغرة كإجابة للمشكلات في التطبيقات المتجانسة أو البنى الموجهة نحو الخدمة التي تعقد قابلية تطوير وتعقيد وتبعيات التطبيق الجاري تطويره ،جنبا إلى جنب مع استخدام آليات الاتصال خفيفة الوزن [8-9]. نظرًا لأن monolith هو تطبيق برمجي لا يمكن تنفيذ وحداته بشكل مستقل ، يجب أن نفكر في حل يعتمد على الخدمات الدقيقة ، لأنه الوحيد القادر على تنفيذ التعليمات بشكل مستقل عن بعضها البعض [10-11]. تصبح الأحاديات الكبيرة مشكلة في الحفاظ عليها بمرور الوقت ويصعب تقييمها بسبب تعقيدها ، ولكن العيب الرئيسي هو أنها تحد من قابلية المنتج للتوسع. هناك مشكلة أخرى وهي أنها لا توفر التسامح مع الخطأ ، ولا تسمح لمكون فردي في النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.نظرًا لأن monolith هو تطبيق برمجي لا يمكن تنفيذ وحداته بشكل مستقل ، يجب أن نفكر في حل يعتمد على الخدمات الدقيقة ، حيث إنه الوحيد القادر على تنفيذ التعليمات بشكل مستقل عن بعضها البعض [10-11]. تصبح الأحاديات الكبيرة مشكلة في الحفاظ عليها بمرور الوقت ويصعب تقييمها بسبب تعقيدها ، ولكن العيب الرئيسي هو أنها تحد من قابلية المنتج للتوسع. هناك مشكلة أخرى وهي أنها لا توفر التسامح مع الخطأ ، ولا تسمح لمكون فردي في النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.نظرًا لأن monolith هو تطبيق برمجي لا يمكن تنفيذ وحداته بشكل مستقل ، يجب أن نفكر في حل يعتمد على الخدمات الدقيقة ، لأنه الوحيد القادر على تنفيذ التعليمات بشكل مستقل عن بعضها البعض [10-11]. تصبح الأحاديات الكبيرة مشكلة في الحفاظ عليها بمرور الوقت ويصعب تقييمها بسبب تعقيدها ، ولكن العيب الرئيسي هو أنها تحد من قابلية المنتج للتوسع. هناك مشكلة أخرى وهي أنها لا توفر التسامح مع الخطأ ، ولا تسمح لمكون فردي في النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.قادرة على تنفيذ تعليمات مستقلة عن بعضها البعض [10-11]. تصبح الأحاديات الكبيرة مشكلة في الحفاظ عليها بمرور الوقت ويصعب تقييمها بسبب تعقيدها ، ولكن العيب الرئيسي هو أنها تحد من قابلية المنتج للتوسع. هناك مشكلة أخرى وهي أنها لا توفر التسامح مع الخطأ ، ولا تسمح لمكون فردي في النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.قادرة على تنفيذ تعليمات مستقلة عن بعضها البعض [10-11]. تصبح الأحاديات الكبيرة مشكلة في الحفاظ عليها بمرور الوقت ويصعب تقييمها بسبب تعقيدها ، ولكن العيب الرئيسي هو أنها تحد من قابلية المنتج للتوسع. هناك مشكلة أخرى وهي أنها لا توفر التسامح مع الخطأ ، ولا تسمح لمكون فردي في النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.ولا تسمح لمكون فردي من النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.ولا تسمح لمكون فردي من النظام بالعمل عندما لا يعمل مكون آخر ، وهو أمر ممكن في البنى الموجهة نحو الخدمات الصغرى.

في SOA (هندسة موجهة نحو الخدمة) ، يتم تنسيق الخدمات الرئيسية باستخدام طريقتين: التنسيق (حيث توجد خدمة صغيرة مركزية سترسل الطلبات إلى خدمات أخرى وتتحكم في العملية بأكملها عن طريق إرسال واستقبال الردود) وتصميم الرقصات (التي لا تنطوي على أي مركزية ، ولكن كل خدمة تعرف مسبقًا ما يجب أن تفعله) [1]. كما هو الحال بالنسبة للهندسة المعمارية المتجانسة وهياكل SOA ، تظل المشكلة الأكثر صعوبة هي تقسيم النظام إلى خدمات [12]. وأيضًا ، يجب ألا تهمل بأي حال من الأحوال مسألة توفير معلومات سرية من خلال التوزيع غير المنضبط للخدمات [13].

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

Azure Batch هو نموذج برمجة آخر يستخدم لتشغيل التطبيقات المحوسبة بكفاءة في وضع متوازي أو واسع النطاق ، بدون تكوين يدوي أو إدارة البنية التحتية ، مع مجموعات أكثر قوة من الحوسبة عالية الأداء (HPC - الحوسبة عالية الأداء) [15]. لتوضيح هذه الأفكار ، دعنا نذكرك بـ SaaS (البرنامج كخدمة) أو تطبيقات العميل التي تحتاج إلى تنفيذ واسع [16]. في الواقع ، تظهر العديد من شركات تكنولوجيا المعلومات اهتمامًا متزايدًا بـ SaaS ، وتهتم بخفض نفقات التشغيل ، ونتيجة لذلك ، في زيادة مرونة أعمالهم [17]. خدمة أخرى يقدمها كبار مزودي الخدمات السحابية هي Azure Functions ،مما يسمح بالإطلاق عند الطلب دون الحاجة إلى توفير أو إدارة صريحة للبنية التحتية [18].

كما أنه يزيد من اهتمام التطبيقات بإطلاق أجزاء صغيرة من التعليمات البرمجية أو "الوظائف" بسهولة في السحابة. الاهتمام المتزايد بإنترنت الأشياء (IoT) يجعل وظائف Azure [19] حلاً ممتازًا لمعالجة البيانات وتكامل النظام وإنشاء واجهات برمجة تطبيقات وخدمات مصغرة بسيطة.

3. المنهجية


يمكن تقسيم النظام المقترح من الناحية الهيكلية إلى 3 مجالات مختلفة: (1) العميل - الذي سيقوم بالمهام المعينة من قبل الخادم ؛ (2) الخادم - واجهة مع العميل ، دماغ التطبيقات المتجانسة ؛ (3) منطقة إدارة اتصالات العميل والخادم تتضمن كل التفاصيل المرتبطة بنقل التنفيذ من الخادم إلى العميل. يتم تشفير جميع المعلومات المرسلة عبر الشبكة بين العميل والخادم باستخدام خوارزمية DES (معيار تشفير البيانات) ، ويتم تغيير المفتاح باستخدام بروتوكول Diffie-Hellman [20] ، والذي ، على الرغم من أنه ضعيف في ظل ظروف معينة ، بعد تنفيذها في مجموعة متنوعة من حلول أمن الإنترنت.

3.1. بنية النظام

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

في التين. يوضح الشكل 1 كيف يقوم الخادم بتوزيع حزم الوظائف لعملائه. اعتمادًا على عدد العملاء ، قد تكون هناك تعليمات لن يتم تعيينها لأي عميل ، أو نفس مجموعة التعليمات المعينة لعدة عملاء.


تين. 1. توزيع الخدمات للعملاء.

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

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

  1. يتصل العميل بالخادم ويبدأ بروتوكول تبادل مفاتيح. كما سيزودهم بالخادم والمنفذ اللذين سيتوافقان معه.
  2. يقوم الخادم بإخطار العميل بالمهمة التالية التي سيتم تنفيذها (يتم تمثيل المهمة بواسطة زوج (خدمة صغيرة ، بيانات إدخال)).
  3. يتلقى العميل المهمة ، ثم يخطر الخادم بأن عملية النقل والتنزيل قد اكتملت إما بنجاح أو دون نجاح.
  4. بمجرد إنشاء الاتصال بين الكائنين ، يرسل الخادم البيانات بتنسيق JSON ، المشفرة باستخدام DES ، إلى العميل للمعالجة.
  5. ( , ) JSON, DES.
  6. , .
  7. — .

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

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

بالنسبة لخيار الخدمات المصغرة الممتدة ، ستكون مراحل تفاعل العميل مع العميل كما يلي:

  1. . , . , DES.
  2. , , . , , , , . , ( . .).
  3. , ( ), , .
  4. .
  5. يقوم العميل بفك تشفير النتيجة بكلمة مرور لمرة واحدة ويستمر التنفيذ.

3.2. التطبيق

لاختبار وتقييم هذه البنية ، قمنا بتنفيذ العديد من الخدمات الدقيقة التي طالبنا بها لما أردنا التحقق منه في كل مرة.


تين. 2. الواجهة.

في التجربة الأولى ، استخدمنا 3 خدمات دقيقة على النحو التالي: (1) خدمة صغيرة تقوم بعملية حسابية على رقمين (باستخدام LibraryMath) ، (2) خدمة صغيرة تخبرنا ما إذا كان الرقم موجبًا (MasterOfNumbers) و (3) خدمة صغيرة موسعة ، والتي ستستدعي الخدمة الأولى عندما تتلقى رقمين ، وسيتم إرسال النتيجة إلى الخدمة الصغيرة الثانية لاستخراج معلومات حول هذا الرقم (UniverseOfSuperMath).

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

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


تين. 3. الواجهة.

لدينا 6 حقول: ClientToken - رمز مميز فريد مرتبط بكل عميل (عندما تكون المكالمة محلية ولها قيمة المضيف المحلي) ؛ التاريخ - لحظة تقديم الطلب ؛ IP & Port = عنوان IP للعميل والمنفذ الذي يتم الاتصال من خلاله ؛ الوظيفة - اسم الوظيفة المطلوبة ؛ نجاح - إشارة منطقية تشير إلى نجاح المكالمة. على سبيل المثال ، نلاحظ أنه في المكالمة الأولى (h: 8:38:21 العميل غير متصل بالخادم ، يتم تنفيذ العملية بواسطة الخادم). في المكالمة الثانية ، نلاحظ السلوك الديناميكي للنظام ، ويتم تنفيذ إحدى المهام من قبل أحد العملاء ، ويتم تنفيذ المهام الأخرى من قبل الخادم. وبشكل أكثر تحديدًا ، يُطلق على UniverserOfSuperMath (محليًا - العميل غير متاح لهذه المهمة) ، والذي بدوره يستدعي خدمتين صغيرتين أخريين ، واحدة محلية والأخرى من خلال عميل مفوض لاستخدام تعليمات معينة ، إلخ.د.

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

في الشكل 3 على اليمين ، توضح المكالمة في الساعة 8:46 هذا السيناريو. العملاء على المنفذين 8390 و 8827 لديهم مشكلة محلية أو في الشبكة أو ببساطة أغلقوا الاتصال بالخادم ، ولا يتلقى الخادم إشعارًا في الوقت المناسب لإزالتهم من القائمة. سيحاول الخادم الاتصال بالعملاء وتشغيل الأوامر ، ولكن إذا لم يستجبوا في الوقت المناسب ، فإن الخادم يقوم بمهامهم ويعيد النتيجة المطلوبة. للتأكيد ، سيتم طلب العملاء مرة أخرى بعد فترة ، وإذا استمروا في عدم الرد ، فسيتم حذفهم من قائمة العملاء المتاحين. المكالمة التالية (8:47) لن تطلب بعد الآن بدون فائدة عملاء لم يعودوا متاحين ، والمهام التي تم تخطيها من قبل العملاء المتاحين سيتم تنفيذها من قبل الخادم.

مزايا وعيوب الحل المقترح

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

يجب التأكيد على القيود بالتساوي: عندما لا يتطابق منحنى قوة الحوسبة مع منحنى قوة العميل. لدينا أيضًا قيود على القدرة على تشغيل هذا التطبيق على أي نظام تشغيل. للقيام بذلك ، قررنا تحويل حل ميسور التكلفة من .NET إلى Java. لكن هذا الحل له بعض العوائق فيما يتعلق بالحل الأصلي (توفر Java سرعة معالجة بيانات أقل ونقل أقل للحزم الديناميكية مما نقوم به في .NET). نحن نستخدم هذا الحل حاليًا لأن .Net Core الذي توفره Microsoft للعمل على العديد من الأنظمة الأساسية ليس حلاً ناضجًا بعد ولا يقدم جميع وظائف النظام الأساسي القياسي .NET).

3.3. مكونات خادم العميل

3.3.1. الزبون

في هذه البنية ، يعد العميل تطبيق سطح مكتب مؤسسة Windows Presentation Foundation (WPF) مصممًا خصيصًا للتواصل مع الخادم وأداء المهام المختلفة المستلمة منه. نظرًا لأن التطبيق هو ملف قابل للتنفيذ لا يتطلب التثبيت ، يجب أن يعمل نظام التشغيل مع .Net Framework. بشكل أساسي ، ستتفاعل الخدمة المصغرة للويب مع الخدمة المصغرة للويب الأخرى.

أولاً ، يبدأ العميل برنامج جدولة المهام في سلسلة موازية ، والتي ستحاول كل دقيقة إخطار الخادم بوجودها. يمكن أن تستغرق المهمة حالتين: (1) إما أن هناك مهمة للتنفيذ (تم الانتهاء من تهيئة حزمة التعليمات البرمجية بالفعل) - في هذه الحالة فإنها تُعلم الخادم فقط بوجودها ؛ (2) أو يتطلب التهيئة مع الخادم.

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

قبل استخراج هذه الحزمة ، احذف الدليل السابق الذي يحتوي على تعليمات من مجلد "العملية" (إن وجد) ، ثم استخرج المحتوى الجديد إلى هذا المجلد وحمله في الذاكرة. يبدأ تحميل الذاكرة مرة واحدة ، بغض النظر عن عدد المكالمات التي يتلقاها العميل. هذا ممكن لأن ثلاث خصائص تبقى بدون تغيير في الجلسة: التجميع ، methodInfo ، والنوع. يقوم التجميع بتخزين ارتباط إلى DLL الذي تم تحميله ، وتحتوي الخاصية methodInfo على الطريقة التي يتم استدعاؤها من DLL ، ويصف النوع نوع DLL. ملف install.zip عبارة عن حزمة من التعليمات التي يتم تلقيها من خادم يحتوي على ملفات DLL و XML والصور وملفات التكوين وما إلى ذلك ، وجميع التعليمات البرمجية المترجمة التي سيتم تنفيذها في عملية مستقبلية.

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

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

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

3.3.2. الخادم

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

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

تقوم Service1 بتطبيق IService1 وتوسعة فئة MicroCore المجردة ، ثم تقوم بالتسجيل مع MicroContainer.RegisterMicro في هذه الحاوية. تجدر الإشارة إلى وجود واجهات برمجة التطبيقات المتاحة في localohst / DynamicMicros / {Service} التي يتواصل العملاء من خلالها مع الخادم. الإجراءات المهمة المتاحة من خلال واجهات برمجة التطبيقات هذه: يتصل العميل ، ويخطر العميل الخادم بنشاطه ، وتتوسع الخدمات الصغيرة ، وما إلى ذلك. بعد ذلك ، نقدم فئتي MicroCore و MicroContainer ، اللتين تشكلان معًا أساس تطبيقنا.

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

وبالعودة إلى جانب الخادم ، فإن التحكم في تنفيذ التعليمات البرمجية يتكون من الخطوات التالية:

  1. إذا كانت مكالمة ExtendedService ، فسيتم استدعاء الخادم للرد.
  2. إذا كان العميل متاحًا للطلب ، فسيتم إرساله إليه لمعالجة النتيجة ؛ في الحالة السلبية ، سيقوم الخادم نفسه بمعالجة البيانات.
  3. نطلب العميل لمعالجة البيانات.
  4. إذا واجه العميل مشاكل ، نطلب مرة أخرى تأكيد التوافر ، ولكننا نرسل استجابة الخادم (لتجنب فترة التوقف ووقت الانتظار الطويل).
  5. نسجل النشاط الحالي.

إن فئة MicroContainer هي مساحة الإدارة لكامل النظام المصغر المضمن. هنا ، يقوم العملاء الذين يربطون التطبيق (الخادم) بالاتصال ، وهناك استدعاءات وظيفية توسع فئة مجردة MicroCore لـ "الخدمات المتقدمة". هذه فئة ثابتة يتم فيها تخزين قائمة المهام التي يتم إجراؤها على الخدمات الدقيقة وقائمة العملاء المتصلين وقائمة مهام العميل التي تؤدي هذه المهام في القاموس.

عند إطلاقه ، سيتم تسجيل الفصل للاندماج في الخدمات الصغيرة باستخدام RegisterMicro. سيحدث هذا مرة واحدة فقط أثناء التهيئة. تزودنا طريقة AddNewClient بتسجيل عميل جديد وتبادل المفاتيح وتسجيل عنوان IP الخاص بالخادم والمنفذ الذي سيعمل عليه. سيتم التحقق من الرمز المميز الذي تلقاه العميل الجديد قبل إدراجه في قائمة العملاء لتأكيد تفرده. بمجرد تأسيس الاتصال مع العميل ، سيقوم الخادم باستدعاء طريقة InstallService ، التي تقوم بحزم البيانات وإرسالها ، وبعد أن يستجيب العميل ، ستتم إضافتها إلى القاموس لهذه المهمة. يعتمد وقت الخدمة الذي سيتم تخصيصه لكل عميل على الاستراتيجية المستخدمة. عند بدء تشغيل خدمة MicroCore المجردة ، والتي تسمى كلاً من الخادم والعميل (مع ExtendedService) ،يتم عمل طلب للعملاء المتاحين للمهمة المطلوبة باستخدام دالة GetNextClient. سيتم تنفيذ هذه العملية في كثير من الأحيان ، وسيؤثر تعقيدها بشكل مباشر على وقت استجابة التطبيق. هذا هو السبب في أن نهجنا كان اختيار العميل بشكل عشوائي. يتم ذلك بسرعة ومن تجاربنا يضمن توزيعًا متساويًا للمكالمات.

كان هناك خيار آخر يتمثل في تنفيذ قائمة Round-robin - وهو حل له عيب في حالة تدفق I / O كبير للعملاء ، فإن تحديث قائمة robin robin سيتطلب المزيد من الوقت والتعقيد ، والذي حاولنا تجنبه. يتم استدعاء أسلوب RecordClientError عندما لا يستجيب العميل للطلب الذي تم تلقيه. بعد الإجابة على هذا السؤال ، يتم اتخاذ قرار بحفظ هذا العميل أو حذفه. ويتم التعرف على العملاء بشكل فريد بواسطة رمز الرمز المميز الذي يرسله العميل أثناء التهيئة ، ويتم تحديد كل خدمة صغيرة بواسطة مساحة اسم واسم فئة. تتم إدارة جميع الموارد (العملاء ، الرمز) من خلال هذه الوحدة الوحدوية ، والتي توفر الدعم للعمليات الضرورية.

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

3.4. السلوك الديناميكي لنظام الخدمات الصغيرة

بادئ ذي بدء ، يمكن أن تكون جميع أجهزة الكمبيوتر التي سيعمل عليها العملاء في نفس الشبكة أو في شبكات مختلفة. هناك عنصران في الأولوية: (أ) الوقت المنقضي في نقل البيانات ؛ و (ب) التكاليف الإضافية التي يضيفها النظام لإدارة البيانات (على سبيل المثال ، بحث العملاء ، والتشفير ، وفك التشفير ، ومعالجة الأخطاء ، وما إلى ذلك). كنا مهتمين بشكل أساسي بسلوك نظامنا في الشبكات المحلية (LAN) والعالمية (WAN) (الشكل 4).


تين. 4. سجل النظام الذي يعمل في شبكة محلية (العمود الأول من السجلات) والعالمي (العمود الثاني من السجلات).

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

بالنسبة للشبكة المحلية ، لدينا ما متوسطه 20-30 مللي ثانية لكل مهمة ، والتي تأتي من التشفير والتسجيل والنقل عبر الشبكة (حتى لو كانت محلية). يستخدم هذا النموذج من اتصالات LAN أيضًا في السحابة ، حيث توجد أجهزة الكمبيوتر في نفس المكان (مركز البيانات) ، ويتم الاتصال بينهما عبر الألياف الضوئية ، وتأخير الشبكة ضئيل. النتائج موجوده في الشكل. 4 في العمود الأيسر من السجلات.

لاختبار تطبيق WAN الخاص بنا ، قمنا بتكوين جهاز التوجيه لتوجيه مكالمة من المنفذ 80 إلى:http://192.168.1.160/(عنوان الشبكة) ، وبدأ IIS (خدمات معلومات الإنترنت) التطبيق ، وكان يمكن الوصول إليه من أي مكان خارج الشبكة المحلية. لتشغيل التطبيق على مستوى العميل ، يلزم حق استخدام المنافذ 8000: 9000 (المنافذ العشوائية). يتم ترتيب العملاء في نقطة التعسفي، اتصال IP العام تم التحقق عبر API: https://api.ipify.org/. النتائج موجوده في الشكل. 4 في عمود السجل على اليمين.

في النتائج المعروضة في الشكل. 4 ، القيم الموجودة في العمود الأيمن من اليومية أعلى بنسبة 16-17٪ من القيم الموجودة في العمود الأيسر من اليومية للمهام الثلاث الأولى (بدون الاتصال بالخدمات الصغيرة الأخرى) و ± 10٪ للخدمات الصغيرة التي قامت بتنزيل المستندات من الإنترنت أو تفاعلت مع قاعدة البيانات على خادم معين.

4. التقييم


في هذه الدراسة ، قمنا بمراقبة سلوك النظام في كل من الشبكة المحلية (توصيل 5 أجهزة كمبيوتر عبر شبكة لاسلكية) وفي الشبكة العالمية (باستخدام مساحة الاسم mihaidm.ddns.net ) ، ومقارنة نظامنا بنظام متآلف ، يتم تنفيذ هذه العمليات على نفس الكمبيوتر (انظر الجدول 1).

الجدول 1. تصنيف النظام للشبكات.
الحساب (مللي ثانية)الكتابة إلى قاعدة البيانات (مللي ثانية)توليد pdf (مللي ثانية)
مضيف محلي14.45815.449
لان254.40816.415
شبكه عالميه544.82629.309


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

كان نتاج رقمين كحساب رقمي. لا تتفاعل الخدمة المصغرة مع الخدمات الدقيقة الأخرى ، ومقدار المعلومات المرسلة عبر الشبكة صغير ، ويتم تقليل التعقيد إلى أدنى حد لدراسة الوقت المستغرق في إدارة الخادم والعميل ومهام إدارة الشبكة. إذا تم إجراء الحساب بواسطة الخادم (localhost) ، يتم التحقق أولاً من وجود عميل متاح ، وبما أن العميل غير متصل ، فإن الخادم يعالج النتيجة. في الحالة التالية ، يُظهر وجود العملاء في الشبكة المحلية اكتمال المهمة في ظروف التشغيل السريع جدًا للشبكة ، ومن جانب المعالجة ، التشفير / فك التشفير ، والعثور على استجابة العميل. بالنسبة إلى 100 عملية تنفيذ ، كان متوسط ​​الوقت المطلوب لإكمال العملية 25 مللي ثانية ، وهي قيمة واعدة بالنظر إلى نسبة المرونة / السرعة. في حالة WAN ، الوقت أطول بمرتينمما كانت عليه في الشبكة المحلية (54 مللي ثانية) ، يرجع ذلك إلى عملية التشفير وتكاليف النقل ، ولكن بالنسبة للتنفيذ الفعلي يتطلب نصف مللي ثانية.

المهمة الأخرى التي حققنا فيها هي الكتابة إلى قاعدة البيانات. على وجه الخصوص ، يتم أخذ الكلمة التي سيتم كتابتها إلى قاعدة البيانات كمعلمة. نحن مهتمون بمدى سرعة اتصال العميل بقاعدة بيانات تقع خارج المنطقة المحلية (لهذه الدراسة ، كانت قاعدة البيانات موجودة على www.my.gearhost.com ). لاحظ أن قيم وقت التشغيل على LAN و localhost قريبة. في الشبكة العالمية ، يكون الفرق ملحوظًا ، لأن معالجة البيانات والعملاء وإدارتها لا تستغرق الكثير من الوقت مثل نطاق العملاء الذين يتصلون بقاعدة البيانات لإدخال القيمة.

كانت المهمة الأخيرة التي تم إجراؤها في هذه الدراسة هي إنشاء ملف PDF ، وكان تركيزنا على تقدير وقت إرسال البيانات في النظام. للقيام بذلك ، نقوم بتنزيل ملف PDF من www.pdf-archive.com/2018/05/14/diploma/diploma.pdf ، والذي يتم تحميله في الذاكرة. سيقوم النظام بكتابة الاسم إلى موضع معين وإرجاع النتيجة (في شكل ناقلات بايت) مرة أخرى إلى الخادم. بالنسبة إلى مضيف محلي وشبكة محلية ، يمثل فرق يبلغ حوالي 1000 مللي ثانية الوقت المطلوب لتشفير ملفات PDF ونقلها محليًا. بالنسبة إلى WAN ، تكون القيمة الناتجة أعلى لأن تكلفة إرسال متجه البايت عالية جدًا.

5. الاستنتاجات والعمل في المستقبل


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

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

يأخذ أحد الاتجاهات المستقبلية في الاعتبار أنه يمكن دمج هذا النظام بنجاح في موقع ويب أو نظام API مع طابع تطبيقي واضح. يمكن تحسين البنية المقترحة وتوسيعها في أي وقت نظرًا لتوفر العديد من الأنظمة الأساسية (على سبيل المثال ، للهواتف المحمولة).

هناك اتجاه آخر في المستقبل نعتبره جذابًا للغاية اليوم - وهو أن المستخدم يوفر قوة حاسوبية مقابل رسوم (على سبيل المثال ، نظام BITCOIN) ، تم تطوير تطبيقنا لتشغيل الخدمات الدقيقة على أجهزة كمبيوتر معينة.

رابط المصدر


تم نشر هذه الدراسة بدعم من برنامج POC-A1-A1.2.3-G-2015 ، كجزء من مشروع PrivateSky (P_40_371 / 13/01/2016) ومشروع README "تطبيق تفاعلي ومبتكر لتقييم سهولة قراءة النصوص الرومانية وتحسين المستخدم أساليب الكتابة "، رقم العقد 114 / 15.09.2017 ، رمز MySMIS 2014 119286.

المراجع


[1] Dragoni، N.، Giallorenzo، S.، Lluch-Lafuente، AL، Mazzara، M.، Montesi، F.، Mustafin، R. (2017a) "Microservices: أمس واليوم وغدًا". Mazzara M. ، Meyer B. (eds.) ، هندسة البرمجيات الحالية والخلفية. سبرينغر
[2] Mazzara، M.، Khanda، K.، Mustafin، R.، Rivera، V.، Safina، L. and Silitti، A. (2018) "Microservices Science and Engineering". في: P. Ciancarini، S. Litvinov، A. Messina، A.، Sillitti، G. Succi (eds.) وقائع المؤتمر الدولي الخامس في هندسة البرمجيات لتطبيقات الدفاع ، SEDA 2016 ، Springer ، 10-20.
[3] Dragoni، N.، Lanese، I.، Larsen، ST، Mazzara، M.، Mustafin، R. and Safina، L. (2017b) "Microservices: How to Make your Application Scale". في: Petrenko A. ، Voronkov A. (eds.) وجهات نظر نظام معلوماتية النظام. PSI 2017. ملاحظات محاضرة في علوم الكمبيوتر ، 10742. Springer، Cham.
[4] Melis، A.، Mirri، S.، Prandi، C.، Prandini، M.، Salomoni، P. and Callegati، F. (2016) "A Microservice Use Use Case للأشخاص ذوي الإعاقة". في المؤتمر الدولي الثاني لـ EAI حول الأشياء الذكية وتقنيات الخير الاجتماعي ، DOI: 10.1007 / 978-3-319-61949-1_5.
[5] Zimmermann، O. (2017) "Microservices Tenets: Agile Approach to Service Service and Deployment، Science Computer - Research and Development"، 32 (3-4): 301-310.
[6] Xia ، C. ، Zhang ، Y. ، Wang ، L ، Coleman ، S. ، و Liu ، Y. (2018) "نظام الروبوتات السحابية القائم على Microservice للمساحة الذكية". في: الروبوتات والأنظمة المستقلة 110 ، DOI: 10.1016 / j.robot.2018.10.001.
[7] Bogner، J.، Fritzsch، J.، Wagner، S.، and Zimmermann، A. (2019) "Microservices in Industry: Insights to Technologies، الخصائص ، وجودة البرمجيات". في مؤتمر IEEE الدولي لعام 2019 حول ورش عمل هندسة البرمجيات (ICSAW) في: هامبورغ ، ألمانيا.
[8] Akentev، E.، Tchitchigin، A.، Safina، L.، and Mzzara، M. (2017) "Checked type checked for Jolie برمجة language"، https: // arXiv.org/pdf/1703.05186.pdf.
[9] Černý ، T. ، Donahoo ، MJ ، و Trnka ، M. (2018) "الفهم السياقي لهندسة الخدمات الصغيرة: الاتجاهات الحالية والمستقبلية". ACM SIGAPP مراجعة الحوسبة التطبيقية 17 (4): 29-45 ، DOI: 10.1145 / 3183628.3183631.
[10] Larucces، X.، Santamaria، I.، Colomo-Palacios، R.، and Ebert، C. (2018) "Microservices". في: IEEE Software ، 35/3: 96-100.
[11] Kalske ، M. (2017) "تحويل العمارة المتجانسة إلى بنية الخدمات الصغيرة". ماجستير أطروحة ، جامعة. هلسنكي.
[12] Lenarduzzi، V.، and Taibi، D. (2016) "شرح MVP: دراسة منهجية لرسم الخرائط حول تعريفات المنتج الأدنى القابل للتطبيق". في مؤتمر Euromicro الـ 42 حول هندسة البرمجيات والتطبيقات المتقدمة (SEAA) ، 112-119.
[13] Taibi ، D. ، Lenarduzzi ، V. ، Janes ، A. ، Liukkunen ، K. ، and Ahmad ، MO (2017) "مقارنة تحليل المتطلبات داخل سكروم ، سكروم مع Kanban ، XP ، وعمليات تطوير الموز". في: Baumeister H. ، Lichter H. ، Riebisch M. (eds.) العمليات الرشيقة في هندسة البرمجيات والبرمجة المتطرفة. ملاحظات محاضرة في معالجة المعلومات التجارية ، 283. سبرينغر ، شام.
[14] Gómez، A.، Benelallam، A.، and Tisi، M. (2015) "استمرار النموذج اللامركزي للحوسبة الموزعة". في ورشة عمل BigMDE الثالثة ، لاكويلا ، إيطاليا.
[15] Kandave ، KR (2018) "الحوسبة عالية الأداء في Azure". Nanette Ray (ed.) ، AzureCAT ، Microsoft Corporation.
[16] Sreenivas، V.، SriHarsha، S. and Narasimham، C. (2012) "نموذج سحابي لتطبيق SaaS". In: Advanced Materials Research 341-342، Trans Tech Publications، Switzerland، 499-503.
[17] بديدي ، إي. (2013) "إطار عمل اختيار البرامج وتوفيرها". في: المجلة الدولية لشبكات الكمبيوتر والاتصالات (IJCNC) ، 5 (3): 189-200.
[18] Lynn، T.، Rosati، P.، Lejeune، A.، and Emeakaroha، V. (2017) "مراجعة أولية لمنصات الحوسبة السحابية من دون خادم (وظائف - خدمة)". في المؤتمر الدولي التاسع IEEE لعام 2017 حول تكنولوجيا الحوسبة السحابية والعلوم ، 162-169.
[19] Adzic، G. and Chatley، R. (2017) "الحوسبة بدون خادم: الأثر الاقتصادي والمعماري". لدى: ESEC / FSE'17 ، 4-8 سبتمبر 2017 ، بادربورن ، ألمانيا ، ACM.
[20] Diffie، W. and Hellman، M. (1976) "اتجاهات جديدة في التشفير". في: معاملات IEEE ، نظرية المعلومات ، 22 (6): 644-654.
[21] Kratzke، N. (2015) "حول الخدمات الصغيرة والحاويات وتأثيرها الذي لا يُقدر حقه على أداء الشبكة". في CLOUD Comput. 2015 ، 180 arxiv.org/abs/1710.04049 .

تعلم المزيد عن الدورة

All Articles