نگاهی به مایکرو سرویس ها در دنیای مهندسی نرم افزار

نگاهی به مایکرو سرویس ها :: در دنیای مهندسی نرم افزار، روشها و متدلوژیهای زیادی برای توسعه پروژه های مختلف پیشنهاد شده است و خواهد شد. در واقع آنچه مهندسی نرم افزار به دنبال آن است فقط برنامه نویسی نیست، بلکه ارائه راهکارهایی برای بهینه سازی همه جانبه مراحل تحلیل پروژه تا تست و تحویل آن و همچنین نگه داری و پشتیبانی موثر از آن میباشد. روشهایی که در قالب متدلوژیهای توسعه پروژه های نرم افزاری شناخته میشوند.
پیشنهاد شگفت انگیز کدفرند، دسترسی به تمامی دوره های آموزشی کدفرند تنها با ۹۹ هزار تومان
به عنوان مثال در سطح برنامه نویسی و پیاده سازی نرم افزار، روشی به نام متد شی گرایی سالهاست که استفاده میشود همچنین در باب مدیریت پروژه های نرم افزاری روش Scrum برای پیشبرد برنامه ها یا Action Plan های مختلف استفاده میشود و یا در دنیای معماری نرم افزار، سیستم های توزیع شده به عنوان یک علم هر روز در حال تکمیل شدن باتوجه به نیاز روز هست و در این معماری روش معماری سرویس گرا یا Service Oriented Architecture در دو دهه اخیر بسیار مورد توجه بوده است.
در واقع وقتی در باره مهندسی نرم افزار صحبت میکنیم، منظورمان برنامه نویسی نیست، چراکه برنامه نویسی مربوط به بخش پیاده سازی و تست سیستم است و یک مهندس نرم افزار باید با تمامی ابعاد ایجاد سیستم های نرم افزاری مانند : معماری, مدیریت پروژه, پیاده سازی, تست, تحویل و نگه داری و به روز رسانی آشنایی کافی داشته باشد.
یکی از بخش های مهم توسعه نرم افزار، انتخاب معماریی است که باید برنامه براساس آن توسعه بیابد. معماری هایی مانند سیستم های Client/Server و یا سیستم های چند لایه ای مانند آنچه در پیاده سازی سیستم عامل ها استفاده میشود و یا معماری MVC که برای توسعه سیستم های متوسط مانند اپ های وب و موبایل برای کسب و کارهای استفاده میشود، همه اشاره به بخش معماری نرم افزار دارند. در این میان یکی از معماریهایی که هم میتوان گفت یک معماری مسقل است و هم میتواند مکملی برای معماری های دیگر باشد، معماری سرویس گرا است.
معماری سرویس گرا یا Service Oriented Architecture چیست؟
یک روش پیاده سازی نرم افزار است که در آن اجزاء مختلف نرم افزار میتوانند به صورت جداگانه و احتمالا روی کامپیوتر های جدا پیاده سازی شوند و از طریق شبکه و پروتکل هایی مانند HTTP/HTTPS با هم در ارتباط باشند. منظور از اجزاء همان Component هایی هستند که هر کدام بخشی از وظیفه کلی نرم افزار اصلی را بر عهده دارد و برای مقصد خاصی (مانند رسیدگی به جریان احراز هویت) پیاده سازی شده اند. در این معماری هر جزء ار سیستم به صورت مستقل عمل میکند و فقط از طریق واسطهایی به نام سرویس با اجزاء دیگر در ارتباط میباشد. مزیت اصلی این نوع توسعه نرم افزار این است که برای تغییر و به روز رسانی بخشی از نرم افزار نیاز به تغییر بخش های دیگر نیست و اینکه هر بخش را میتوان به صورت مستقل روی سیستم عامل های مختلف و با زبان های برنامه نویسی مختلف و روی بسترهای مختلف میتوان پیاده سازی کرد.
سیستمی را در نظر بگیرید که بخش Login و احراز هویت آن روی پلتفرم Spring Boot نوشته شده باشد و بخش پردازش دیتا برای یک الگوریتم هوش مصنوعی آن روی Flask با زبان برنامه نویسی Python با استفاده از Tensorflow نوشته شده باشد و این بخش ها میتوانند با ایجاد API روی یک واسط و یا ایجاد خط لوله برای ارسال پیام، با یکدیگر در ارتباط باشند. در چنین سیستمی میتوان تیم هوش مصنوعی را از تیم امنیت به صورت جداگانه مدیریت کرد.
پیشنهاد شگفت انگیز کدفرند، دسترسی به تمامی دوره های آموزشی کدفرند تنها با ۹۹ هزار تومان
میکرو سرویس چیست؟
میکرو سرویس های در واقع نوعی از پیاده سازی در معماری SOA میباشند. در این نوع پیاده سازی اجزاء مختلف یک نرم افزار به صورت جداگانه و در بسترهای مختلف (البته در صورت نیاز) میتوانند پیاده سازی شوند و با استفاد از پروتکل HTTP و از طریق وب سرویس ها با یکدیگر در ارتباط باشند. در مایکرو سرویس ها، اجزاء نرم افزار به اصطلاح به صورت Loosely Coupled یا با ارتباط ضعیف پیاده سازی میشوند. روش مخالف روش مایکرو سرویس روش Monolithic Architecture یا پیاده سازی به صورت یک واحد کلی است که تمامی بخش های نرم افزار روی یک پلتفرم و به صورت کاملا وابسته به هم پیاده سازی شده اند. در واقع اجزاء میتوانند با یکدیگر در مواقع مورد نیاز از طریق شبکه ارتباط برقرار کنند و نیاز خود را از طریق سرویس مورد نظر رفع کنند.
در روش مایکروسرویس، هر بخش نرم افزار میتواند به صورت جداگانه تحلیل و پیاده سازی و تست و نگه داری شود که یک مزیت بزرگ محسوب میشود ولی از طرفی مدیریت ارتباطات اجزاء و ایجاد یک معماری برای یکپارچه سازی همه بخش ها در قالب یک پروژه, میتواند تبدیل به یک چالش شود و یکی از مشکلات اصلی در طراحی چنین سیستم هایی به حساب می آید.
پیشنهاد شگفت انگیز کدفرند، دسترسی به تمامی دوره های آموزشی کدفرند تنها با ۹۹ هزار تومان
مزیت های اصلی پیاده سازی مایکرو سرویس ها :
- ظرافت (Agility) : هر بخشی میتواند صاحب وب سرویس خود باشد و روی آن تمرکز کند.
- انعطاف در توسعه.
- تحویل ساده و بهینه تر پروژه.
- آزادی استفاده از فن آوری های مختلف.
- کدها و اجزاء قابل استفاده به صورت مجدد.
- مانایی سیستم.
نکته : در میکروسریس ها فقط یک برنامه کلاینت نیست که از سرویس های مختلف استفاده میکند، بلکه خود اجزاء نیز با یکدیگر در ارتباط هستند.