![]() |
نرمافزارهای یکپارچه بهگونهای طراحی میشوند که خودکفا هستند؛ به این معنا که مولفهها یا عملکردهای برنامه بهجای آنکه از الگوی اتصال آزاد مانند برنامههای نرمافزاری ماژولار پیروی کنند، بهشکل یکپارچه به یکدیگر متصل شدهاند. در معماری یکپارچه، تمامی مولفهها باید برای اجرای کد یا کامپایل و اجرای نرمافزار از قبل نوشته شده و آماده باشند. برنامههای یکپارچه تکلایه هستند؛ به این معنی که چند مولفه در یک برنامه با یکدیگر ترکیب میشوند و پایگاههای کد بزرگی دارند. پایگاههایی که مدیریت آنها در طول زمان پیچیده و سخت است. شکل ۱ مراحلی را که کامپایلر باید پشت سر بگذارد تا یک برنامه یکپارچه کامپایل شده و قابل استفاده باشد نشان میدهد. معماری یکپارچه رویکرد سنتی توسعه و استقرار برنامهها در محیطهای تولیدی یا فضای وب است. بهطور کلی، برنامههای وب از سه مولفه اصلی زیر تشکیل شدهاند:
این سه مولفه در تعامل کامل با یکدیگر هستند، از اینرو، مبتنی بر طراحی یکپارچه هستند؛ به این معنا که یک برنامه وبمحور بهشکل یک ماهیت کل یا همان یکپارچه و مستقل کار میکند و سه بخش مذکور از یکدیگر جدا نیستند.
شکل 1
برای درک معماری یکپارچه، اجازه دهید به ذکر مثال برنامه بانکی بپردازیم. یک برنامه وبمحور بانکی را تصور کنید که امکان باز کردن حساب و انتقال آنلاین پول از یک حساب به حسابهای دیگر را به مشتریان میدهد. این برنامه برای ارائه چنین خدماتی متکی به مولفههای مختلف مرتبط با یکدیگر است. از مولفههای مهم در این زمینه باید به رابط کاربری مشتری، سرویسهای احراز هویت کاربر، دانلود صورتحساب، انتقال پول، رمزگذاری و غیره اشاره کرد. در معماری یکپارچه، بدون توجه به اینکه مشتری چگونه از یک برنامه کاربردی استفاده میکند، بهعنوان یک برنامه واحد ساخته و اجرا میشود. بنابراین، چه کاربران از دسکتاپ یا از یک دستگاه تلفن همراه به برنامه دسترسی داشته باشند، برنامه در قالب یک مفهوم یکپارچه در دسترس کاربر قرار میگیرد. به بیان دقیقتر، همه مولفهها و ماژولها بهشکل مستقیم با یکدیگر در ارتباط هستند. همچنین، از یک سیستم مدیریت پایگاه داده رابطهای بهعنوان یک منبع داده واحد برای ذخیرهسازی اطلاعات استفاده میکند. اگر هر یک از مولفههای این برنامه نیازمند تغییری باشند، کل ساختار برنامه و مولفهها باید بازبینی شوند تا اطمینان حاصل شود برنامه بدون مشکل کار میکند.
همانگونه که اشاره کردیم، معماری یکپارچه، رویکرد سنتی توسعه و استقرار برنامهها در محیطهای تولیدی یا فضای وب است. برنامههای مبتنی بر معماری یکپارچه نیز مولفههای مختلفی دارند که متصل به یکدیگر هستند، اما مستقل از یکدیگر نیستند و همگی در قالب یک ساختار کلی قادر به اجرا هستند. بهطور معمول، برنامههای کاربردی، مولفهها و ساختار مشابهی دارند که شاهد حضور آنها در برنامههای مختلف هستند. از مولفههای مهم در این زمینه به موارد زیر باید اشاره کرد:
علاوه بر این، برخی از برنامههای کاربردی ممکن است ماژولهایی برای نظارت بر عملکرد برنامه و راهکارهایی برای برقراری ارتباط کاربران با تیم توسعهدهنده ارائه دهند. این مولفهها ارتباط کاملی با یکدیگر دارند و بر مبنای معماری یکپارچه توسعه پیدا میکنند.
معماری یکپارچه مزایای قابل توجهی ارائه میکند که باعث شده هنوز برخی برنامههای کاربردی بر مبنای این پارادایم توسعه پیدا کنند. بهعنوان مثال، در برخی موارد، برنامههای یکپارچه توان عملیاتی بهتری نسبت به برنامههای ماژولار ارائه میدهند. همچنین، روند آزمایش و اشکالزدایی آنها سادهتر است، زیرا توسعهدهندگان با عناصر، متغیرها و سناریوهای آزمایشی کمتری روبهرو هستند.
در ابتدای چرخه عمر توسعه نرمافزار، معماری یکپارچه سهولت در کدنویسی را ارائه میدهد، زیرا روند توسعه در ابتدای راه، پیچیدگی خاصی ندارد. بهطور مثال، توسعهدهندگان میتوانند یک پایگاه کد واحد برای ورود به سیستم، مدیریت تنظیمات، نظارت بر عملکرد برنامه و موارد مشابه تعریف کنند. همچنین، استقرار میتواند با بستهبندی و کپی برنامه در یک سرور انجام شود. معماری یکپارچه برای برنامههای کاربردی ساده که قرار نیست وظایف پیچیدهای را مدیریت کنند، مناسب است. اما برای برنامههای پیچیدهتر که اعمال تغییرات در کدها اجتنابناپذیر است یا الزامات تجاری باعث میشوند تا توسعهدهندگان بهفکر مقیاسپذیری برنامه باشند، مناسب نیست. از دیگر مزایای معماری یکپارچه به موارد زیر باید اشاره کرد:
بهطور کلی، معماریهای یکپارچه یکسری مشکلات ذاتی دارند که باعث میشوند فرآیند توسعه نرمافزارهای بزرگ و استقرار آنها با تاخیر همراه شود. این مشکلات زمانی که پیچیدگی محصول افزایش مییابد یا تیم توسعه بزرگ میشود، بغرنجتر میشوند.
درک درست کدهای برنامه یکپارچه ممکن است دشوار باشد، زیرا برنامهنویسان ممکن است با حجم زیادی از کدها روبهرو شوند که درک ماهیت آنها زمانبر خواهد بود. همین مسئله روند اعمال تغییر در کدها با هدف پاسخگویی به الزامات تجاری یا فنی برای توسعهدهندگان جدید را دشوار میکند. همانگونه که نیازمندیها تکامل پیدا میکنند یا پیچیدهتر میشوند، اعمال صحیح تغییرات بدون مختل کردن عملکرد برنامه یا کاهش کیفیت آن کاری سختی است.
پس از هر بهروزرسانی، توسعهدهندگان باید کدها را کامپایل کنند. به بیان دقیقتر، بهجای آنکه بخشی که بهروزشده را کامپایل کنند، مجبور هستند برنامه را بهطور کامل کامپایل کرده و مستقر کنند. در نتیجه، فرآیند استقرار مداوم یا منظم کار سختی خواهد بود که بر چابکی برنامه و تیم تاثیر منفی میگذارد.
اندازه یک برنامه کاربردی مبتنی بر معماری یکپارچه در گذر زمان زیاد میشود که زمان خواندن آن از روی دیسک و بارگذاری در حافظه را زیاد میکند. در برخی موارد، بخشهای مختلف برنامه ممکن است بهشکل همزمان به منابع سیستمی نیاز داشته باشند که دستیابی به منابع مورد نیاز را دشوار میکند.
علاوه بر مقیاسپذیری محدود، قابلیت اطمینان یکی دیگر از نگرانیهای پیرامون نرمافزارهای یکپارچه است. یک خطا در هر یک از مولفهها ممکن است عملکرد برنامه را مختل کند. با در نظر گرفتن مثال برنامه بانکی، فرض کنید یک نشت حافظه در ماژول مجوز کاربر پیدا شود. این باگ میتواند کل برنامه را با مشکل روبهرو کرده و آنرا برای همه کاربران از دسترس خارج کند.
بهدلیل اندازه و پیچیدگی، برنامههای کاربردی یکپارچه ممکن است بهسرعت با فناوریهای جدید سازگار نشوند. یک تغییر در چارچوب یا زبان برنامهنویسی میتواند بر عملکرد کل برنامه تاثیر بگذارد؛ همین مسئله باعث میشود تا فرآیند پذیرش فناوریهای جدید، زمانبر و پرهزینه باشد. شرکتهای کوچک ممکن است بودجه یا کارکنانی برای بهروزرسانی برنامه نداشته باشند، بنابراین ممکن است در نهایت وضعیت موجود را حفظ کنند و بهطور بالقوه نتوانند از یک زبان یا چارچوب جدید استفاده کنند.
این معایب باعث شدهاند تا بسیاری از سازمانها از معماریهای یکپارچه دور شوند و به سراغ معماری میکروسرویس (MSA) بروند، زیرا مزایای درخشانی ارائه میدهد. شکل ۲ تفاوت این دو پارادایم را نشان میدهد.
شکل 2
معماری میکروسرویس، در نقطه مقابل معماری یکپارچه قرار دارد که برنامه را به عنوان یک ماهیت کل در نظر میگیرد. در معماری میکروسرویس، برنامه به بخشهای مختلف و کوچکی تقسیم میشود. در معماری مذکور، هر یک از عملکردهای مهم برنامه بهعنوان یک سرویس تعریف میشوند. از اینرو، هر کدام منطق و پایگاه داده خودشان را دارند و کار خاصی را انجام میدهند. در معماری فوق، هر زمان صحبت از بخشهای کوچکتر به میان میآید، اشاره ما به ماژولهای مستقلی است که فرآیند استقرار جداگانهای دارند و مستقل از یکدیگر اجرا میشوند، اما از طریق واسطهای برنامهنویسی کاربردی با یکدیگر در ارتباط هستند.
معماری میکروسرویس از برنامههای ماژولار پشتیبانی میکند که در آن هر ماژول منفرد در یک سیستم، مانند یک سرویس میتواند بهطور مستقل و بدون تاثیرگذاری بر دیگر بخشهای برنامه یا اعمال تغییرات پیشبینینشده در دیگر عناصر عمل کند.
برنامههای ماژولار در مقایسه با برنامههای یکپارچه با فرآیندهای توسعه تکرارپذیر رابطه خوبی دارند و با متدولوژیهای رایج برنامهنویسی مثل «چابک» سازگارتر هستند. همچنین، مقیاسپذیرتر هستند و بهدلیل مکانیزم ارتباطی خاصی که میان مولفههای مختلف در جریان است، امکان آزمایش جداگانه ماژولها را بهوجود میآورند. این ماژولها، کانالهای ارتباطی خاص خود را برای برقراری ارتباط با یکدیگر دارند، پایگاه داده خود را دارند و سرعت راهاندازی برنامه را افزایش میدهند.
یکی از ویژگیهای شاخص معماری میکروسرویس، مقیاسپذیری بالای آن است. بهطوری که میتوانیم هر یک از سرویسها را بهشکل جداگانه بهروزرسانی کرده و ارتقاء دهیم که صرفهجویی قابل ملاحظهای در منابع مالی بههمراه دارد. در معماری یکپارچه، مجبور هستیم هر زمان که تغییری اعمال میکنیم، تمامی برنامه و حتا بخشهایی را که دستنخورده هستند بازبینی کرده و کامپایل کنیم، اما در معماری میکروسرویس تنها بخشی را که تغییر کرده کامپایل میکنیم. شکل ۳ معماری فوق را نشان میدهد.
شکل 3
همانگونه که اشاره کردیم، معماری یکپارچه در قبول فناوریها و نوآوریهای جدید تا حد زیادی بسته عمل میکند، اما در معماری میکروسرویس اینگونه نیست، زیرا از فناوریها و ابزارهای مختلفی برای توسعه هر یک از ماژولها استفاده میکنیم که مشکل وابستگی به یک فناوری خاص را برطرف میکنند. همچنین، بهدلیل اینکه سرویسها از طریق واسطهای برنامهنویسی کاربردی با یکدیگر در ارتباط هستند، امکان استفاده از کتابخانهها و چارچوبهای مختلف در زمینه کدنویسی برنامههای وبمحور و دسکتاپی وجود دارد.
در نهایت برنامههای مبتنی بر معماری میکروسرویس آستانه تحمل خطای بالایی دارند، زیرا هر مولفه برنامه بهشکل مستقل عمل میکند و اگر با مشکلی روبهرو شود، عملکرد برنامه بهطور کامل مختل نمیشود.
توسعهدهندگان میتوانند از هر دو معماری در پروژههای نرمافزاری استفاده کنند، اما قبل از انتخاب هر یک از معماریهای فوق، بهتر است برخی ملاحظات را مورد توجه قرار دهید. معماری میکروسرویسها مبتنی بر ارائه سرویسهای کوچک و مستقلی است که توسعهدهندگان میتوانند آنها را بهطور مستقل بسازند، گسترش دهند و مقیاسبندی کنند. همین مسئله باعث شده تا برخی از طرفداران میکروسرویسها اعلام کنند دوران معماری یکپارچه به پایان رسیده است. با این حال، با وجود جذابیتهای زیادی که میکروسرویسها ارائه میدهند، سبک معماری یکپارچه هنوز هم مورد استفاده قرار میگیرد.
اگر برنامه شما آنقدر پیچیده نیست، یک استراتژی یکپارچه ممکن است گزینه مناسبی باشد. اگر برنامه بیشازاندازه بزرگ نیست و در نظر دارید در زمان کوتاهی آنرا ایجاد کنید، معماری یکپارچه گزینه مناسبی است. بهطور مثال، پیشنهاد میشود تیمهای استارتآپی از معماری یکپارچه برای توسعه برنامههای کاربردی استفاده کنند، زیرا امکان استفاده از آن بدون نیاز به دانش عمیق وجود دارد. همچنین، برخی اوقات یک برنامه کاربردی به اندازهای ساده است که نیازی به عملیات سنگین و پیچیده ندارد، از اینرو، نیازی نیست خود را درگیر دردسرهای معماری میکروسرویس کنید. همچنین، در نظر داشته باشید که ساخت برنامههای میکروسرویس به دانش فنی نیاز دارند و توسعه پروژه بر مبنای این معماری بدون داشتن تجربه کاری مخاطرهآمیز است. بنابراین، مادامی که برنامه شما پیچیده نیست و تا زمانی که دانش کافی برای مدیریت آنرا ندارید بهتر است از معماری میکروسرویس استفاده نکنید. ابزارهای زیادی مانند پروفایلرها، تحلیلگرهای کد ایستا و چارچوبهای آزمایشی وجود دارند که آزمایش و اشکالزدایی برنامههای میکروسرویس را آسانتر میکنند.
اگر تیم مهارتهای مناسبی نداشته باشد، کار با معماری میکروسرویسها به کابوس بزرگی تبدیل شود. اگر توسعهدهندگان یک تیم به پارادایم برنامهنویسی یکپارچه عادت دارند، مهاجرت به الگوی جدید زمانبر خواهد بود. اگر این تغییر از منظر تجاری مشکلی ایجاد نمیکند، بهتر است به توسعهدهندگان اجازه دهید روند یادگیری معماری جدید را آغاز کنند.
یک برنامه یکپارچه موانعی را برای مدیریت کدهای پایه در زمینه استقرار مداوم یا افزودن ویژگیهای جدید ایجاد میکند. یک برنامه یکپارچه میتواند تنها در یک بعد مقیاسبندی شود و با افزایش حجم تغییرات، مجبور به ساخت چند نسخه از برنامه هستید.
تصور کنید روی یک برنامه پیچیده با تیمی کار میکنید که در شهرهای مختلف زندگی میکنند. بهکارگیری معماری میکروسرویسها در این شرایط منطقیتر است، زیرا مقرونبهصرفهتر است و میتوانید برنامه را بهطور یکپارچه مدیریت و مقیاسبندی کنید. برخلاف برنامههای یکپارچه، برنامههای میکروسرویس، با پشته فناوری مرتبط نیستند یا حول محور آن نمیچرخند.
کلام آخر
قبل از تصمیمگیری نهایی در مورد معماری مدنظر، مزایای معماری یکپارچه را با مزایای میکروسرویسها مقایسه کنید. بهترین کار این است که از این قانون اصلی پیروی کنید: فقط زمانی به سراغ معماری میکروسرویس بروید که مطمئن هستید باید سیستمی بسازید که فرآیند ساخت، استقرار، مقیاسبندی و مدیریت آن به عنوان یک برنامه یکپارچه، کاملا پیچیده است و همه چیز باید ساده طراحی شوند.