میکروسرویسها چشمانداز دنیای نرمافزار را متحول میکنند
تحول دیجیتال و رایانش ابری چشمانداز فناوری اطلاعات چند سازمان بزرگ را در یک دهه گذشته تغییر داده است. بهطوری که بیشتر شرکتها بخش قابلتوجهی از برنامههای کاربردی خود را به فضای ابری انتقال دادهاند. اصلیترین عامل این انتقال، گسترشپذیری بنابهدرخواست ابر، مدل پرداخت بهازای استفاده و دسترسی آسان به مجموعهای از خدمات غنی برای سازمانهایی است که منابع محدودی دارند. امروزه بخش بزرگی از استارتآپهای موفق مثل Airbnb، Uber و Netflix از مزایای ابر به بهترین شکل استفاده کردهاند تا بتوانند در حوزه کاری خود پیشرو باقی بمانند.
حرکت مداوم به سمت ابر و تحول دیجیتال دو تغییر اساسی به همراه داشته است. یکی در زمینه توسعه برنامههای کاربردی و دیگری در زمینه زیرساخت. این دو تغییر مهم، نحوه تعامل دیجیتالی ما را تغییر داده است، بهعنوانمثال، پرداخت با استفاده از سیستمهای پرداخت دیجیتال یا کیف پول موبایل، استفاده از حسگرهای مجهز به اینترنت اشیا در خانههای هوشمند یا دریافت مدرک از یک برنامه آموزشی آنلاین تنها بخشی از دستاوردهای ابر و تحول دیجیتال به شمار میروند. امروزه این برنامههای کاربردی به دلیل تکامل سیستمهایی که آنها را اجرا میکنند قادر به مدیریت همزمان میلیونها تراکنش هستند.
میکروسرویسها
به طور سنتی، برنامههای کاربردی ماهیت یکپارچه دارند. آنها بر اساس یک کد واحد ساخته میشوند و محصور در یک معماری سهلایه مبتنی بر رابط کاربری (وب)، منطق (برنامه) و پایگاهداده (ذخیرهسازی) قرار دارند. برای تغییر یک ویژگی موجود، معرفی یک ویژگی جدید یا رفع یک اشکال، کد کامل باید پس از اصلاح بخش کوچکی از کد که تغییرات را تضمین میکند، مجدداً باز کامپایل شود. این فرایند معمولاً منجر به توقف برنامه برای استقرار مجدد کد، گزارشهای مکرر درباره باگها میشود و گاهی اوقات باعث میشود تلاش گسترده تیمهای توسعه و عملیات از بین بروند. رویکردی که باعث میشود عرضه نهایی محصول با تا خیرهای طولانی همراه شود که ضررهای تجاری را به همراه دارد. بهطوری که امروزه چرخه انتشار نرمافزارها بیش از شش ماه اعلام شده است.
کسبوکارهای امروزی خواهان چرخه انتشار سریعتر هستند تا بتوانند ویژگیهای جدیدتر را بهسرعت به محصولات اضافه کرده و سهم بیشتری از بازار را از آن خود کنند که درست همان چیزی است که تحول دیجیتال روی آن متمرکز شده است. بهمنظور تسریع چرخه انتشار، شکستن بلوک کد برنامههای یکپارچه به تکههای کوچکتر که بتوان راحتتر آنها را مدیریت کرد، مفهومی به نام ریز سرویس پدید آمد. کاری که ریز سرویس انجام میدهد این است که برنامه را به چند سرویس مستقل به نام میکروسرویس تقسیم میکند. شکل زیر تفاوت این دو معماری را نشان میدهد.
برای مثال، تصور کنید که وبسایت خردهفروش آنلاین موردعلاقهتان با معماری یکپارچه اجرا میشود، همانطور که در شکل بالا مشاهده میشود و دارای سیستمهای مدیریت موجودی و پرداخت در یکپایه کد واحد و مستقر در محل است. برای ایجاد تغییر در سیستم مدیریت موجودی، تنها باید کد مربوطه تغییر کند، اما هنگامی که برنامه را به طور کامل اجرا کنید، سرویس با مشکل روبرو میشود که نارضایتی مشتریان و ازدسترفتن درآمدها را به همراه دارد. در مقابل، اگر بر روی معماری میکروسرویس اجرا میشد، فقط میکروسرویسی که سیستم مدیریت موجودی را اجرا میکرد باید اصلاح میشد و مجدداً مستقر میشد، و بقیه برنامه همچنان در دسترس میبود. این رویکرد نهتنها مجموعهای از خدمات جدیدتر را سریعتر به کاربران نهایی ارائه میکند، بلکه زمان قطعی کلی سیستم را نیز کاهش میدهد.
Micro services
Micro services یک رویکرد مدرن برای توسعه نرمافزار است که یک برنامه کاربردی را بهعنوان از مجموعههای سرویسهایی که منفرد، اما متصل به یکدیگر هستند و فرایند استقرار آنها به شکل مستقل انجام میشود تعریف میکند. بهطوری که یک تیم توسعه، استقرار و نگهداری به شکل سادهتری قادر به مدیریت این ساختار هستند. رویکرد فوق باعث تسریع در روند انتشار ویژگیها میشود. امروزه، شرکتهایی که در عصر ابر متولد میشوند دارای چرخههای انتشاری هستند که به آنها اجازه میدهد گاهی اوقات چندمرتبه در یک روز تغییراتی در سرویسها اعمال کنند بدون آنکه نگرانی خاصی از بابت عدم دسترسی به خدمات را تجربه کنند. این بدان معناست که کسبوکارها میتوانند عملکردهای اضافهشده را سریعتر به مخاطبان خود ارائه کنند و در نتیجه درآمد بیشتری کسب کنند یا سریعتر به درخواستهای مشتری پاسخ دهند و بنابراین ارزش خود نزد مشتریان را حفظ کنند.
کانتینرها
کانتینرها یکلایه انتزاعی ارائه میکنند که به توسعهدهندگان و تیمهای DevOps کمک میکند تا برنامهها را روی منابع زیربنایی مشترک توسعه، استقرار و اجرا کنند، درحالیکه همچنان آنها را ایزوله نگه میدارد. این بدان معنی است که یک برنامه میتواند بهعنوان یک کانتینر به همراه محیط زمان اجرای آن مانند کتابخانهها، فایلهای باینری، فایلهای پیکربندی و سایر وابستگیها بستهبندی شود. کانتینرها به توسعهدهندگان کمک میکنند تا چابکتر باشند، زیرا اکنون میتوانند بهجای اینکه به وابستگیهای محیطی کدشان فکر کنند بر منطق تجاری تمرکز کنند. شکل زیر تفاوت میان محیط ماشین مجازی و کانتینرها را نشان میدهد.
همانگونه که در شکل بالا مشاهده میکنید، باتوجهبه ارائه انتزاعی و جداسازی، کانتینرها بسیار شبیه ماشینهای مجازی (VMs) هستند. بااینحال، بر خلاف ماشینهای مجازی در یک کانتینر، برنامه فقط با عناصر ضروری برای اجرا بستهبندی شده است و قرار نیست سیستمعامل مهمان را بستهبندی کند. رویکرد فوق اجازه میدهد تا کانتینرها در مقایسه با ماشینهای مجازی قابلیتهای منحصربهفردی مانند چرخش سریع، حداقل سرباره و قابلیت حمل بالا داشته باشند. امروزه بیشتر و بیشتر توسعهدهندگان از خدمات کانتینری مبتنی برابر، چه مدیریتشده یا بدون مدیریت، برای آزمایش و استقرار برنامههای خود استفاده میکنند. این موضوع باعث پیدایش مفهوم ابر بومی (Native Cloud) شده است که اصطلاحی است که به طور گسترده شامل محیطهای کانتینری است که بهصورت بومی در ابر اجرا میشوند.
طبق گفته بنیاد محاسبات بومی ابری (CNCF): فناوریهای بومی ابر سازمانها را قادر میسازد تا برنامههای کاربردی مقیاسپذیر را در محیطهای مدرن و پویا مانند ابرهای عمومی، خصوصی و ترکیبی بسازند و اجرا کنند. کانتینرها، مشهای سرویس، میکروسرویسها، زیرساختهای تغییرناپذیر و APIهای اعلامی نمونهای از این رویکرد هستند. این تکنیکها سیستمهای با جفتشدگی حداقلی (Loosely Coupling) را که انعطافپذیرتر، مدیریتپذیرتر و قابل رویت تر هستند را پدید میآورد. همراه با اتوماسیون قوی، آنها به مهندسان این امکان را میدهند که با کمترین زحمت، تغییراتی را به طور مکرر و قابلپیشبینی انجام دهند.
کانتینرها مفهوم جدیدی نیستند، اما اکنون با تغییر معماری میکروسرویسها، واقعاً موردتوجه قرار گرفتهاند. شرکتهایی که میخواهند حجم کاری خود را بهراحتی از یک محیط به محیط دیگر منتقل کنند، میتوانند برای ارائه یک انتزاع منطقی از برنامه از محیط زیر به کانتینرها تکیه کنند، بنابراین از حالت استفاده از مهاجرت آسان پشتیبانی میکنند.
سرورهای در حال اجرا یا ماشینهای مجازی شبیه به داشتن حیوانات خانگی هستند که در آن به هر سرور یک نام منحصربهفرد داده میشود و از آنها مراقبت میشود (مدیریت دستی). به طور مثال، اگر یک سرور فیزیکی متوقف شود و لازم باشد تا اقدامات لازم برای اطمینان از سالمبودن دوباره سرور (وصلهکردن، بهروزرسانی، و غیره) انجام شود، سازمان را با مشکل جدی روبرو میکند. از سوی دیگر، کانتینرها انعطافپذیری بیشتری نسبت به ماشینهای مجازی دارند و امکان مدیریت آنها با سهولت بیشتری وجود دارد، زیرا بهسادگی قادر به حفظ آنها هستید و امکان جایگزینی آنها با کانتینر دیگری بهراحتی وجود دارد. نکته مهمی که در اینجا باید به آن دقت کنید این است که کانتینرها با درنظرگرفتن سناریوهای شکست ایجاد میشوند.
نکتهای که لازم است در ارتباط با اجرای میکروسرویسها به آن دقت کنید این است که نیازی به استفاده انحصاری از کانتینرها ندارد. بااینحال، استفاده از آنها سادهترین راه برای اجرای یک معماری میکروسرویس در فضای ابری است. ازآنجاییکه کانتینرها میتوانند منابع را در یک نمونه سیستمعامل با سایر مولفههای برنامه به اشتراک بگذارند، امکان استفاده بهینهتر از سرور را تضمین میکنند. علاوه بر این، کانتینرها بهسرعت قابلتغییر هستند و ازاینرو برای پاسخگویی به تقاضاهای فزاینده ناشی از بارهای کاری نامنظم مناسبتر هستند. ویژگیهای کلیدی زیرساختهای ارتجاعی و مولفههای مستقل که امکان پیکربندی منفرد آنها را امکانپذیر میکنند بسیاری از تیمهای توسعه را ترغیب میکند به سمت ابر بومی حرکت کنند، بااینحال، همین ویژگیها چالشی منحصربهفرد ایجاد میکنند، زیرا کانتینرها به دلیل طول عمر کوتاه و ماهیت بسیار پویا، میتوانند پیچیدگی عملیاتی را بیشتر کنند. به طور مثال، باید جریان شبکه و مسیریابی بین میکروسرویسها بهدقت پیکربندی و کنترل شوند.
در سناریوهایی که تعداد کانتینرها کم است، میتوان این وظایف عملیاتی را بهصورت دستی انجام داد، اما با گسترش سریع و تعدد کانتینرها نیاز به هماهنگی کانتینرها آشکار میشود. بهطوری که سازماندهندگان کانتینر وظایف مدیریتی مانند تخصیص و مدیریت منابع، اتوماسیون، مقیاسبندی، بررسی سلامت، شبکهسازی، تعادل بار و غیره را عهدهدار میشوند. ابزارهای ارکستراسیون کانتینر مانند Kubernetes به خودکارسازی استقرار، مقیاسبندی و مدیریت بارهای کاری کانتینری در محیطهای ابری کمک فراوانی میکنند.
نظارت
در اینجا Monitoring به فرایند نظارت بر سیستم و دستیابی به چشماندازی دقیق از سیستم اشاره دارد. رویکرد فوق شامل ساخت یک سیستم خوب تعریف شده برای اندازهگیری و تأیید رفتار موردنظر یک نهاد (Entity) است. در این حالت، کوچکترین نشانهای دال بر انحراف باید سریعاً به مدیران مربوطه اطلاع داده شود. نظارت مستمر بر زیرساخت و شناسایی علل رفتارهای غیرعادی و برطرفکردن مشکلات مانع بروز مشکلات احتمالی میشود. در مجموع باید بگوییم که مانیتورینگ به معنای جمعآوری، پردازش، تجمیع و نمایش دادههای کمی در زمان واقعی در مورد یک سیستم است که برای این منظور از مکانیزمهایی مثل اجرای محاورهها، بررسی گزارشهای خطا و وضعیت سرور استفاده میشود.
منبع: Shabakeh-mag