tg-me.com/learning_with_m/159
Last Update:
شاید بد نباشه تا دفعه بعد که خواستید در مورد معماری و ساختار یه پروژه تصمیم بگیرید، یه بار پیشینهی پیدایش مایکروسرویس رو مرور کنین تا از تناسب «نیاز» و «راهکار»ی که مدنظر دارید مطمئن باشید.
نمیشه دقیق و قاطع گفت «اولین» بار کی مفهوم مایکروسرویس رو پیاده کرده. مفهوم مایکروسرویس از تکامل معماریهای قبلتر از خودش، خصوصا به عنوان یک پاسخ به محدودیتهای سیستمهای یکپارچه، و پیچیدگی معماری سرویسگرا (SOA) شکل گرفت. حالا دو چیز رو باید توضیح داد، یک شیوههای امروزیتر پیادهسازی مایکروسرویس، و یکی مفهوم و معماریاش. برای پیادهسازی مدرن، نتفلیکس رو میشه به عنوان یکی از اولین و تأثیرگذارترین پذیرندگان رویکرد میکروسرویس توی مقیاس بزرگ شناخت. نتفلیکس مهاجرت خودش از معماری یکپارچه به مایکروسرویسها رو حدود سال ۲۰۰۹ شروع کرد، خیلی قبل از اینکه اصطلاح "مایکروسرویس" به طور رسمی سال ۲۰۱۱ مطرح بشه. تا سال ۲۰۱۱، نتفلیکس طراحی مجدد بخش قابل توجهی از سیستمهاش به مایکروسرویسها رو تکمیل کرده بود و از AWS استفاده میکرد، و خیلی از الگوهایی که امروز به عنوان استاندارد یا best practice شناخته میشن رو پیاده کرده بود.
ولی از نظر مفهومی، آمازون یکی از پذیرندگان اولیه و کلیدی است. یعنی حدود سال ۲۰۰۱، آمازون (در اون زمان تحت هدایت جف بزوس) شروع میکنه به تجزیه سیستمهای یکپارچه، بزرگ و مستحکمش به سرویسهای کوچکتر و مستقل تا بتونه مشکلات مقیاسپذیری و استقرار رو بهبود بده. این انتقال، زمینه رو برای اونچه سالها بعد، به عنوان معماری مایکروسرویس میشناسیم، فراهم کرد.
پذیرندگان بعدی این معماری، از eBay و Spotify و... همه یک سری دغدغه مشترک داشتن، یعنی مقیاسپذیری، پیچیدگی و وسعت سیستم، و استقرار، اونم با تیمهای بزرگ.
بیایم نگاه بندازیم به روایات!
جناب Fred George یکی از پیشگامان معماری مایکروسرویس میگه هر مایکروسرویس باید به قدری ساده و کوچک باشه که توی ذهن یک توسعهدهنده جا بشه:
"small enough and simple enough that a single developer can understand the whole thing"
بعدتر همین رو مارتین فولر هم به نحوی تکرار میکنه.
حالا سوال اینه که اگر تیم توسعه و تعداد سرویسها بزرگ نیستند، آیا مقیاسپذیری مورد نیازمون به حدی رسیده که scale-up پاسخگو نباشه و بریم سراغ شکست و توزیع سرویسها؟ آیا زیرساخت لازم رو از پردازش ابری تا DevOps تا مونیتورینگ/observabilty و... داریم؟ آیا ظرفیت مستندسازی API، فرایند، کاتالوگ دادهها و فرایندها و... رو داریم؟
تجربیات مستند زیادی وجود داره که استارتاپها و تیمهای کوچیک زیادی «زودتر از موعد» به سراغ مایکروسرویس رفتن و از عهدهی سربارش بر نیومدن... یادمون نره، معماری باید در خدمت مسائل ما باشن، نه اینکه ما در خدمت معماری دربیایم.
توی مباحث DDD به تفصیل خواهم گفت که معماری سازمانی ما هم حتی باید با شیوه تحلیل نیازمندیها و شیوه ترجمهی اونها به راهکارهای نرمافزاری سازگار باشه.
مایکروسرویس فقط تفیکیک کدها به چند پوشه و وصل کردنشون با API و دپلوی کردنشون تحت پروسههای مجزا نیست! و ای بسا میتونه آغازی بشه بر مصیبتهای آشکار فنی و آسیبهای پرشمار پنهان، منجمله نپرداختن به ریشهی کاستیها، یا افتادن به تلهی مرزبندی اشتباه سرویسها از هم.
لذا مایکروسرویس، در زمان مناسبش و با فراهم کرن پیشنیازهاش، و علیالخصوص وقتی که در خدمت حلکردن مسائل ما باشه همون قدر خوب و مفیده که وقتی زودهنگام یا بدون پیشنیازهاش میریم سراغش، مضر!