معماری میکروسرویس ها

معماری میکروسرویس چیست؟

معماری میکروسرویس چیست؟

معماری میکروسرویس، در واقع یک روش خاص برای طراحی نرم افزارهای کاربردی است که مجموعه ای از خدمات و سرویس های مستقل را ارائه میدهد.

میکروسرویس (microservice) یک اصطلاح جدید در زمینه معماری نرم افزار محسوب میشود که تعریف دقیقی برای آن و نحوه انجامش ارائه نشده است. با این حال این روزها پروژه های زیادی دیده میشود که از این شیوه سرویس دهی استفاده و از مزایای آن بهره مند میشوند. خیلی از برنامه نویسان هنگام طراحی و ساخت برنامه های سازمانی و پیچیده، به طور پیش فرض از این نوع سرویس دهی استفاده می کنند.

معماری میکروسرویس به اپلیکیشن ها و برنامه ها امکان می دهد تا بر روی یک سیستم، با هم ارتباط برقرار کنند.

با توجه به اینکه میکروسرویس ها خودکفا هستند، ارتباط کمی با سایر سرویس ها دارند. کارکرد میکروسرویس ها به صورت تکی یا گروهی از کارکردهای مشترک میباشد. هدف از به وجود آمدن معماری میکروسرویس ایجاد یک رویکرد برای توسعه برنامه ها، به وسیله مجموعه ای از سرویس های مستقل که هر کدام در فرایند خود اجرا میشوند. سپس از طریق مکانیزم های سبک و کم حجم با یکدیگر ارتباط برقرار میکنند.

معمولا این نوع سرویس ها بر اساس یک سری قابلیت های تجاری و سازمانی پیچیده ساخته شده اند که به طور مستقل، توسط ماشین های توسعه دهنده خودکار استفاده می شوند.

در میکرو سرویس ها مدیریت متمرکز کمی وجود دارد که با استفاده از زبان های برنامه نویسی مختلفی نوشته شده است. از این رو میکرو سرویس ها از فناوری های مختلفی برای ذخیره اطلاعات استفاده می کنند.

ویژگی های معماری میکروسرویس

همانطور که در بالا گفتیم، هیچ تعریف رسمی برای معماری میکروسرویس وجود ندارد که بتواند آن را به صورت کامل شرح دهد. به طور کلی یک سری اطلاعات عمومی در مورد آن وجود دارد که توسط افرادی که از آن استفاده کرده اند، تعریف و بیان شده است.

با توجه به تعاریف و تجربه های موجود میتوان نتیجه گرفت که معماری های میکرو سرویس، تمام ویژگی های مربوط به سرویس ها را ندارد اما از بیشتر معماری های میکروسرویس انتظار می رود که بیشترین خصوصیات را به نمایش بگذارند.

یکی از مهم ترین و اصلی ترین هدف های این نوع معماری، برطرف کردن مسائل پیچیده است. از این رو برنامه های بزرگ و یکپارچه را به مجموعه ای از سرویس های کوچک تجزیه و تمام اجزای برنامه را قابل کنترل تر میکند. همچنین به هر سرویس این امکان را می دهد تا به صورت مستقل توسط تیم توسعه دهنده برنامه، توسعه یابد. در صورتی که سرویس مورد نظر به قوانین API احترام بگذارد، توسعه دهندگان اجازه دارند برای توسعه آن از هر نوع تکنولوژی که میخواهند استفاده کنند.

یکی دیگر از مزیت های معماری میکروسرویس این است که به هر سرویس تجزیه شده امکان می دهد تا به صورت مستقل منتشر و مقیاس بندی شود.

همانند بقیه سرویس ها، معماری میکروسرویس هم دارای یک سری معایب و اشکالات است که کمی کار با آن را دشوار میکند. عمده ترین اشکالات میکروسرویس ها پیچیدگی تست برنامه ها و پیاده سازی تغییراتی است که شامل چندین سرویس میشود. علاوه بر آنها کار انتشار برنامه های مبتنی بر میکروسرویس نیز بسیار پیچیده و دشوار است.

در معماری میکروسرویس تمام استدلال و منطق شما برای کنترل یک درخواست در حال اجرا در یک پروسه واحد، به شما اجازه میدهد تا از ویژگی های اساسی زبان برنامه نویسی خود برای تقسیم برنامه بین کلاس ها (classes)، توابع (functions) و فضاهای نامی (namespaces) استفاده کنید. با کمی دقت می توانید برنامه را بر روی لپ تاپ یک شخص توسعه دهنده اجرا و تست کنید سپس از یک pipeline گسترده برای مطمئن شدن از اینکه تغییرات به درستی تست شده اند و به محصول اضافه شده است، استفاده کنید. با اجرا کردن مثال های متعدد در پشت یک load-balancer، میتوانید monolith را به صورت افقی مقیاس کنید.

برنامه هایی که از معماری monolithic یا یکپارچه استفاده میکنند، می توانند موفق باشند اما مردم به طور فزاینده ای از آنها نا امید میشوند. به خصوص که امروزه برنامه های بیشتری در Cloud قرار دارند.

چرخه های تغییر به یکدیگر گره خورده اند، از این رو تغییری که در قسمت کوچکی از برنامه اعمال شده است، به بازسازی و استقرار کل monolith نیاز دارد. هرچه زمان بیشتری می گذرد، کار نگه داشتن یک ساختار با modular خوب نیز سخت تر میشود.

علاوه بر این واقعیت که سرویس ها به صورت مستقل، قابل استفاده و مقیاس پذیر هستند، هر سرویس یک مرز ماژول محکم را فراهم میکند، حتی امکان نوشتن سرویس های مختلف به زبان های برنامه نویسی مختلف را فراهم می کند. همچنین می توان آنها را توسط تیم های مختلف مدیریت کرد.

در ادامه برای درک بهتر معماری microservice، آن را با معماری monolithic مقایسه خواهیم کرد.

برنامه هایی که با استفاده از معماری monolithic ساخته میشوند به صورت تک واحد، یکپارچه و ساده هستند. در حالی که برای ساخت برنامه های سازمانی و پیچیده از معماری میکروسرویس استفاده میشود که اکثرا شامل سه بخش اساسی هستند:

1.رابط کاربری سمت مشتری:

این بخش شامل صفحات HTML است که جاوا اسکریپت را در مرورگر سیستم کاربر اجرا میکند.

2.دیتابیس یا پایگاه داده:

این بخش شامل تعداد زیادی جدول مرتبط به هم است که تمام کارهای مربوط به مدیریت دیتابیس در آن انجام میشود.

3.برنامه سمت سرور:

برنامه سمت سرور درخواست های HTTP را کنترل، دامنه های logic را اجرا و نماهای HTML را برای ارسال به مرورگر انتخاب و جمع میکند. به صورت کلی این بخش یک واحد منطقی و یکپارچه قابل اجرا محسوب میشود. زمانی که در سیستم تغییری ایجاد میشود، یک نسخه و ورژن جدید از برنامه در سرور ایجاد و توسعه می یابد که سرور monolithic، یک روش طبیعی برای ساخت این نوع سیستم هاست.

معماری میکروسرویس و معماری SOA

در قسمت قبل به خوبی با معماری microservice آشنا شدیم. SOA مخفف عبارت Service Oriented Architecture است که تفاوت زیادی با میکروسرویس ها ندارد.

به صورت کلی میتوان گفت که میکروسرویس ها نوعی SOA یا یک نوع معماری مبتنی بر سرویس هستند که در طی سال های گذشته بسیار مهم و مطرح هستند.

میکروسرویس ها نسبت به SOA ها انعطاف پذیر تر و ساده تر هستند. در صورتی که معماری SOA به صورت یکپارچه پیاده سازی شده باشد، به راحتی می توان آن ماژول یا سرویس را از یک پروژه برداشت و بدون نیاز به پیکربندی خاصی آن را به یک پروژه دیگر اضافه کرد.

در معماری SOA یک سری ماژول یا کامپوننت های منحصر به فرد در اختیار برنامه نویس قرار دارد که با استفاده از آن یک سری سرویس در اختیار بقیه اجزا و کامپوننت های برنامه قرار میگیرد.

در حالی که در معماری میکروسرویس، این کامپوننت ها و ماژول ها به عنوان سرویس های مستقل شناخته می شوند، که به صورت تکی هم می توان آنها را دیپلوی (Deploy) کرد. نکته دیگری که در ارتباط با تفاوت های این دو معماری وجود دارد، سایز ماژول‌ هاست. یعنی میکروسرویس ها به مراتب از SOA ها کوچک تر هستند که همین مسئله مدیریت آن‌ها را ساده‌ تر میکند.

میکروسرویس چقدر بزرگ است؟

میکروسرویس یک نام محبوب برای این سبک معماری است اما زمانی که نام آن می آید، بنظر می رسد که اندازه و میزان سرویس دهی این سبک معماری بسیار ساده و کوچک است. در حالی که این یک باور اشتباه است زیرا میکروسرویس ها خدمات بسیار زیاد و مهمی را ارائه میدهند. در واقع هدف اصلی آنها این است که کارهای پیچیده و سخت را آسان کنند.

بستن