انتشار مقاله مهاجرت به معماری میکروسرویس ها

با لطف خداوند متعال به همراه تلاش ها و مطالعاتی که داشتم تونستم مقاله مهاجرت به معماری میکروسرویس ها رو چهارمین کنفرانس بین المللی وب پژوهی  منتشر کنم. برای مطالعه مقاله می تونید از اینجا مقاله رو مطالعه و دریافت کنید.

صفحه مقاله در Researchgate

DevOps and Microservices

بررسی DevOps و Microservices

DevOps مجموعه ای از فعالیت ها هستش که یه همچین کاربردی داره : میاد و زمان بین تغییرات سیستم و انتقال اون تغییرات رو به یه محیط تولیدی نو کاهش میده . همینطور اصرار داره به اینکه بیاد و به مبحث تامین کیفیت نرم افزار بپردازه هم در رابطه با کد و هم مکانیزم تحویل محصول . هر نوع تکنیکی که باعث بشه این اهدافی که ذکر کردم محقق بشه رو بهش میگن DevOps .

یه فعالیت دیگه که به نوعی DevOps محسوب میشه هم “تحویل مداوم” هست. همین تحویل مداوم از بخش های متصل و جدایی ناپذیر میکروسرویس ها هستش . از دیگر فعالیت های ضروری DevOps هم “مانیتورینگ مداوم” هست که باعث میشه یه سری بازخوردهای مرتبط با عملکرد سیستم رو به توسعه دهندگان برسونه ؛ علاوه بر این تشخیص آنومالی های عملیاتی رو تسریع می بخشه.

در واقع DevOps با بهره گیری از فاکتور سرعت باعث میشه که بهتر بتونه به مشتری هاش سرویس بده و اونا رو حفظ کنه. وقتی ما تحت مدل DevOps هستیم دیگه تیم توسعه و تیم عملیاتی به صورتی سیلویی (Siloed)  نیستتند. گاهی اوقات دو تا  تیم توسعه و تیم عملیاتی در قالب یک تیم ظاهر میشن و مهندس ها در سراسر چرخه خیات برنامه کار میکنن ؛ از توسعه و آزمایش برنامه گرفته تا استقرار و بحث عملیاتی.

این تیم ها میان و یه سری فعالیت هایی رو انجام میدن تا پردازش هایی که قبلا بصورت دستی و کند صورت میگرفت حالا بصورت خودکار انجام بشه.

افزایش استفاده از DevOps و Microservices بر مبنای Google

شکل بالا هم افزایش استفاده از DevOps و Microservices بر مبنای موتور جست و جوی گوگل رو نشون میده که از سال ۲۰۰۹ شروع به رشد داشته و در سال ۲۰۱۶ به اوج رشد خودشون رسیدن . رنگ آبی مربوط به DevOps هست و رنگ قرمز مربوط به Ms

اما DevOps چه مزایای داره ؟

سرعت

تحویل سریع و مداوم

قابلیت اطمینان

مقیاس پذیری

بهبود همکاری و ارتباطات تیمی

تامین امنیت

اینجا رو هم ببینید که محشره.

تفاوت های معماری سرویس گرا با میکروسرویس ها

در رابطه با معماری سرویس گرا و میکروسرویس ها باید گفت هر دو زیر مجموعه از تفکر سرویس گرایی هستند و نقطه مشترکی که دارند بحث Distribution (توزیع پذیری) هست. در معماری سرویس گرایی بخش هایی از نرم افزار تو شِمای سرویس encapsulate (کپسوله) میشوند. حالا این کپسوله سازی رو همونطور که قبلا هم حتما شنیدید به این مساله اشاره داره که سرویس ها بصورت مجزی از هم طراحی می شوند.

سرویس ها هم در معماری به دو صورت طبقه بندی میشن :

  • Service Type (سطح الگوی معماری)
  • Business Type (سطح پیاده سازی)

تو میکروسرویس ها هم Service Type به دو صورت هست :

  • Functional
  • Infrastructure

به این صورت که کلاینت میاد یه درخواستی رو به سمت لایه API ارسال میکنه ، لایه API هم میاد منتقلش میکنه به سطح عملیات سرویس و اینجا هم تقاضای سرویس به سطح زیربنایی سرویس فرستاد میشه ، حالا شکلش رو میکشم بهتر متوجه بشیم :

 

تو SOA هم سرویس ها دو دسته هستند :

  • Business Service مثل XML , WSDL , BPEL ( سطح تجرید اینجا بالا هست)
  • Enterprise Service که مثلا تحت چارچوب دات نت با زبان سی شارپ پیاده سازی صورت بگیره یا …
  • Application Service
  • Infrastructure Service

اما  چطوره ؟

مدل مالکیت میکروسرویس هم بدین شکله :

مدل مالکیت میکروسرویس
مدل مالکیت میکروسرویس

تو SOA هر سرویسی صاحب خودشو داره ولی تو میکروسرویس این یه تیم هستش که درگیر میشه بر خلاف SOA که چند تا تیم میان درگیر چند تا سرویس میشن و این یه نقطه منفی واسه SOA محسوب میشه و همین ویژگی منفی باعث شده میکروسرویس ها بالاتر از SOA باشن. از منظر Granularity (دانه بندی) هم سرویس ها هستش که چون اندازه کوچکتری دارن :

  • سریع تر تولید میشن
  • سریع تر تو پروژه استقرار پیدا میکنن
  • سریع تر هم تست میشن

پس در این صورت میشه مزایای میکروسرویس ها رو اینا بر شمرد :

  • هزینه میاد پایین
  • زمان کمتری واسه توسعه نیاز هست
  • مشتری های رضایت بیشتری دارن
  • Stakeholder ها هم راضی ترن

الآن چلش اصلی SOA همین بحث  Granularity (دانه بندی) هستش که متاسفانه برخی معماران درک درستی ازش ندارن ؛ بعضی سرویس ها خیلی ریز طراحی میشن ، بعضی سرویس ها هم خیلی درشت . اگه یادتون باشه تو پایگاه داده یه قانون داشتیم به نام ACID که طبق اون اگه دانه بندی خیلی ریز باشه ما نمی تونیم سرویس ها رو با هم Synchronize کنیم.

دانه بندی هم رو دو تا فاکتور تاثیر میذاره :

  • Functionality
  • Transaction Management

میکرو سرویس ها :

  • Small Size
  • Small Structure

بحث دیگه ای هم که مطرح هست موضوع Component Share هست که SOA و Micro services با هم تفاوت دارند که سرویس گرایی بیشترین اشتراک رو داره بر خلاف میکروسرویس ها که کمترین اشتراک رو داره و همین شده واسش مزیت ! اما چرا ؟

  • چون که Modules Dependency پایین هستش پس نگهداری آسون تره چون که تکامل سرویس ها مستقل از سرویس های دیگه ست.
  • دوم اینکه فاز استقرار راحت تره ممکن هست ، چون که حجم کدهایی که تغییر میکنه زیاد نیست
  • سوم اینکه ریسک تاثیر تغییر یه سرویس به باقی سرویس ها میادش پایین