یکپارچه پیروز شد. اکثر تیم ها هنوز آن را قبول نکرده اند.

آیا واقعاً به میکروسرویسها نیاز دارید؟
یک تیم با حذف معماری میکروسرویس، تأخیر را از ۸۰۰ میلیثانیه به ۱۲ میلیثانیه کاهش داد؛ چرا که دادهها دیگر نیازی به گردش در شبکه نداشتند. هزینههای پنهانِ انتقال داده (Egress fees) که ارائهدهندگان ابری مانند AWS دریافت میکنند (تا ۴۰٪ صورتحساب)، و پیچیدگی عیبیابی شبکه، «مالیات واقعی» این معماری هستند.
مطالعه موردی Prime Video گواه است: معماری Serverless آنها در تنها ۵٪ مقیاس پیشبینی شده فرو ریخت، چرا که مدام فریمهای ویدیو را بین لامبدا و S3 جابجا میکرد. با بازگشت به монولیتِ ماژولار (Modular Monolith)، هزینه ۹۰٪ کاهش یافت و محدودیت مقیاس از بین رفت.
شاپیفای (Shopify) با یکپارچهای ۲.۸ میلیونی خط کد، ۳۲ میلیون درخواست در دقیقه و ۱۱ میلیون کوئری SQL در ثانیه (جمعه سیاه) را بدون شبکه توزیع شده مدیریت میکند. ابزارهایی مانند Packwerk مرزهای دامنه را در کد تضمین میکنند، نه در شبکه.
۳۷سیگنالز (Basecamp) با خروج از ابرو و خرید سرورهای اختصاصی، هزینه سالانه را از ۳.۲ میلیون دلار به ۳۶۰ هزار دلار کاهش و ۱۰ میلیون دلار در ۵ سال پسانداز کرد.
نتیجه: اکثر ما «نتفلیکس» نیستیم. ۹۵٪ پروژهها روی یک ماشین Platz میگیرند. از یکپارچه شروع کنید، مرزها را در کد (نه YAML) تعریف کنید و تنها وقتی سختافزار tek ماشین ناکافی است، به میکروسرویس فکر کنید.简单的設計، سریعترین راه به بازار است.
ماه گذشته، یک تیم میکروسرویس های خود را حذف کردند. تأخیر از 800 میلی ثانیه به 12 میلی ثانیه کاهش یافت.
هیچ غلط املایی وجود ندارد – به این معنی است که داده های شما برای صحبت با سرویس دیگری نیازی به انتقال در سراسر شبکه ندارند.
لایحه ای که هیچ کس به شما هشدار نداده است
معماری میکروسرویس ها به عنوان راه حلی برای همه مشکلات به تصویر کشیده شد. مقیاس پذیری بی حد و حصر، استقرار مجزا، و تیم هایی که با یکدیگر تداخل ندارند.
چیزی که آنها در واقع ارائه کردند، صورت حسابی برای خروج از پلت فرم بود.
هر زمان که سرویس A با سرویس B ارتباط برقرار می کند، هزینه انتقال داده از شما دریافت می شود. AWS برای انتقال داده بین منطقه ای 0.09 دلار به ازای هر گیگابایت صورتحساب می گیرد.
حقیقت دردناک همان چیزی است که DHH برجسته کرده است، که AWS اساسا آن را می پذیرد 40 درصد تخفیف روی بالا. این بدان معناست که از هر دلاری که به آنها می دهید، 40 سنت از شما می گیرند، بدون هیچ پشیمانی. 💸
آمازون به معنای واقعی کلمه این موضوع را ثابت کرد
آمازون آن را در آنجا قرار داد.
مطالعه موردی تیم تجزیه و تحلیل کیفیت ویدیوی Prime Video در مارس 2023 منتشر شد، اما در ماه مه 2023 ویروسی شد. معماری فوقالعاده بدون سرور آنها با استفاده از تمام توابع مرحله AWS و لامبدا هنگامی که به آنها رسیدند، به دیواری با مقیاس سخت برخورد کرد. 5% از بار پیش بینی شده آنها
می پرسی چرا؟ این به این دلیل است که معماری آنها به طور مداوم در حال خواندن و نوشتن فریم های ویدئویی برای S3، از طریق شبکه بود.
بنابراین، آنها کاری را انجام دادند که غیرممکن به نظر می رسید. آنها آن را به صورت یکپارچه متراکم کردند و اجازه دادند که داده ها به جای انتقال الکترونیکی در حافظه پردازش شوند.
نتیجه:
← هزینه های زیرساخت کاهش یافت 90%
← محدودیت مقیاس ناپدید شد
← معماری «ابتدایی» برنده شد
اگر ارائهدهنده ابری که استفاده میکنید شروع به اشتراکگذاری سندی در مورد نحوه خروج از پلتفرم خود کند، احتمالاً زمان خوبی برای تجدید نظر در برنامههای خود است.
اما مقیاس میکروسرویس ها!
آنها انجام می دهند. بگذارید در مورد Shopify به شما بگویم.
برنامه اصلی یکپارچه شامل 2.8 میلیون خط کد است و بیش از 500000 commit را دیده است. این برنامه 32 میلیون درخواست در دقیقه را پردازش می کند و 11 میلیون درخواست MySQL را در هر ثانیه در جمعه سیاه اجرا می کند.
من نمی توانم آن را باور کنم، این یکپارچه است. این یک شبکه توزیع شده متشکل از 47 سرویس نیست که توسط امید و YAML در کنار هم نگهداری می شوند.
آنها با استفاده از ابزاری به نام Packwerk که مرزهای دامنه را در پایگاه کد تضمین می کند، تمیزی را حفظ می کنند. چه کسی میدانست که میتوانید بدون ارسال هر فراخوانی از طریق شبکه، کد تمیز بنویسید.
برای بسیاری از ما، بحث مقیاس یک بهانه بود. واقعیت این است که شما نتفلیکس نیستید. پروژه جانبی شما نیازی به کشف سرویس ندارد.
هزینه واقعی سرعت شماست
در حالی که پول یک شکل آشکار مالیات است، عقل تیم شما پنهان است.
من اخیراً پست یک توسعه دهنده را خواندم که شکایت داشت که تیم آنها 80٪ از ظرفیت اسپرینت خود را برای مهاجرت 14 میکروسرویس خرج کرده است. و برای پیاده سازی ویژگی های جدید هزینه نشده است. صرف نوشتن YAML شد.
80 درصد از زمان مهندسی صرف پیکربندی و رفع اشکال می شود که چرا سرویس C نمی تواند با سرویس F صحبت کند.
این واقعیتی است که ما تمایل داریم از نمودار معماری کنار بگذاریم. معرفی یک مرز سرویس جدید به این معنی است که نقاط خرابی جدید، خط لوله استقرار جدید برای راهاندازی و گزارشهای جدید برای جستجو در هنگام عیبیابی در نیمهشب وجود خواهد داشت.
یک سرویس خوب طراحی شده می تواند اکثر بارهای کاری را به طور موثر مدیریت کند. معرفی نسخه توزیع شده تنها پیچیدگی و چالش های بالقوه را افزایش می دهد.
چرا ما به هر حال این کار را ادامه می دهیم
صادقانه بگویم، ما در حال انجام بسیاری از توسعه مبتنی بر رزومه در اینجا هستیم.
ممکن است داشتن «مهاجرت به میکروسرویس ها» در نمایه لینکدین شما قابل توجه به نظر برسد. در حالی که “Kept the monolith simple and shipped features” علیرغم این واقعیت که در بسیاری از موارد چالش برانگیزتر و هوشمندتر است، به نظر خوب نیست.
ما تمایل داریم راه حل های پیچیده ای را انتخاب کنیم زیرا فکر می کنیم این راه درستی برای پیشرفت است یا مهندسی جامد شبیه به آن است. با این حال، نیمی از سال بعد در موقعیتی قرار می گیرید که در آن سالانه 3.2 میلیون دلار خرج می کنید و از نحوه رسیدن به آنجا سوال می کنید، درست مانند 37signals.
آنها تصمیم گرفتند به جای استفاده از فضای ابری، سرورهای دل را به ارزش 600000 دلار خریداری کنند. آنها هزینه ها را به حدود 360 هزار دلار در سال کاهش دادند و 10 میلیون دلار پس انداز در طول پنج سال تخمین زدند. آنها همه چیز را با استفاده از یک ابزار منبع باز به نام کمال مدیریت کردند. 🚀
غذای آماده
یکپارچه پیروز شد. بسیاری از تیمها هنوز این را اعتراف نکردهاند، زیرا انجام این کار به معنای اعتراف به این است که دو سال گذشته مهاجرت تا حد زیادی بیهوده بوده است.
با یک سرویس شروع کنید. مرزها را در کد خود تعریف کنید، نه در شبکه خود. تنها در صورتی سرویسهای میکرو را در نظر بگیرید که یک رایانه برای بار شما واقعاً کافی نباشد (95٪ از ما میتوانیم کارهای زیادی را روی یک دستگاه انجام دهیم).
آیا میتوانید کوچکترین و احمقانهترین طراحی را تصور کنید که میتواند محصول شما را قبل از پایان سهماهه به بازار عرضه کند؟



