این مقاله در مورد Cloud Native Microservices به ارائه یک درک عمیق از آنچه که Cloud Native Microservices هستند اختصاص داده شده است و همچنین اطلاعاتی در مورد چگونگی استفاده از مزایای معماری جدید ارائه می دهد.
بیشتر سازمانها تمرکز خود را به یک رویکرد بومی ابری تغییر میدهند که در آن معماری میکروسرویسها و فناوریهای کانتینری را با هم ترکیب میکنند تا بتوانند برنامههایی بسازند که مقیاسپذیر، انعطافپذیر و مهمتر از آن، به طور کامل از مزایای فناوری استفاده کنند.
بنابراین، قبل از پرداختن به مزایا و همچنین عملکردهای اصلی آنها، باید به وضوح میکروسرویسهای بومی ابری را درک کنیم. بیا این کار را انجا دهیم!
Cloud Native Microservices چیست؟
میکروسرویس یک فرآیند معماری است که در آن برای توسعه یک برنامه کاربردی با جمع آوری خدمات کوچک استفاده می شود. هر یک از خدمات با قابلیت های تجاری مرتبط است، جایی که آنها به فرآیند خاص خود مجهز هستند. تمام ارتباطات از طریق HTTP API یا ویژگی های پیام رسانی انجام می شود.
هر میکروسرویس مجزا را میتوان بدون ایجاد مزاحمت برای سایر سرویسها در همان برنامه، راهاندازی مجدد، ارتقا، و همچنین مقیاسبندی کرد. با این نوع فرآیند، تیم توسعه میتواند آخرین تغییرات را در محیط تولید یا محیط زنده بدون تأثیر یا تأثیر بر کاربران نهایی یا مشتریان اعمال کند.
اکنون که متوجه شدیم میکروسرویس چیست، بیایید بر درک آنچه نیاز است کسب و کار یا سازمان از معماری سنتی خود به معماری میکروسرویس بومی ابری حرکت کند، تمرکز کنیم:
بسیاری از سازمان ها از یک فرآیند استاندارد پیروی می کنند که در آن تنها یک واحد استقرار دارند که همه ویژگی های برنامه را دارد. به این نوع معماری معماری یکپارچه می گویند.
مثلا:
اگر در حال ساختن یک سیستم اطلاعات بهداشت و درمان هستید، برنامه شامل ماژول هایی مانند پذیرش بیمار، داروخانه، فاکتورها و سایر ماژول های مربوطه است. همه این ماژول ها در کنار هم قرار گرفته و به عنوان یک واحد مستقر شده اند. این نوع معماری وابستگی ها و همچنین اثرات نامطلوب زیادی دارد.
برخی از خطرات موجود در معماری یکپارچه به شرح زیر است:
از آنجایی که همه ماژول ها با هم ساخته می شوند، پایه کد بسیار بزرگ خواهد بود و هر گونه رفع اشکالی که توسط تیم توسعه انجام شود ممکن است بر ماژول های دیگر کد تأثیر بگذارد. بنابراین، وابستگی متقابل همیشه وجود دارد.
- نگهداری از پایگاه عظیم کد آسان نیست و مدیریت آن برای توسعه دهندگان نسبتاً دشوار است.
- اگر اندازه استقرار بزرگ باشد، قطعاً سرور را بیش از حد بارگذاری می کند و منجر به خرابی ناگهانی می شود.
- مقیاس پذیری اجزای جداگانه دشوار است.
- زمان توقف قابل توجهی برای استقرار تولید ضروری است و بر عملیات تجاری تأثیر می گذارد.
بنابراین با توجه به نکات فوق، قطعا تغییر فرآیند از معماری یکپارچه به معماری میکروسرویس منطقی است.
بنابراین، چه چیزی برای کسب و کارها یا سازمان ها لازم است تا از معماری یکپارچه به معماری میکروسرویس تغییر کنند؟
اکثر محدودیتهایی که در بالا با معماری یکپارچه ذکر کردهایم را میتوان با استفاده از معماری میکروسرویس اصلاح کرد.
وقتی صحبت از معماری Microservices می شود، کاملاً در مورد طراحی نرم افزار به گونه ای است که آنها اجزای مختلف مرتبط با یک برنامه واحد باشند.
طبق مثالی که در بالا در نظر گرفتیم، یعنی برنامه HealthCare، ماژول هایی مانند پذیرش، فاکتورها، داروخانه همه اجزای مستقلی خواهند بود و به عنوان یک واحد واحد مستقر می شوند.
بیایید بگوییم که افزایشی در استفاده از ماژول پذیرش وجود دارد، سپس توسعه دهندگان این گزینه را دارند که فقط مؤلفه مربوط به پذیرش را مقیاس کنند و بر بقیه رفتار برنامه تأثیری نگذارند. برعکس، این مسئله در محیط یکپارچه بزرگتر است.
بنابراین ضریب مقیاس پذیری قطعاً در اینجا امکان پذیر است و همچنین می توانیم تعیین کنیم که آیا مقیاس پذیری با مداخله دستی تعریف می شود یا می توان آن را خودکار کرد. این می تواند توسط تیم عملیات تصمیم گیری شود.
مقیاس پذیری خودکار مانند یک ویژگی جالب است که می تواند بر اساس تقاضا انعطاف پذیر باشد. اگر افزایشی از نظر استفاده از برنامه برای آن ماژول خاص وجود داشته باشد، میتواند به صورت خودکار تا سطحی که تقاضا برآورده شود و بعداً میتواند آن را به سطح پایین مقیاس خودکار کند.
تصمیمات تجاری و فرآیندی برای انتقال میکروسرویسها برای تغییر فرآیند از معماری یکپارچه به معماری میکروسرویس، کسب و کارها باید وضعیت فعلی خود را درک و ارزیابی کنند و گامی در جهت بهبود بردارند.
- به طور کلی، آنها دو رویکرد هستند:
- توصیه می شود یک برنامه کاملاً جدید را با استفاده از معماری میکروسرویس از ابتدا شروع کنید.
- اول از همه، برنامه را در معماری یکپارچه توسعه دهید و سپس، با افزایش آن، به آرامی آن را به معماری سطح میکروسرویس جدا کنید.
این دو رویکردی است که اکثر کسب و کارها هنگام تلاش برای گذار از معماری یکپارچه به معماری میکروسرویس باید از آنها پیروی کنند.
در این دو رویکرد، آنها چند چالش هستند که مشاغل باید از آن عبور کنند.
- ایجاد یک زیرساخت پایه از میکروسرویس ها از ابتدا یک فرآیند زمان بر است.
- با کمک موارد استفاده، ساخت برنامه های کاربردی با استفاده از معماری یکپارچه بسیار آسان است.
- هنگامی که برنامه به مرحله مورد نظر رسید، منطقی است که به آرامی معماری میکروسرویس را شروع کنیم
- همچنین، یک برنامه معماری یکپارچه به خوبی طراحی شده را می توان با حداقل تلاش به یک پایگاه معماری میکروسرویس تبدیل کرد.
بنابراین، با توجه به هر دو رویکرد، قطعاً عبور از وضعیت موجود در چارچوب اجرا و برداشتن گام های مناسب، منطقی است.
آیا Microservices بهترین هستند؟
در مقایسه با معماری یکپارچه استاندارد، مزایای بسیاری وجود دارد که یک معماری میکروسرویس ارائه می کند:
- اول از همه، برنامه کاملاً منعطف است و مقیاس پذیر است.
- ارتقاء سیستم یا ارتقاء کد، کل استفاده از برنامه را مختل نمی کند.
- معماری میکروسرویسها انعطافپذیر است و فرآیند توسعه چابک در واقع چرخههای توسعه کوتاهتر را ارتقا میدهد و منجر به زمان سریعتر برای استقرار میشود.
- با فرآیند یکپارچه سازی مداوم و استقرار مداوم، زمان صرف شده برای استقرار در مقایسه با فرآیند استاندارد کمتر است.
- جداسازی مشکل آسان است. از آنجایی که پایه کد ماژولار است، اشکالات یا نقصها تأثیری بر سایر بخشهای برنامه نخواهد داشت.
- مفهوم قابلیت استفاده مجدد نیز در این ساختار در مقایسه با معماری استاندارد یکپارچه بالا است.
- با در نظر گرفتن همه این مزایا، قطعا بهترین تناسب خواهد بود. با توجه به نیاز سازمان و نیازهای برنامه، معماری میکروسرویس ها قابل پیاده سازی است.
روی دیگر سکه، چند معایب وجود دارد که اگر در مراحل اولیه اجرا با آنها برخورد نشود یا به آنها رسیدگی نشود، می تواند برای اکثر سازمان ها دردناک باشد. به شرح زیر می باشند.
- مفهوم اصلی به استقرار متکی است، بنابراین اگر استقرارها به درستی مدیریت نشوند، مدیریت پایگاه کد مشکل بزرگتری خواهد بود.
- پیچیدگی: اگر میکروسرویس ها به درستی مدیریت یا حسابرسی نشوند، مشکل ساز خواهد شد.
- ارتباط نقش مهمی دارد.
- برنامه ریزی اولیه زیادی مورد نیاز است، یعنی در سطح معماری.
جنبه های فوق باید به دقت بررسی شوند تا بهترین معماری میکروسرویس در دسترس باشد.
استقرار میکروسرویس ها
استقرار معماری میکروسرویس بخشی جدایی ناپذیر از کل پیاده سازی است و نکات زیر باید مورد توجه قرار گیرد.
- برای استقرار و همچنین عدم استقرار میکروسرویس به طور مستقل باید انعطاف پذیر باشد.
- باید به گونه ای طراحی شود که یک جزء میکروسرویس بدون هیچ محدودیتی مقیاس پذیر باشد.
- خطای یکی از میکروسرویس ها نباید روی بقیه میکروسرویس ها تاثیر بگذارد.
- از نظر ساخت و استقرار سریع میکروسرویس ها باید سریع باشد.
نکات فوق حیاتی هستند تا میکروسرویس ها به طور موثر مستقر شوند.
با استفاده از ابزارهای منبع باز مانند Docker و Kubernetes، معماری میکروسرویس ها را می توان مستقر کرد.
Docker یکی از پلتفرم های منبع باز است که می تواند توسط توسعه دهندگان و مدیران سیستم برای استقرار کانتینرهای برنامه در یک محیط لینوکس استفاده شود.
این یکی از بهترین راه ها برای استقرار یک برنامه معماری میکروسرویس است. مراحل زیر برای کامل کردن اجرای کامل ضروری است:
- هر میکروسرویس باید به عنوان یک تصویر ظرف Docker بسته بندی شود
- هر نمونه سرویس یک ظرف است
- با افزایش نمونه های کانتینر، میکروسرویس می تواند مقیاس شود.
- از آنجایی که ما از کانتینرهای Docker استفاده می کنیم، ساخت و استقرار میکروسرویس ها در مقایسه با VM سنتی سریعتر است
Kubernetes یکی دیگر از پلتفرمهایی است که میتوانیم با استفاده از Docker از آن استفاده کنیم و ارزش بیشتری به استقرار آن اضافه کنیم.
با استفاده از Kubernetes، مدیریت دستهای از کانتینرهای لینوکس بهعنوان یک سیستم واحد که در آن کانتینرهای docker در چندین میزبان در دسترس هستند، آسان است. این ساختار استقرار در هنگام برخورد با ریزسرویسهای در مقیاس بزرگ مفید خواهد بود.
استراتژی های مهاجرت برای خدمات خرد
وقتی صحبت از استراتژیهای مهاجرت برای میکروسرویسها میشود، رویکردهای کمی وجود دارد که در دسترس هستند. استفاده از یک رویکرد بر اساس شرایط متفاوت است و تیم درون سازمان برای اتخاذ تصمیم مناسب، اولتیماتوم خواهد داشت.
سطح بالایی از استراتژیهای مهاجرتی که سازمانها تمایل به استفاده از آنها دارند در زیر بیان شدهاند:
- طراحی مجدد موازی
- میکروسرویس های استاندارد
- سیستم های خودکفا
1. طراحی مجدد موازی
همانطور که از نام آن پیداست - برنامه ساختاری یکپارچه موجود را مختل نکنید. بهتر است یک اپلیکیشن موازی با توجه به معماری میکروسرویس بسازیم. به عبارت دیگر، همان عملکرد تجاری اما با استفاده از معماری میکروسرویس اجرا می شود.
مزایای این نوع رویکرد عبارتند از:
- برنامه موجود، یعنی در برنامه یکپارچه، به هیچ وجه مختل نمی شود.
- اپلیکیشن جدید را می توان با توجه به نیاز طراحی کرد.
معایب این نوع رویکرد عبارت است از:
- کل اجرا باید از مدل آبشاری پیروی کند. با استفاده از این فرآیند، نتیجه پیاده سازی یک عامل ناشناخته است.
2. میکروسرویس های استاندارد
در این رویکرد، ابتدا ماژولهای مستقل شناسایی میشوند و با توجه به ساختار میکروسرویس، دوباره طراحی و توسعه مییابند. در این فرآیند، کل رابط کاربری و باطن برنامه مجدداً طراحی میشوند تا با معماری میکروسرویس مطابقت داشته باشد.
مزایای مرتبط با این نوع رویکرد عبارتند از:
- با این رویکرد، مشتریان می توانند ساخت های تکرار شونده و بهبود مستمر سیستم ها را ببینند.
- از آنجایی که این یک فرآیند توسعه مستمر است، فرصتی برای اصلاح اشتباهات وجود دارد.
معایب این روش عبارتند از:
- کد UI فقط یکپارچه خواهد بود.
- تغییرات زیادی در طول این پیاده سازی انتظار می رود.
3. سیستم های خودکفا
با این رویکرد، تیم باید ماژول هایی را شناسایی کند که می توانند به طور مستقل اجرا شوند. پس از انجام این فعالیت، کل backend مجدداً کار میشود و رابط کاربری ماژول فردی مطابق با معماری میکروسرویسها بازسازی میشود. پس از تکمیل توسعه، سرویس های یکپارچه موجود و رابط کاربری جایگزین خواهند شد.
مزایای مرتبط با این رویکرد در زیر آورده شده است.
این فرآیند نیز یک فرآیند تکراری و افزایشی است. بنابراین، مشتریان/مشتریان در هر چرخه شاهد بهبودهایی خواهند بود.
تلاش های توسعه و مهاجرت در مقایسه با سایر معماری ها کمتر است.
معایب مربوط به این فرآیند به شرح زیر است.
- با افزایش تعداد ماژول ها، پیچیدگی ارتباط درون ماژول ها نیز افزایش می یابد.
- شاید شاهد یک تضاد در چارچوب های UI باشیم.
بهترین روش ها برای مهاجرت:
خوب، بهترین شیوه ها در واقع با یکدیگر متفاوت هستند. بنابراین، به طور کلی، بهترین شیوه های قابل اجرا به شرح زیر است.
- اول از همه، ماژول مهم را شناسایی کنید و مهاجرت را برای آن ماژول آغاز کنید.
- هرگز اجازه ندهید کد ماژول microservices تحت معماری یکپارچه اجرا شود.
- شروع به استفاده از چارچوبی کنید که در آن توسعه دهندگان فقط بر روی عملکرد تجاری تمرکز خواهند کرد.
- در صورت نیاز، میکروسرویس ها را می توان بیشتر به میکروسرویس های کوچکتر تقسیم کرد.
Hybrid Cloud گامی برای Microservices است
ابر هیبریدی چیزی نیست جز یک راه اندازی یا محیط رایانش ابری که در درجه اول از ترکیبی از ابرهای خصوصی و ابرهای داخلی در ارتباط با خدمات ابری عمومی استفاده می کند.
انتقال محتوا از یک ابر خصوصی به یک ابر عمومی نیاز به زمان و هزینه دارد و تلاش های محاسباتی زیادی را صرف می کند که منجر به استفاده غیر ضروری از منابع و افزایش هزینه عملیات می شود. علاوه بر این، برای کنترل این جنبهها، قطعاً میتوان از خدمات ابری ترکیبی استفاده کرد که انعطافپذیری بسیار بیشتری را ارائه میدهند و گزینههای زیادی برای استقرار دادهها برای انتخاب دارند.
اکنون، بیایید درک کنیم که چگونه راهاندازی محیط ابری ترکیبی به پیادهسازی Microservices کمک میکند:
طبق معماری میکروسرویس ها، تمام قابلیت ها به اجزای کوچکی تقسیم می شوند که در آنجا با یکدیگر تعامل دارند و یک برنامه کاربردی را تشکیل می دهند. همچنین با استفاده از این ساختار، اجزای عملکردی می توانند بر اساس نیاز، مقیاس را افزایش یا کاهش دهند.
همین مفهوم برای محیط محاسبات ابری ترکیبی نیز کار میکند - بر اساس تقاضا، نمونه ابری میتواند بزرگ یا کوچک شود. بنابراین، به طور کلی، محیط های ابری ترکیبی و معماری میکروسرویس ها دست به دست هم می دهند.
یکی از بهترین نمونه ها ظروف است. مفهوم کانتینر به طور گسترده در معماری میکروسرویس استفاده می شود. هر زمان که نیاز باشد، می توان کانتینرها را به صورت خودکار ایجاد یا از بین برد
اگر بار قابل توجهی مشاهده شده باشد، کانتینرهای مورد نیاز به طور خودکار ایجاد می شوند که متعادل کننده بار شروع به توزیع بار به چندین سرویس می کند.
از طرف دیگر، اگر تقاضای کاهشی برای بار روی برنامه وجود داشته باشد، کانتینرهای مربوطه از بین می روند تا همیشه استفاده موثر از منابع حفظ شود.
ملاحظات زیرساختی: ذهنیت بدون تابعیت
وقتی نوبت به ملاحظات زیرساختی می رسد، سازمان ها باید به دنبال اجزای مختلفی مانند نگهداری، مقیاس پذیری، نظارت بر عملکرد و در نهایت میزبانی باشند.
بنابراین، جنبه های زیر باید در نظر گرفته شود تا تیم بتواند به درستی یک اپلیکیشن مبتنی بر معماری میکروسرویس را طراحی کند.
اولین و مهمترین جنبه ای که باید بررسی کنید این است که آیا سرویس می تواند به طور مستقل مستقر شود یا خیر.
اطمینان حاصل کنید که مکانیزم قطع بتن در محل وجود دارد.
تمام زمان های کارکرد و از کار افتادن زیرساخت ها باید نظارت شود و در صورت تغییر رفتار قابل توجه، باید اقدامات مناسب انجام شود.
به خصوص اگر سازمان ها برنامه های کاربردی مبتنی بر میکروسرویس ها را انتخاب می کنند، برنامه باید به گونه ای طراحی شود که انعطاف پذیری و مفاهیم مقیاس پذیری آن به هیچ وجه به خطر نیفتد.
نگاشت لایه ها به بارهای کاری Cloud-Native
طبق استانداردها، یک برنامه بومی ابری بر اساس عملکرد و استقرار بر روی لایه های منطقی مختلف ساخته شده است. هر لایه دارای میکروسرویس هایی است که در نهایت وظایف خود را انجام می دهند.
اگرچه لایه ها به هم چسبیده اند، اما هر لایه به طور مستقل عمل می کند. در مقایسه با معماری سنتی سه لایه، پشته به شکل یک سلسله مراتب است. اما در برنامه های کاربردی ابری، ساختار یک ساختار مسطح است که در آن سرویس از طریق یک API در معرض دید قرار می گیرد.
لایه های مختلف موجود و موارد استفاده از آنها در زیر لیست شده است:
- لایه مقیاس پذیر
- لایه بادوام
- لایه قابل موازی سازی
- لایه رویداد محور
- لایه میراث
1. لایه مقیاس پذیر
این لایه کاملاً منعطف است و می تواند با توجه به زمان اجرا رشد و کاهش یابد. برای انجام عملیات مقیاسسازی و مقیاسسازی، باید یک سیاست مقیاس خودکار اجرا شود.
2. لایه بادوام
در این لایه، هر سرویس یک پایگاه داده ایده آل را انتخاب می کند که در آن داده های ساخت یافته ذخیره می شود. به این نوع سرویس ها سرویس های حالت دار گفته می شود که در آن API های سطح بالا در معرض دید قرار می گیرند.
3. لایه قابل موازی سازی
همه کارهای برنامه ریزی شده، کارهای موازی و کارهای دسته ای به عنوان یک لایه موازی پذیر اطلاع رسانی می شوند.
4. لایه رویداد محور
در لایه رویداد محور، کد به شکل کانتینر بسته بندی نمی شود. بنابراین، به جای استفاده از کانتینرها، توابع در زبان های برنامه نویسی مانند Python و Node.Js نوشته می شوند. هنگامی که این توابع در زبان های برنامه نویسی ذکر شده در بالا نوشته می شوند، مستقیماً مستقر می شوند.
همه توابعی که در این لایه راه اندازی می شوند چیزی جز رویداد محور نیستند.
5. لایه میراث
اکثر برنامه های یکپارچه مبتنی بر لایه های قدیمی هستند. به عنوان مثال، تمام برنامه های مدیریت ارتباط با مشتری (CRM)، برنامه ریزی منابع سازمانی (ERP)، مدیریت زنجیره تامین (SCM) و منابع انسانی (HR)
بنابراین برای استفاده از سیستمهای موجود، معماری میکروسرویسها همچنان میتواند پشتیبانی کند و تراکنشها را میتوان در لایه میراث با یکدیگر همکاری کرد.
مدل سررسید میکروسرویس ها
با کمک مدل بلوغ میکروسرویسها، مشتریان میتوانند خود را مقایسه کنند و ببینند که آیا ایستادهاند یا خیر و همچنین بدانند که برای رسیدن به نقطهای که میتوانند به عنوان یک شرکت مرتبط با میکروسرویس طبقهبندی شوند، چه چیزی لازم است.
همچنین، به عنوان یک مجموعه استاندارد از قوانین و سیاست ها عمل می کند تا همه تیم های یک سازمان بتوانند از آن پیروی کنند. این نقش مهمی از نظر حفظ استانداردها و کنترلهای فرآیند بر اساس استانداردهای صنعتی ایفا میکند.
مرحله ارزیابی: طبق مدل بلوغ، این مرحله مرحله ای است که یک سازمان استانداردهای فعلی خود را با استانداردهای مدل بلوغ ارزیابی می کند. بر اساس این ارزیابی، سازمانها میتوانند حوزههای اصلی را که باید بر آن تأکید کنند، درک کنند.
با این نوع مطالعه و ارزیابی، سازمان ها می توانند آخرین روندها را درک کنند و عملکرد خود را بهبود بخشند که در مقابل سود بیشتری را به نمایش بگذارند.
نتیجه:
در این مقاله Cloud Native Microservices، چندین مفهوم از مؤلفههای معماری میکروسرویسها را مرور کردهایم که در آن روشهای توسعه و استقرار برنامههای کاربردی سنتی را تغییر میدهند. بر اساس پایداری برنامه و الزامات ad-hoc، تیم می تواند تصمیم سازنده ای برای حرکت از معماری یکپارچه به معماری میکروسرویس بگیرد. با استفاده از استراتژی های مهاجرت، می توان بهترین رویکرد را انتخاب کرد و برای تکمیل کار کرد.