میکرو سرویس یک معماری نرمافزاری میباشد که یک نرمافزار را به صورت مجموعهای از سرویسهای کوچکتر که حول یک مدل تجاری گرد هم آورده شدهاند، تقسیم میکند. در صورتی که میخواهید با این معماری بهتر آشنا شوید میتوانید مقاله “میکرو سرویسها: از معماری تا پیادهسازی” ارائه شده در بلاگ همین سایت را مطالعه نمایید.
شکل زیر یک نمونه نرمافزار تجاری خرید آنلاین را نشان میدهد. در نرمافزارهای سنتی رسم به این صورت بود که تمامی قسمتها و ساختارهای نرمافزار در قالب یک فرمت برنامهنویسی و عموما یک زبان برنامهنویسی به صورت یکپارچه توسعه داده میشدند و عموما همگی به یک پایگاه داده متصل بودند. شکل زیر مدل پیادهسازی شده با استفاده از معماری یکپارچه را نشان میدهد.
به منظور جلوگیری از چالشهایی که بر اثر پیچیدگی در توسعه این دسته نرمافزارهای یکپارچه (که از قوانین و ساختارهای کدنویسی مشترکی برای تمام بخشهای آن استفاده میشود) وجود دارد، بسیاری از شرکتهای بزرگ معماری نرمافزاری خود را به سمت میکرو سرویس تغییر دادهاند. شکل زیر نمای معماری نرمافزار بالا را در قالب میکرو سرویس نشان میدهد.
همانطور که در تصویر نیز قابل مشاهده است تمامی قابلیتهای مورد نظر نرمافزار به صورت میکرو سرویسهای کوچک و مستقل پیادهسازی میشوند. برای مثال بالا میتوان به سرویسهای جستجو، توصیهگر، سرویس مشتریها و … اشاره کرد. نکته جالب در این معماری توسعهپذیری و استقلال سرویسها است که هر کدام از بخشها (به عبارتی سرویسهای موجود) میتوانند ساختار برنامهنویسی، زبانهای برنامهنویسی خاص خود و حتی دیتابیس مجزا و به طور کل سیاستهای معماری خود را داشته باشند.
امروز شرکتهای خیلی بزرگی از این معماری استفاده میکنند که در شکل زیر لیست برخی از این نرمافزارها ارائه شده است.
Netflix، پیشگام فوقِموفق در میکرو سرویس
در اوایل مطرح شدن این معماری، شرکت بزرگ سرگرمی Netflix از این معماری استقبال کرد و یواش یواش از معماری سنتی یکپارچه به سمت معماری میکرو سرویس مبتنی بر ابر در دهه گذشته حرکت کرد. همین امر سبب شد تا نتفیلیکس بتواند سرویسهای متعددی را برای مشتریهای خود به سرعت و در مقیاس و انعطافپذیری بالا عرضه کند.
پیادهسازی نتفیلیکس از این معماری به قدری موفقیتآمیز بود که بسیاری از ابزارهایی که در مورد نیاز این معماری هستند و پیادهسازی کرده بودند را به صورت متنباز به اشتراک گذاشتند. امروزه میتوان گفت که نتفیلیکس یکی از پیشگامان خیلی موفق در پیادهسازی این معماری نرمافزار هستند به طوری که مدل پیادهسازی آنها مورد مطالعه بسیاری از شرکتهای بزرگ در نقاط مختلف جهان قرار گرفته است.
Uber دیگر مثال موفق میکرو سرویسها
مشابه بسیاری استارتآپهای دیگر، این شرکت بزرگ کار خود را از معماری یکپارچه برای انجام تنها ثبتدرخواستها در یک شهر آغاز کرد. که در آن زمان داشتن یک ساختار کد یکپارچه به نظر راهحل موفقی در آن لحظه به نظر میرسید و بسیاری از مشکلات اصلی تجاری این شرکت را برآورده میکرد.
به هر حال با رشد این استارتآپ به صورت جهانی این شرکت با مشکلات عدیدهای برای توسعه سرویسهای خود، شامل مقیاسپذیری (scalability) و یکپارچهسازی مداوم (continuous integration) سرویسها روبرو شد.

شکل بالا معماری اولیه Uber را نشان میدهد که دارای مولفههای زیر بوده است:
- یک Rest API که از طریق آن مسافر و راننده به یکدیگر متصل میشدند.
- سه بخش که هر کدام دارای Rest APIهای خاص خود نیز بودهاند برای انجام عملیات صورتحسابها، پرداختها، ارسال ایمیل و پیامها زمانی که شخصی یک تاکسی را درخواست میکند.
- یک دیتابیس MySQL برای ذخیرهسازی تمامی اطلاعات
همانطور که مشاهده میکنید تمامی قابلیتها مثل مدیریت مسافران، صورتحسابها، قابلیتهای پیامرسانی و نوتیفیکیشن، پرداختها، مدیریت سفرها و رانندهها همگی با استفاده از یک فریمورک ایجاد شدهاند.
و اما مشکل!
با گسترش کار Uber به صورت جهانی مشکلات عدیدهای برای این شرکت مطرح شد. که در ادامه برخی از مشکلات مطرح شده است:
- به منظور اضافه کردن کوچکترین قابلیت به سیستم، تمامی قابلیتهای موجود باید بارها و بارها ایجاد، استقرار و تست میشدند.
- برطرف کردن باگها به شدت مشکل شده بود. چرا که باید کد بارها و بارها تغییر میکرد. چرا که همه چیز به هم وابسته بودند!
- توسعه قابلیتها به صورت پیوسته و معرفی قابلیتهای جدید به سیستم کار دشواری بود و مدیریت همزمان آنها سختتر شده بود.
و اما راهحل Uber
برای بر طرف کردن مشکلاتی از این دسته، این شرکت معماری خود را مطابق با بسیاری شرکتهای بزرگ دیگر مثل Amazon، Netflix، Twitter و بسیاری شرکتهای دیگر تغییر داد. به همین دلیل تصمیم بر این گرفته شد تا معماری نرمافزاری یکپارچه موجود به ساختارهای کوچک و مستقل متعددی تقسیم شود تا یک معماری میکرو سرویس شکل بگیرد.
شکل زیر همان معماری یکپارچه Uber را در قالب معماری میکرو سرویس نشان میدهد:

که این تغییرات به شرح زیر هستند:
- بزرگترین تغییر چشم گیر در این معماری معرفی API Gateway است که از طریق آن تمامی مسافران و رانندهها میتوانند با یکدیگر در ارتباط باشند. از طریق API Gateway تمامی مولفههای داخلی مثل سرویس مدیریت کاربران، صورتحساب و غیره به یکدیگر متصل هستند ولی نکته جالب این است که از سمت بیرون یعنی مسافرها و رانندهها فقط API Gateway قابل مشاهده است.
- هر کدام از واحدها (سرویسها) مستقل و دارای قابلیتها و معماری کد مجزا هستند.
- به عنوان مثال در صورتی که نیاز باشد تا هر تغییری در سرویس صورتحسابها داده شود، تنها نیاز است تا این سرویس توسعه و دوباره استقرار داده شود.
- هر سرویس به صورت مجزا قابل مقیاسپذیری است و وابستگی بین سرویسها از بین رفته است.
- به عنوان مثال، ما میدانیم که تعداد افرادی که به دنبال ماشینها میگردند بیشتر از تعداد افرادی است که یک تاکسی را درخواست کرده و هزینه آن را پرداخت نمودهاند. به همین دلیل این نکته به ما کمک میکند تا توجه کنیم که در سرویس مشتریها (مسافران) نیاز است تا پردازندهها و سرویس قویتر در نظر گرفته شود در مقایسه با سرویس پرداختها.
که با استفاده از این راهکار میکرو سرویس امروزه Uber یکی از غولهای نرمافزاری و شرکتهای محبوب میباشد و توانسته است راه خود را در مسیر توسعه و مشتریمداری ادامه دهد.