اگر در سالهای گذشته قصد راهاندازی یک پروژه نرمافزاری را داشتید، برای انتخاب معماری کار سختی در پیش نداشتید چون فقط یک گزینه به نام معماری مونولیتیک وجود داشت که برای تمامی پروژهها از آن استفاده میکردیم.
البته هنوز هم از معماری مونولیتیک استفاده میشود و در بسیاری از پروژهها بهترین انتخاب برای ما میتواند همین معماری مونولیتیک باشد.
اما امروزه نیاز نرمافزارها تغییر کرده. تعداد کاربرانی که از این وب اپلیکیشن استفاده میکنند نسبت به 20 سال پیش میلیونها برابر شده است.
پروژههای بزرگی مثل فیسبوک و آمازون و... داریم که روزانه به چندین میلیارد کاربر خدمات ارائه میکنند و همین نیازهای جدید باعث شد معماریهای جدیدی به وجود بیایند که جایگزین معماری مونولیتیک شوند.
معماریهای مثل معماری سرویسگرا SOA و معماری میکروسرویس (Microservice) .
برای آشنایی با معماری میکروسرویس و همچنین تفاوت آن با معماری مونولیتیک حتما دوره رایگان آموزش میکروسرویس رو در سایت باگتو ببینید.
شاید با بررسیها که از پروژه خود انجام دادهاید به این نتیجه رسیده باشید که معماری مونولیتیک برای پروژه شما مناسب نمیباشد، و تصمیم گرفتهاید از یک معماری مدرن که جوابگوی نیازهای شما باشد استفاده کنید.
با بررسیهای که در اینترنت انجام دادهاید به این نتیجه میرسید که دو معماری میکروسرویس و سرویسگرا SOA میتواند نیازهای شما را برطرف کند، و حالا باید بین این دو بتوانید یک گزینه را انتخاب کنید.
در این مقاله تفاوتهای معماری میکروسرویس و معماری سرویسگرا SOA را بررسی میکنیم و به شما کمک میکنیم به درک درستی از تفاوتهای معماری میکروسرویس و soa برسید که بتوانید انتخاب مناسبتری برای معماری پروژههای خود داشته باشید.
Soa یا سرویسگرا چیست؟
معماری سرویسگرا یا همان SOA برای رفع مشکلات معماری مونولیتیک ایجاد شد و در این معماری یک پروژه بزرگ یکپارچه که از معماری مونولیتیک استفاده میکند را به ماژولهای مجزایی تقسیم میکنیم که هر ماژول خودش یک پروژه مونولیتیک کوچکتر است.
این ماژولها هرکدام خدمات خاصی را ارائه میکنند که بقیه ماژولها میتوانند از این خدمات استفاده کنند.
میکروسرویس چیست؟
معماری میکروسرویس بعد از ارائه معماری soa به وجود آمد و مزایایی بیشتری نسبت به معماری soa دارد. میتوانیم بگوییم که معماری میکروسرویس تکاملیافته معماری soa میباشد که در این معماری ما سرویسهای بیشتری داریم و خدمات خود را بسیار کوچکتر از معماری soa طراحی میکنیم که هرکدام از این سرویسها بهصورت کاملاً مستقل از هم با دیتابیس اختصاصی خود توسعه داده میشوند.
معماری میکروسرویس میتواند راه کارهای بهتری برای Scale شدن برنامه ارائه بدهد. در مقاله میکروسرویس چیست؟ میتوانید اطلاعات بیشتری از معماری میکروسرویس مطالعه نمایید.
تفاوت میکروسرویس و soa
معماری میکروسرویس و soa شباهتهای زیادی با هم دارند. در هر دوی این معماریها پروژه یکپارچه را تقسیم میکنیم به بخشهای کوچکتری که این بخشهای جداگانه خدماتی که به دیگر بخشها ارائه میکنند.
در هر دوی این معماریها میتوانیم از کانتینرها و فضای ابری استفاده نماییم که همین باعث میشود با راهکارهای مدرنتر بتوانیم Scale برنامه را بهخوبی انجام دهیم و به کاربران بیشتری بدون افت کیفیت خدمات ارائه کنیم.
با این که این دو معماری شباهتهای زیادی با هم دارند اما تفاوتهای زیادی هم دارند که دانستن این تفاوتها به شما کمک میکند انتخاب بهتری داشته باشید
تفاوت در معماری Arciteture
در معماری میکروسرویس سرویسهای که توسعه داده میشوند بر خدمات واحد تمرکز میکنند و این یعنی که در میکروسرویس سرویسهای ما بسیار کوچکتر هستند و بهصورت مستقل کار میکنند و این یعنی باید دیتابیس اختصاصی خود را هم داشته باشند.
در سرویسهای معماری میکروسرویس به دلیل کوچک بودنشان خدمات کمتری هم ارائه میدهند. پس در نتیجه ما در معماری میکروسرویس سرویسهای بسیار بیشتری داریم، بهعنوانمثال در یک پروژه فروشگاهی میتوانیم یک سرویس برای نمایش پرفروشترین محصولات داشته باشیم و یک سرویس برای نمایش نظرات هر محصول و ...
اما در معماری soa سرویسهای ما بزرگتر هستند که میتوانند مستقل از هم نباشند بهعنوانمثال میتوانیم یک سرویس برای کل حسابداری داشته باشیم، و یا یک سرویس برای کل انبارداری.
مرزبندی سرویسها
مرزبندی و یا تقسیمبندی سرویسها در این دو معماری با هم متفاوت است. در معماری soa معمولاً سرویسهای بزرگی داریم، سرویسهای که ساید خودشان در حد یک برنامه مونولیتیک بزرگ باشند.
اما در معماری میکروسرویس مرزبندی و یا همان تقسیمبندی که برای سرویسها انجام میدهیم بسیار کوچکترند.
سرویسهای معماری میکروسرویس اینقدر باید کوچک باشند که در دوهفته تیم توسعه آن بتواند کامل آن را بازنویسی کند.
نحوه ذخیرهسازی دادهها
در معماری میکروسرویس هر سرویس دیتابیس اختصاصی خودش را دارد و تمام دیتاهای مورد نیازش را در دیتابیس اختصاصی خود ذخیره میکند.
بهعنوانمثال در سرویسی که برای سبد خرید ایجاد میکنیم نیاز به اطلاعات محصول هم داریم، در این معماری باید تمامی اطلاعات هر محصولی که به سبد خرید اضافه میشود را در دیتابیس اختصاصی سرویس سبد خرید ذخیره کنیم که هر بار برای استفاده از آن دادهها نیاز نباشد به سرویس محصولات دسترسی داشته باشیم.
این نوع نگرش باعث میشود در معماری میکروسرویس هر سرویس دیتاهای اختصاصی خاص خود را داشته باشد.
اما در معماری soa به این صورت نیست و سرویسها میتوانند دیتاهای اشتراکی بیس سرویسهای مختلف را استفاده نمایند که خود این نیز مزایای برای ما میتواند داشته باشد.
حاکمیت در سرویسهای مختلف
در معماری SOA از دیتاهای اشتراکی استفاده میکنیم و همین باعث میشود با حاکمیت و یا قوانینی که برای نحوه ایجاد و استفاده از دادهها وضع میکنیم برای تمامی سرویسها یکسان باشد چون سرویسهای مختلف بهصورت اشتراکی از دیتاهای دیگر سرویسها میتوانند استفاده کنند.
اما در مقابل، معماری میکروسرویس به این صورت نیست. چرا؟ چون هر سرویس کاملاً مستقل از سرویسهای دیگر میباشد و میتوانیم برای هر سرویس قوانین اختصاصی تعریف کنیم.
اندازه دامنه
در معماری میکروسرویس اندازه سرویسها کوچکتر میباشد و در نتیجه دامنه فعالیت نیز بسیار کوچکتر میباشد، و ازاینرو برای توسعه دهندگان کار بر روی این سرویس لذتبخشتر میباشد. زیرا تیم توسعه هر سرویس به دلیل اندازه کوچک دامنه بهسرعت تسلط کافی بر دامنه و دانش لازم بیزینس را به دست میاورند و خیلی بهتر میتوانند سرویس را توسعه بدهند.
اما در معماری soa اندازه و دامنه سرویسها بسیار بزرگتر است و هرچه این اندازه بزرگتر باشد پیچیدگیهای بیشتر در توسعه برای ما ایجاد میکند.
ارتباط بین سرویسها
در معماری soa ارتباط بین سرویس به طور سنتی توسط ESB انجام میشود و با استفاده از این روش سرویسها میتوانند با هم صحبت کنند که خود این یکی از دلایل کند بودن ارتباط در معماری سرویسگرا میباشد.
معماری میکروسرویس از روشهای سادهتری مانند APIها استفاده میکند که باعث افزایش سرعت در ارتباطها میشود.
Deployment
Deployment یا استقرار نرمافزار در معماری میکروسرویس نسبت به معماری soa سادهتر انجام میشود.
در معماری میکروسرویس سرویسها کوچک و کاملاً مستقل از هم هستند و ما بهراحتی میتوانیم بدون آنکه مشکلی برای بقیه سرویسها به وجود بیایید نسخه جدید یک سرویس را Deploy کنیم و که دیگر سرویسها بتوانند از آن استفاده کنند.
اما در معماری SOA معمولاً Deployment پیچیده است چون سرویسها بزرگ هستند و تقریباً میتوانیم بگوییم همان مشکلات Deployment معماری مونولیتیک را در معماری SOA هم داریم.
دسترسی به سرویسها
معماری میکروسرویس و معماری سرویسگرا از پروتکلهای مختلفی برای دسترسی به دیگر سرویسها استفاده میکنند.
معمولاً در معماری سرویسگرا پروتکل اصلی که مورداستفاده قرار می گرد پروتکل (SOAP) میباشد و البته از پروتکلهای مانند (AMQP) هم برای ارتباط استفاده میشود.
اما در معماری میکروسرویس از پروتکل REST و یا از GRPC برای ارتباطهای Sync استفاده میشود و از پروتکلهای AMQP و دیگر پروتکلها هم برای ارتباطهای Async استفاده میشود.
از معماری میکروسرویس استفاده کنیم یا معماری سرویسگرا SOA؟
هر دوی این معماریها رویکردهای برای جداسازی سرویسها از هم را ارائه میکنند و این سرویسها را میتوانیم در فضای ابری و در کانتینرها مستقر کنیم و همین باعث میشود بتوانیم از Auto Scale در این معماریها بهرهمند شویم.
این که ما از کدام معماری استفاده کنیم دقیقاً به نیاز آن پروژه بستگی دارد که برای هر پروژه میتواند این متفاوت باشد و باتوجهبه مواردی که در این مقاله بررسی کردیم میتوانید تصمیم بگیرید از کدام معماری در پروژه خود استفاده نمایید.
اگر قصد نیاز به اطلاعات بیشتری برای آشنایی با معماری میکروسرویس و معماری SOA دارید میتوانید دوره رایگان آموزش میکروسرویس باگتو را مشاهده نمایید.
در این دوره شما را با معماری میکروسرویس و چالشهای آن آشنا میکنیم و سپس برای حرفهای شدن در معماری میکروسرویس میتوانید دوره پیشرفته آموزش میکروسرویس باگتو را مشاهده نمایید که در این دوره یک پروژه فروشگاهی با معماری میکروسرویس را در Asp.Net Core ارائه میکنیم.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید