مقدمه ای بر مایکرو سرویس
شنبه 7 بهمن 1396 3:12 PM
در سال های اخیر مایکروسرویس به عنوان جدیدترین ، مهمترین و محبوبترین روش طراحی معماری سیستم های نرم افزارها شناخته شده است. در این مدت بحث ها, مقالات و صحبت های بسیار بسیار زیادی در مورد این موضوع طرح شده, و شرکتهای بزرگی مانند Amazon , SoundCloud , Netflix و ... بصورت بسیار گسترده از آن استفاده کرده اند.
برای شناخت معماری Micro services ، ابتدا بایستی با معماری Monolithic آشنا شویم.
در معماری Monolithic بخشهای مختلف برنامه سمت سرور مثل پردازش پرداخت آنلاین، مدیریت حسابها، اعلانها ، ارتباط با پایگاه داده و انجام سایر الگوریتمها و ... همگی در یک واحد جمع و اجرا میشوند. در این نوع معماری زمانیکه ترافیک برنامه در سمت سرور افزایش پیدا میکند، باید برای پاسخگویی، اندازه را افزایش داد. یعنی باید برنامه تحت وب خود را بر روی سرورهای مختلف مجددا اجرا نمود. بخشی به نام Load Balancer، وظیفه توزیع درخواستها را به سرورهای مختلف که بر روی هر یک، یک نسخه از برنامه در حال اجرا است، به عهده دارد. بر اساس توضیحی که از این معماری ارایه شد، در هر یک از این اجراها، کل برنامه با تمام متعلقاتی که دارد، فارغ از اینکه به همه آنها نیاز است یا نه، از منابع سرور استفاده میکند. همچنین در معماری Monolithic برنامهها بر اساس یک زبان برنامهنویسی مشخص، برای یک فریم ورک مشخص نوشته میشوند. این برنامهها اصطلاحا چند سکویی نیستند و کامپوننتهای نوشته شده برای آنها فقط در فریم ورک جاری قابل استفاده مجدد هستند. ممکن است برای هر تغییر ریز و درشت در برنامههای این معماری، نیاز به Build و Deploy مجدد کل برنامه باشد که احتمال از دسترس خارج شدن برنامه هم وجود دارد. اگر بخشی از برنامه از کار بیافتد، ممکن است باعث از کار افتادن کل برنامه یا بخشهایی از آن شود.
اینجا است که پای میکروسرویسها به میان میآید و کمپانیهای بزرگی همچون آمازون یا نتفلیکس به استفاده از میکروسرویسها روی آوردهاند.
میکروسرویس روشی به منظور تقسیمبندی کردن یک اپلیکیشن (در اینجا منظور اپ موبایل نیست بلکه هر نوع نرمافزاری را شامل میگردد) به بخشها یا سرویسهای کوچک، سبک، مستقل و قابل مدیریت است. به عبارت دیگر، میکروسرویس یک معماری توسعهٔ نرمافزار Distributed (پخششده) است.
در معماری Micro services، برنامه سمت سرور به سرویسهای مختلفی تقسیم میشود و هر سرویس یک فرآیند پردازشی مستقل است که به عنوان یکی از قابلیتهای خاص برنامه سمت سرور به حساب میآید. این نوع سرویسها صرفاً به منظور هندل کردن یک تَسک خاص طراحی میشوند؛ به طور مثال، یک سرویس صرفاً وظیفهٔ مدیریت کاربران را دارا است و سرویس دیگر فقط و فقط برای بخش جستجوی سایت کاربرد دارد.
برنامههای نوشته شده با این معماری اجباری برای اجرا شدن در سرورهای جداگانه را ندارند، مگر اینکه یک سرویس، شرایط خاصی از جمله مصرف بالای RAM یا نیاز به پردازش ویژه و زیاد در CPU را داشته باشد. در اینصورت بهتر است که سرویس از یک سرور مجزا اجرا شود. لازم است که سرویسها در بستر شبکه با یکدیگر در ارتباط باشند. همچنین باتوجه به اینکه میکروسرویسها مجزا و مستقل از یکدیگر هستند، به راحتی قادر خواهیم بود تا آنها را با زبانهای برنامهنویسی مختلفی نوشته و برای ذخیرهسازی دادههای مرتبط با آنها، از سیستمهای مدیریت دیتابیس مختلفی استفاده کنیم. به عنوان مثال ، جاهایی که نیاز به ذخیرهسازی سنتی دادهها داریم میتوانیم از MySQL استفاده کنیم و جاهایی دیگر هم به خاطر ساختار غیرقابل پیشبینی دیتای خود، میتوانیم از دیتابیسهای به اصطلاح NoSQL استفاده کنیم.
در اینجا ممکن است این سؤال پیش بیاید که سرویسهای مختلف یک اپلیکیشن با معماری میکروسرویسی چگونه با یکدیگر ارتباط برقرار میکنند؟ در پاسخ به این سؤال باید گفت که با استفاده از ریکوئستهایی از جنس HTTP و APIهای به اصطلاح RESTful این ارتباط برقرار خواهد شد.
فلسفه معماری مبتنی بر میکروسرویسها همانند فلسفه Unix است که تلاش میکند «یک چیز را انجام دهد و فقط آن را به خوبی انجام دهد». در Micro services :
در واقع قاعده مشخصی برای انتخاب بین این دو معماری وجود ندارد. شاید بهترین دلیل برای استفاده از این معماری زمانی است که تیم توسعه دهنده به این نتیجه برسد که خصوصیات معماری Monolithic برای آنها مشکل به حساب میآید.
اگر تیم توسعه دهنده تصمیم بگیرد که از معماری Monolithic به نوع Micro services تغییر مسیر دهد، نیازی به نوشتن کل برنامه از ابتدا نیست. در این شرایط میتوان فقط کامپوننتهایی را که دردسر ساز شدهاند، به نوع سرویسی آن تبدیل کرد. به این نوع برنامههای سمت سروری که بخش اصلی برنامه به صورت Monolithic ولی برخی از عملکردهای خاص آن به صورت سرویسی نوشته شده باشد، اصطلاحا معماری Micro services با هسته Monolithic گفته میشود.