مایکروسرویسها
در رایانش، مایکروسرویسها (Micro به معنای بسیار کوچک است) نوعی الگوی معماری است که در آن برنامههای پیچیده به بخشهای کوچک و مستقلی شکسته میشوند که از طریق APIهای مستقل از زبان با هم در ارتباط هستند.[۱] این سرویسها کوچک هستند و سطح بسیار خوبی از استقلال را دارند (یعنی جدا شده یا decoupled هستند). به علاوه تمرکز هر یک بر روی انجام یکی از آن کارهای کوچک است.[۲]
معرفی معماری میکروسرویسها
[ویرایش]معماری میکروسرویسها برای رفع مشکلات معماری یکپارچه به وجود آمد. در معماری یکپارچه، تمامی بخشهای سیستم در قالب یک کد پایه مشترک طراحی میشوند که ممکن است با افزایش پیچیدگی، توسعه و نگهداری آن دشوار شود.
تفاوت با معماری یکپارچه (Monolithic)
[ویرایش]در معماری یکپارچه، تمامی ماژولها وابسته به یکدیگر هستند و به یکدیگر متصلاند. اما در معماری میکروسرویسها:
- هر سرویس به صورت مستقل توسعه و استقرار مییابد.
- سرویسها میتوانند با زبانهای برنامهنویسی متفاوت نوشته شوند.
- ارتباط بین سرویسها معمولاً از طریق پروتکلهای سبک (مانند REST API یا gRPC) صورت میگیرد.
جزئیات
[ویرایش]ویژگیهای معماری مایکروسرویسها عبارت است از:
- سرویسها را به راحتی میتوان جایگزین کرد.
- سرویسها حول قابلیتها شکل میگیرند، مثلاً در رابطه با واسط کاربری، محصولات مشابه و توصیه شده با کاربر وب، صورت حساب و …
- سرویسها را میتوان با زبانهای برنامهنویسی، پایگاهدادهها، محیط سختافزاری و نرمافزاری مختلف و متعددی پیادهسازی کرد. انتخاب هر یک بستگی به کاربرد و مسئلهٔ مورد نظر دارد.
- معماری مبتنی بر مایکروسرویسها:
- بر یک روند توسعهٔ نرمافزاری تکیه دارد که در آن ارائهٔ پیوسته (continuous delivery) اهمیت دارد.
- متفاوت از معماری SOA یا همان معماری سرویس محور است. زیرا که در SOA تلاش برای یکپارچه سازی چندین برنامهٔ کاربردی است در حالی که چندین مایکروسرویس تنها متعلق به یک برنامه هستند.
فلسفه
[ویرایش]فلسفهٔ معماری مبتنی بر مایکروسرویسها:
- سرویسها کوچکند و به اندازهٔ کافی ریزدانه هستند (fine grained) ولی نه ریزتر به گونهای که یک هدف تجاری و کاربردی خاص را انجام میدهند. این روند شبیه فلسفهٔ Unix است که تلاش میکند که «یک چیز را انجام دهد و فقط آن را به خوبی انجام دهد».
- فرهنگ سازمان باید خودکار سازی deployment و تست نرمافزار را مشتاقانه بپذیرد زیرا که در این معماری نیاز به چنین رویکردی وجود دارد. به این ترتیب بار از روی مدیریت، مدیران سیستمی و اجرائیات برداشته میشود.
- فرهنگ و الگوهای طراحی باید فرهنگ حل شکست و خطا داشته باشند و پیوسته در راستای بهبود سرویسها تلاش کنند.
- سرویسها باید منعطف، واکنشگر، با قابلیت ترکیب شدن با بقیهٔ سرویسها، و در انجام تک وظیفهای که دارند کامل باشند.[۳][۴][۵]
مزایای استفاده از معماری میکروسرویسها
[ویرایش]- مقیاسپذیری بالا در معماری میکروسرویسها، هر سرویس را میتوان به صورت جداگانه مقیاسپذیر کرد. به عنوان مثال، اگر سرویس مربوط به پرداختها حجم کاری بیشتری داشته باشد، میتوان تنها این سرویس را مقیاس داد.
- استقلال توسعه و استقرار تیمهای توسعه میتوانند بدون وابستگی به سایر تیمها، بر روی سرویسهای خود کار کنند و تغییرات را بدون تأثیر بر سایر بخشها منتشر کنند.
- انعطافپذیری در فناوری هر سرویس میتواند با استفاده از زبان و فناوری مناسب خود توسعه یابد. به عنوان مثال، ممکن است یک سرویس با Python و سرویس دیگری با Java نوشته شود.
- پایداری سیستم اگر یکی از سرویسها دچار مشکل شود، تنها همان بخش تحت تأثیر قرار میگیرد و سایر بخشهای سیستم به کار خود ادامه میدهند.
انتقاد
[ویرایش]معماری مایکروسرویسها به خاطر برخی دلایل مورد انتقاد قرار گرفته است:
- سرویسها گونهای از موانع برای اطلاعات ایجاد میکنند.[۶]
- این معماری پیچیدگی مضاعفی ایجاد میکند و مشکلات جدیدی همچون تأخیر در شبکه، قالب پیغامها، تقسیم بار و قابلیت تحمل خطا[۷]به وجود میآورد. نادیده گرفتن هر یک از اینها منجر به مشکلاتی میشود که در «خطاهای مربوط به پردازش توزیع شده» آمده است.
- تست کردن و بردن به محیط عملیاتی (deployment) پیچیدهتر است.
- پیچیدگی برنامهٔ monolithic به شبکهای از مایکروسرویسها منتقل شده است، ولی همچنان وجود دارد:
- شما میتوانید آن را جابهجا کنید، ولی آن همچنان وجود دارد. -- رابرت آنت: پیچیدگی کجاست؟
چالشها و محدودیتها
[ویرایش]- پیچیدگی مدیریت سیستم معماری میکروسرویسها به ابزارها و روشهای پیشرفته برای مدیریت نیاز دارد. مانیتورینگ، مدیریت استقرار و اطمینان از ارتباط صحیح بین سرویسها چالشبرانگیز است.
- هزینههای زیرساختی میکروسرویسها نیازمند زیرساختهایی مانند Docker و Kubernetes هستند که ممکن است در مقیاس کوچک هزینهبر باشد.
- ارتباط بین سرویسها به دلیل تعداد بالای سرویسها، اطمینان از ارتباط سریع و مطمئن بین آنها از اهمیت ویژهای برخوردار است.
ابزارها و فناوریهای مرتبط
[ویرایش]- Docker یک پلتفرم برای ایجاد و مدیریت کانتینرها که برای استقرار سریع و آسان سرویسها استفاده میشود.
- Kubernetes سیستمی برای مدیریت کانتینرها در مقیاس بزرگ که به طور گسترده در معماری میکروسرویسها استفاده میشود.
- Spring Boot یک فریمورک قدرتمند برای توسعه سرویسهای مستقل در زبان Java.
- Prometheus و Grafana ابزارهایی برای مانیتورینگ و نمایش وضعیت سرویسها.
زبانهای برنامهنویسی
[ویرایش]- زبان Jolie به منظور توسعهٔ برنامههای توزیع شده مبتنی بر مایکروسرویسها طراحی شده است.[۸]
- Vert.X یک چارچوب توسعهٔ برنامهٔ مبتنی بر رویداد و چند زبانی (polyglot) است که بر روی JVM اجرا میشود.[۹]
کاربردها و نمونههای عملی
[ویرایش]- شرکت Netflix Netflix از معماری میکروسرویسها برای ارائه خدمات استریم استفاده میکند و هر سرویس مسئول بخشی از عملکرد سیستم است.
- Amazon Amazon با استفاده از میکروسرویسها توانسته است به صورت مؤثری مقیاسپذیری و انعطافپذیری در تجارت الکترونیکی ایجاد کند.
نمونه کد
[ویرایش]یک مثال ساده از یک سرویس مستقل در Spring Boot:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
}
این کد نشان میدهد چگونه میتوان یک سرویس ساده برای مدیریت کاربران ایجاد کرد. این سرویس میتواند به صورت مستقل مستقر شود.
نتیجهگیری
[ویرایش]معماری میکروسرویسها به دلیل مزایای گسترده در مقیاسپذیری، انعطافپذیری و استقلال توسعه، یک انتخاب مناسب برای سیستمهای پیچیده و بزرگ است. با این حال، برای بهرهبرداری کامل از این معماری، آشنایی با ابزارها و تکنیکهای مدیریت آن ضروری است.
منابع
[ویرایش]- ↑ Martin Fowler. "Microservices".
- ↑ Sam Newman (2015). Building Microservices. ISBN 978-1-4919-5035-7.
- ↑ Lucas Krause. Microservices: Patterns and Applications. ASIN B00VJ3NP4A.
- ↑ Lucas Krause. "Philosophy of Microservices?". Archived from the original on 12 November 2016. Retrieved 26 June 2015.
- ↑ Jim Bugwadia. "Microservices: Five Architectural Constraints".
- ↑ Jan Stenberg (11 August 2014). "Experiences from Failing with Microservices".
- ↑ "Microservices" (PDF).[پیوند مرده]
- ↑ "Jolie".
- ↑ "Vertx".
- مشارکتکنندگان ویکیپدیا. «Microservices». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۲۵ ژوئن ۲۰۱۵.