
آیا میکروسرویس نسل جدید SOA هست؟ و آیا هنوز هم از SOA استفاده میشه؟
توی این مقاله میخایم تفاوت بین معماری های Monolithic و SOA و Microservice رو باهم بررسی میکنیم.
در پست قبلی در رابطه با میکروسرویس ها یه مقداری میکروسرویس آشنا شدیم و فهمیدیم به کمک ما میاد که معماری رو تجزیه و توزیع کنیم و مزایای بیشتری نسبت به معماری یکپارچه داره. حالا توی این مقاله میخایم معماری layered-based رو توضیح بدیم و ببینیم تفاوت SOA و Microservice چیه؟
قبل از اینکه بریم ببینیم تفاوت این دوتا چیه بهتره تفاوت های اساسی معماری monolithic و SOA و Microservice رو ببینیم.

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

سرویس های عملکرد(سرویس های تجاری) - Functional Services:
سرویس های سازمانی - Enterprise Services:
سرویس های برنامه - Application Services:
سرویس های زیربنایی - Infrastructure Services:
در مقابل میکروسرویس ها طبقه بندی محدود تری دارن، با توجه به شکلی که پایین میتونید ببینید فقط ۲ نوع سرویس توی این معماری وجود داره:

سرویس های عملکرد - Functional Services:
سرویس های سازمانی - Enterprise Services:

ریز دانگی - Service Granularity: هر سرویس در معماری MSA به طور کلی یک کار رو انجام میده ولی همین یه کار رو به بهترین شکل انجام میده. اما در SOA هر سرویس میتونه به اندازه یه پروژه کوچیک، متوسط یا بزرگ وسعت داشته باشه. درواقع سرویس هایی که توی SOA ایجاد میشن غالبا به در قالب یه محصول بزرگ یا به صورت زیرسیستم از یه سیستم بزرگ ارائه میشن.
اشتراک گذاری اجزاء - Component Sharing: یکی از اصول پایه معماری SOA اشتراک گذاری اجزای سیستمه، در واقع هدف اصلی سرویس های سازمانی به اشتراک گذاری اجزای سیستمه. معماری SOA این اشتراک گذاری رو تسهیل میکنه درحالی که MSA سعی داره با استفاده از مفهوم bounded-context این اشتراک گذاری را به حداقل برسونه.
مفهوم bounded-context یعنی اینکه هر جزء یا اجزای مرتبط رو با داده های مورد استفاده ش توی یه بسته بندی قرار بدیم جوری که دیگه هیچ وابستگی ای به سایر بخشها نداشته باشه. و چون SOA برای اینکه بتونه درخواست ها رو پاسخ بده به چندین سرویس متکی هست این باعث میشه از معماری MSA کند تر باشه.
استفاده از Middleware یا API Layer: الگوی معماری میکروسرویس از API Layer استفاده میکنه، ولی SOA در مقابل messaging-middleware رو داره. وجود messaging-middleware در SOA به ما یه سری قابلیت ها ارائه میده که توی MSA دیگه خبری ازشون نیست (قابلیت هایی مثل routing، meditation، message، message-enhancement، protocol-transformation و...) توی MSA یک واسط Api Layer داره که بین سرویس ها و service-consumer هاش میشینه.
سرویس های راه دور - remote services: معماری SOA براساس messaging هایی مثل AMQP و MSMQ کار میکنه و پروتکل اصلیش SOAP هستش. در مقابل MSA از پروتکل REST و simple-messaging هایی مثل JMS و MSMQ استفاده میکنه و اینکه پروتکل انتخاب شده باید بین سرویس ها مشابه باشه.
همکاری ناهمسان - Heterogeneous interoperability: معماری SOA مارو ترغیب میکنه که از چند پروتکل ناهمگون توی messaging-middlewareش استفاده کنیم. در مقابل MSA سعی میکنه با کم کردن تعداد راههای ارتباطی معماری ساده تری رو ارائه کنه. پس نتیجه میگیریم هرجا لازمه چنتا پروتکل ناهمسان داشته باشیم بهتره از SOA استفاده کنیم و در حالتی که یک پروتکل مشترک داریم MSA گزینه بهتریه.
درنهایت باید بگم که خیلی راحت نمیشه گفت کدوم معماری بهتر از اون یکیه. و این به شدت وابسته به هدف و شالوده برنامه ای هست که میخاید ایجاد کنید.
معماری SOA بیشتر مناسب کسب و کارهای پیچیده ای هست که نیازه برنامه های ناهمسان زیادی رو با هم ادغام کنیم؛ و اگر برنامه شما به اندازه کافی بزرگ نیست که نیاز به یک messaging-middleware داشته باشه بهتره سمت این معماری نرید.
از طرف دیگه MSA مناسب پروژه های web هست که میشه به اندازه کافی خورد بشه و هر قسمت جدای از بقیه کار بکنه، و این قابلیت رو به توسعه دهنده میده که بتونه اشراف بیشتری روی کنترل جداگانه هر سرویس داشته باشه.
در نهایت اول باید یه ۲ ۲ تا ۴ تا بکنید زیر و بم کسب و کارتون رو در بیارید ببینید کدوم معماری بیشتر به کارتون میاد.
ادامه دارد...