میکروسرویسها یک رویکرد معماری و سازمانی برای توسعه نرمافزار هستند که در آن، نرمافزار از سرویسهای مستقل کوچکی تشکیل شده است. هرکدام از این سرویسهای مستقل از طریق رابطهای برنامهنویسی کاربردی (API) خوب تعریفشده (Well-defined) با یکدیگر ارتباط برقرار میکنند که به تیمهای کوچک و مستقل تعلق دارند. معماری میکروسرویس، مقیاسپذیری و توسعه سریعتر اپلیکیشنها را آسانتر میکند، نوآوری را امکانپذیر میسازد و زمان ارائه ویژگیهای جدید به بازار را سرعت میبخشد. اگر میخواهید بدانید معماری میکروسرویس چیست و چه کاربردی در رایانش ابری دارد، این مقاله برای شما نوشته شده است. تا انتهای مطلب پیش رو با ما باشید تا به توضیح مفصل معماری میکروسرویسها بپردازیم.
معماری میکروسرویس چیست؟
معماری میکروسرویس نوعی معماری برای توسعه برنامههای کاربردی است که در آن، برنامه بهعنوان مجموعهای از سرویسها توسعه مییابد. میکروسرویس چارچوبی را برای توسعه، استقرار و نگهداری مستقل نمودارها و سرویسهای معماری میکروسرویسها فراهم میکند.
میکروسرویسها به یک برنامه بزرگ اجازه میدهند به بخشهای مستقل کوچکتر با مسئولیتها و عملکرد منحصربهفرد تفکیک شود. هر میکروسرویس از طریق رابطهای برنامهنویسی کاربردی ساده (API) با سرویسهای دیگر ارتباط برقرار میکند. برای پاسخدهی به یک درخواست کاربر، یک اپلیکیشن مبتنیبر میکروسرویس میتواند بسیاری از میکروسرویسهای داخلی را برای پاسخ خود فراخوانی کند.
کانتینرها؛ بهترین مثال میکروسرویس
کانتینرها بهترین مثال از معماری میکروسرویس هستند که به شما اجازه میدهند بدون نگرانی در مورد وابستگیها، فقط روی توسعه سرویسها تمرکز کنید. اپلیکیشنهای مدرن مبتنیبر ابر (Cloud-native) معمولا با استفاده از کانتینرها تحت عنوان میکروسرویسها ساخته میشوند. با مطالعه مقاله «کوبرنتیز چیست» درک بهتری از ایجاد اپلیکیشنهای مبتنیبر میکروسرویسها با استفاده از کانتینرها خواهید داشت.
تفاوت معماری میکروسرویس با معماری یکپارچه
در معماریهای یکپارچه (Monolithic)، همه فرایندها به هم وابسته هستند و بهعنوان یک سرویس واحد اجرا میشوند؛ یعنی اگر یکی از فرایندهای برنامه با افزایش ناگهانی تقاضا مواجه شود، کل معماری نیاز به مقیاس شدن دارد.
با بزرگ شدن پایه کد، افزودن یا بهبود ویژگیهای یک برنامه کاربردی یکپارچه پیچیدهتر میشود. این پیچیدگی آزمایش را محدود کرده و اجرای ایدههای جدید را دشوار میکند. معماریهای یکپارچه یا مونولیتیک خطراتی را برای دسترسیپذیری برنامهها به همراه دارند؛ زیرا وابستگی فرایندها به یکدیگر، تأثیر شکست یک فرایند واحد را به کل فرآیندها افزایش میدهند.
با معماری میکروسرویس، یک اپلیکیشن بهعنوان اجزای مستقل ساخته میشود که هر فرایند برنامه را بهعنوان یک سرویس اجرا میکند. این سرویسها از طریق یک رابط کاملا تعریفشده با استفاده از APIهای سبک با هم ارتباط برقرار میکنند.
سرویسها برای قابلیتهای کسبوکار ساخته شدهاند و هر سرویس یک عمل واحد انجام میدهد. ازآنجاییکه قسمتهای مختلف میکروسرویس بهطور مستقل اجرا میشوند، هر سرویس را میتوانید بهطور مجزا بهروزرسانی یا مستقر کرده و برای پاسخگویی به تقاضا جهت عملکردهای خاص یک برنامه، مقیاسبندی کنید.
ویژگیهای خاص میکروسرویسها
بهعنوان یک فرایند توسعه، چارچوب میکروسرویسها ویژگیهای خاصی دارد که مشترکاند، اما جهانی نیستند. ویژگیهای معماری میکروسرویسها عبارتاند از:
- مولفهها (Components): میکروسرویسها معمولا از اجزای نرمافزاری مجزا تشکیل شدهاند که بهصورت جداگانه قابل تعویض و قابل ارتقا هستند. این معماری پیامدهایی برای تکنولوژی مدیریت ابری دارد؛ زیرا هر یک از میکروسرویسها باید بهطور جداگانه تهیه، نظارت و ارتقا داده شوند.
- خدمات: مولفهها شامل سرویسهایی هستند که برای برقراری ارتباط در صورت تقاضا در دسترس هستند، اما ممکن است بهطور مداوم بین درخواستها یا فراخوانیها فعال نباشند.
- استقرار مستقل: در بیشتر موارد، مولفههای هر سرویس مستقل از یکدیگر در چارچوب میکروسرویسها عمل میکنند. اگر یک مولفه تغییر کند یا بهروزرسانی شود، تاثیر کمی بر سایر سرویسها و مولفهها خواهد داشت؛ بهویژه در مقایسه با یک معماری یکپارچه سنتیتر.
- امنیت: ارتباطات بین میکروسرویسها اغلب با امنیت لایه انتقال متقابل (mutual transport layer security – mTLS) رمزگذاری میشود تا از دادهها در برابر بدافزارها و نفوذها در حین انتقال محافظت شود.
- کانتینریسازی: میکروسرویسها اغلب در کانتینرها برای قابلیت حمل و مقیاسپذیری بیشتر مستقر میشوند.
نحوه عملکرد میکروسرویسهای ابری
معماری میکروسرویس یک برنامه را بهصورت مجموعهای از سرویسهای کوچک، قابل استقرار و مستقل ساختاربندی میکند. هر سرویس برای انجام یک قابلیت خاص کسبوکار طراحی شده است و میتواند از طریق APIهای تعریفشده با سایر سرویسها ارتباط برقرار کند. در ادامه نحوه عملکرد میکروسرویس در رایانش ابری آورده شده است:
1. جداسازی سرویس
عملکرد برنامه بر اساس قابلیتهای کسبوکار به سرویسهای کوچکتر و قابل مدیریت تقسیم میشود. هر سرویس بر یک وظیفه خاص تمرکز دارد و میتواند بهصورت مستقل توسعه یابد و مستقر و مقیاسبندی شود.
2. توسعه و استقرار مستقل
هر میکروسرویس بهعنوان یک موجودیت جداگانه و معمولا با استفاده از فناوریها و زبانهای برنامهنویسی بعضاً متفاوت توسعه و استقرار مییابد. توسعه و استقرار مستقل به تیمهای توسعه اجازه میدهد تا بهصورت مستقل کار کنند و مناسبترین ابزارها و چارچوبها (Framework) را برای سرویس خاص خود انتخاب کنند.
3. ارتباط مبتنی بر API
میکروسرویسها از طریق APIها و با استفاده از پروتکلهای سبک مانند HTTP/REST، صفهای پیامرسانی یا مکانیزمهای رویدادمحور با یکدیگر ارتباط برقرار میکنند. سرویسها رابطهای برنامهنویسی کاربردی تعریفشدهای ارائه میدهند که امکان ارسال و دریافت دادهها از سایر سرویسها را فراهم میکنند.
4. اتصال ضعیف
میکروسرویسها بهطور ضعیفی با هم جفت میشوند؛ یعنی هرکدام از سرویسها مستقل بوده و میتواند بدون تأثیرگذاری بر سرویسهای دیگر تکامل یابد و بهروزرسانی شود. تغییرات ایجادشده در یک سرویس نیاز به تغییر یا استقرار مجدد کل برنامه ندارند.
5. مقیاسپذیری مستقل
هر میکروسرویس میتواند بر اساس نیازهای خاص خود بهصورت مستقل مقیاسبندی شود. سرویسهایی که تقاضای بالایی دارند، میتوانند مقیاسبندی شوند، ضمن اینکه سرویسهای کمتر استفادهشده در مقیاس پایینتری باقی بمانند و استفاده از منابع را بهینه سازند.
6. مدیریت دادهها
میکروسرویسها میتوانند پایگاه دادههای مربوط به خود را داشته باشند که به هر سرویس اجازه میدهد مناسبترین تکنولوژی پایگاه داده را برای نیازهای خاص خود انتخاب کند. سازگاری دادهها و همگامسازی بین سرویسها میتواند از طریق تکنیکهایی مانند منبع رویداد (Event sourcing) یا تراکنشهای توزیعشده مدیریت شود.
7. تابآوری و جداسازی خطا
میکروسرویسها بهگونهای طراحی شدهاند که مقاوم و تحملپذیر نسبت به خطا باشند. اگر یک سرویس از کار بیفتد یا با مشکلاتی مواجه شود، کل برنامه دچار مشکل نمیشود. سرویسها میتوانند شکستها را بهخوبی مدیریت کرده و بهصورت مستقل به کار خود ادامه دهند.
8. DevOps و تحویل مداوم
میکروسرویسها با شیوههای فعلی عملیات توسعه (DevOps) همخوانی دارند و امکان استقرارهای مکرر و تحویل مداوم را فراهم میکنند. ازآنجاییکه هر سرویس بهصورت مستقل مستقر میشود، بهروزرسانیها و ویژگیهای جدید میتوانند بهسرعت و بدون ایجاد اختلال در کل برنامه منتشر شوند.
9. نظارت و مدیریت
نظارت و مدیریت میکروسرویسها بهدلیل ماهیت توزیعشده معماری میتواند چالشبرانگیز باشد. ابزارها و پلتفرمهایی برای نظارت بر سلامت، عملکرد و در دسترس بودن هر سرویس استفاده میشوند که امکان نگهداری و عیبیابی پیشگیرانه را فراهم میکنند.
با اتخاذ یک معماری میکروسرویس، سازمانها میتوانند به مزایایی مانند بهبود مقیاسپذیری، انعطافپذیری، جداسازی خطا و زمان سریعتر برای ارائه ویژگیهای جدید به بازار دست یابند. بااینحال، این معماری همچنین پیچیدگیهایی در ارتباط بین سرویسها، سازگاری دادهها و مدیریت سیستمهای توزیعشده معرفی میکند که باید بهدقت مدیریت شوند.
انواع الگوی معماری میکروسرویس
استقرار میکروسرویسها اغلب از یکی از سه الگوی زیر پیروی میکند:
- مبتنی بر ابر (Cloud native): برخی از برنامهها و خدمات مستقر و با حجم بالا از همان ابتدا بهعنوان میکروسرویس شروع میشوند و در فضای ابر باقی میمانند. بر اساس گزارش شرکت بینالمللی داده (IDC)، حدود 56 درصد از میکروسرویسها مبتنی بر ابر هستند، درحالیکه 44 درصد باقیمانده از برنامههای قدیمی نشأت گرفتهاند.
- بازسازی و انتقال (Refactor and shift): این نوع استقرارها در ابتدا بهصورت محلی یا در یک مرکز داده در لبه (Edge) آغاز میشوند و برای تطبیق با معماری میکروسرویس مبتنیبر ابر بازسازی میشوند. بازسازی ممکن است شامل بازنگری (Remapping) پایگاههای داده و سایر منابع مرتبط با معماری یکپارچه باشد تا با میکروسرویسهای مربوطه جفت شود.
- انتقال مستقیم (Lift and shift): برخی سازمانها برنامههای کاری خود را بدون بازسازی و در یک انتقال ساده Lift and shift به معماری میکروسرویسها منتقل میکنند.
کاربردهای معماری میکروسرویس
معمولا از میکروسرویسها برای سرعت بخشیدن به توسعه برنامهها استفاده میشود. معماریهای میکروسرویس ساختهشده با جاوا (بهویژه Spring Boot) رواج بیشتری دارند. همچنین مقایسه بین میکروسرویسها و معماری سرویسگرا (Service-oriented architecture) رایج است. هر دوی این معماریها هدف مشترک، اما رویکرد متفاوتی دارند. هدف معماریهای میکروسرویس و سرویسگرا تقسیم اپلیکیشنهای یکپارچه به مولفههای کوچکتر است. در ادامه به بررسی چند مثال از معماری میکروسرویسها میپردازیم:
- مهاجرت وبسایت: یک وبسایت پیچیده که روی یک پلتفرم یکپارچه میزبانی میشود، میتواند به یک پلتفرم میکروسرویس مبتنیبر ابر و کانتینر منتقل شود.
- محتوای رسانهای: با استفاده از معماری میکروسرویس، میتوانید تصاویر و ویدیوها را در یک سیستم ذخیرهسازی اشیاء مقیاسپذیر ذخیره کرده و بهطور مستقیم به وب یا موبایل ارائه کنید.
- تراکنشها و فاکتورها: پردازش پرداخت و سفارشها را میتوان بهعنوان واحدهای مستقل سرویسها جدا کرد تا حتی در صورت ایجاد اختلال در سیستم فاکتوردهی، پرداختها ادامه یابند.
- پردازش دادهها: یک پلتفرم میکروسرویس میتواند پشتیبانی ابری را برای سرویسهای پردازش دادههای موجود ماژولار گسترش دهد.
مزایای استفاده از میکروسرویسها چیست؟
میکروسرویسها بهدلیل انعطافپذیری ذاتی در معماری خود محبوبیت ویژهای در سرویسهای رایانش ابری دارند. گزارش Intel در سالهای اخیر نشان میدهد که بیش از 83 درصد از کلیه برنامههای کاربردی مبتنی بر ابر و راهحلهای SaaS از میکروسرویسها استفاده میکنند. در ادامه به بررسی مزایای الگوی معماری میکروسرویس میپردازیم:
چابکی
میکروسرویسها یک سازمان متشکل از تیمهای کوچک و مستقل را تشویق میکنند که مسئولیت سرویسهای خود را به عهده بگیرند. تیمها در یک بستر کوچک و بهخوبی درکشده عمل میکنند و قادرند بهصورت مستقلتر و سریعتر کار کنند. این امر زمان چرخههای توسعه را کوتاهتر میکند. بهاینترتیب شما بهطور قابل توجهی از مجموع بازدهی سازمان بهرهمند میشوید.
مقیاسپذیری انعطافپذیر
میکروسرویسها این امکان را فراهم میکنند که هر سرویس بهصورت مستقل مقیاسبندی شود تا بتواند نیازهای تقاضا برای ویژگیهای برنامهای که پشتیبانی میکند را برآورده سازد. این امر به تیمها اجازه میدهد تا نیازهای زیرساختی را بهدرستی تنظیم کنند، هزینه یک ویژگی را بهدقت اندازه بگیرند و در صورت مواجهه یک سرویس با افزایش ناگهانی تقاضا، دسترسیپذیری را حفظ کنند.
استقرار آسان
میکروسرویسها امکان یکپارچهسازی مداوم (Continuous integration) و تحویل مداوم (Continuous delivery) را فراهم میکنند. این امر اجرای ایدههای جدید را آسانتر کرده و در صورت عدم موفقیت، بازگشت به وضعیت قبلی را ساده میسازد. هزینه پایین شکست، امکان آزمایش و بهروزرسانی کد را آسانتر کرده و زمان معرفی ویژگیهای جدید به بازار را تسریع میبخشد.
آزادی تکنولوژیکی
معماریهای میکروسرویس از رویکرد «یک اندازه متناسب برای همه» (One size fits all) پیروی نمیکنند. تیمها آزادی انتخاب بهترین ابزار برای حل مشکلات خاص خود را دارند. در نتیجه، تیمهای سازنده میکروسرویسها میتوانند بهترین ابزار را برای هر کار انتخاب کنند.
کد با قابلیت استفاده مجدد
تقسیم نرمافزار به ماژولهای کوچک و کاملا تعریفشده به تیمها این امکان را میدهد تا از توابع برای اهداف متعدد استفاده کنند. یک سرویس که برای یک تابع خاص نوشته شده است، میتواند بهعنوان بلوک ساختمانی برای ویژگی دیگری استفاده شود. این امر به برنامه اجازه میدهد تا از خود برای ایجاد قابلیتهای جدید استفاده کند، بدون اینکه نیاز به نوشتن کد از ابتدا باشد.
تابآوری
استقلال سرویسها مقاومت اپلیکیشن در برابر خرابی را افزایش میدهد. در یک معماری یکپارچه، اگر یک جزء یا مولفه واحد از کار بیفتد، میتواند باعث از دسترس خارج شدن کل برنامه شود. با میکروسرویسها، خرابی یکی از مولفهها اختلال کم یا ناچیزی در سایر مولفهها ایجاد میکند و باعث خرابی کل اپلیکیشن نمیشود.
منابع: AWS | Google Cloud | Juniper networks