آمازون ریزسرویس ها را برای Monolith کنار می گذارد: رمزگشایی تغییر معماری Prime Video
هفته گذشته احتمالاً با مقالات، ویدئوها و توییتهایی در مورد چگونگی مرگ میکروسرویسها و نحوه کشتن آنها توسط آمازون بمباران شدهاید. همه اینها از یک پست وبلاگی که در ماه مارس منتشر کردند، سرچشمه میگیرد و در آن به اشتراک میگذارد که چگونه 90 درصد از هزینههای خود را با انتقال معماری میکروسرویسهای خود به یکپارچه کاهش میدهند. می توانید پست کامل وبلاگ آنها را اینجا بخوانید. در اینجا به معنای آن و چرایی اهمیت آن می پردازم. اما چیزی که واقعاً مرا شگفت زده کرد این است که مردم اخیراً شروع به صحبت در مورد آن کرده اند، حتی اگر این چیزی است که بیش از یک ماه قبل با جهان در میان گذاشته بودند.
نه اینکه یک نظریه پرداز توطئه باشم، اما این تغییر برای اکثر توسعه دهندگان اهمیتی ندارد، و من معتقدم تبلیغات در مورد این در حال تولید است. هر تصمیمی که ما هنگام ساختن چیزی می گیریم دارای معاوضه هایی است و شما فقط زمانی که آن را بسازید متوجه برخی از هزینه ها، مالی و کارایی می شوید.
در آمازون چه گذشت؟
Prime Video آمازون هزاران پخش زنده را به مشتریان خود ارائه می دهد. برای اطمینان از تجربه عالی برای همه آنها، آنها به ابزاری برای نظارت بر کیفیت استریم نیاز داشتند و سعی می کردند هر زمان که مشکلی ایجاد می شد، جریان ها را برطرف کنند. تیم تجزیه و تحلیل کیفیت ویدیو (VQA) در Prime Video ابزاری برای رسیدگی به این موضوع داشت، اما هرگز برای مقیاس در نظر گرفته نشده بود، و با ورود آنها به جریانهای بیشتر و بیشتر، مسائل مربوط به هزینهها و تنگناها شروع به ظهور کردند.
ابزار آمازون به سه جزء اصلی تقسیم شد: مبدل رسانه، آشکارسازهای نقص، و ارکستراسیون. مبدل رسانه ای به عنوان یک تابع AWS Lambda کار می کرد، جریان های صوتی و تصویری را تبدیل می کرد و داده ها را در یک سطل S3 ذخیره می کرد. ردیابهای نقص، که بهعنوان یک تابع AWS Lambda نیز اجرا میشوند، دادههای تجزیهشده را از سطل S3 میکشند و فریمها و صدا را برای هر مشکلی تجزیه و تحلیل میکنند. در نهایت، ارکستراسیون جریان سیستم را با استفاده از توابع مرحله ای AWS آمازون کنترل کرد.
توسعه دهندگان Backend ممکن است از قبل مشکل را ببینند. اما، اگر واضح نیست، بیایید آن را تجزیه کنیم…
چرا توابع مرحله AWS کار نمی کند؟
در حالی که AWS Step Functions مدیریت یک گردش کار را آسانتر میکند، این سهولت استفاده هزینه دارد. سرویس Prime Videos در هر ثانیه چندین حالت انتقال را انجام داد. هر انتقال ایالت هزینه ای داشت (0.025 دلار به ازای هر 1000 تغییر حالت). آنها همچنین تحت فشار قرار میگرفتند، زیرا درخواستهای زیادی در هر ثانیه در هر جریان باعث میشد که به سرعت به محدودیت حساب خود برسند.
چرا آمازون S3 کار نمی کند؟
هر خواندن و هر نوشتن در یک سطل ذخیره سازی ابری هزینه دارد. فرض کنید مبدل رسانه در هر ثانیه حدود 24 حباب داده تصویر را به سطل S3 می نویسد. برای 1000 استریم، 24000 نوشتن در ثانیه است. با فرض اینکه تقریباً 2,937,600 ثانیه در یک ماه در مجموع 70,502,400,000 نوشتن اطلاعات تصویری باشد. داده های صوتی را به خاطر بسپارید. که ما را به 141,004,800,000 ارسال در ماه می رساند. اوه! ردیاب نقص همچنین باید تمام آن داده ها را نیز بخواند. بنابراین ما ماهانه 141,004,800,000 مطالعه داریم.
این فقط خواندن و نوشتن در یک ماه است و ذهن من از قبل درگیر است. قرار دادن خواندن و نوشتن در ماشین حساب قیمت AWS 761,425.92 دلار در ماه هزینه دارد و این فقط خواندن و نوشتن است. ما حتی شروع به در نظر گرفتن داده های واقعی ذخیره شده خود نکرده ایم!
کاری که آمازون انجام داد
تقسیم تجزیه و بازرسی جریان های ویدیویی یک تلاش عظیم پول سوز بود، اما جریان کاری اصلی که آنها تنظیم کرده بودند منطقی بود. بنابراین آنها تلاش عظیمی را برای بازسازی زیرساخت خود با ادغام خدمات مختلف در یک فرآیند انجام دادند.
آمازون گفت: “ما متوجه شدیم که رویکرد توزیع شده در مورد استفاده خاص ما مزایای زیادی به همراه ندارد.” بنابراین، آنها تصمیم گرفتند که سیستم را به صورت یکپارچه بازسازی کنند.
منطق اصلی میکروسرویسهای مبدل رسانه و ردیاب عیب آنها صدا بود. بنابراین از نظر مفهومی، معماری سطح بالای آنها توانسته است به همان شکل باقی بماند. با حفظ همان سه مؤلفه پیادهسازی اولیه، آنها از بسیاری از کدهای خود برای انتقال سریع به معماری یکپارچه جدید استفاده مجدد کردند.
اکنون که مبدل رسانه و ردیاب عیب آنها روی یک سرور کار میکرد، دیگر نیازی به واسطهای نبود که دادههای تصویری و صوتی تجزیهشده را ذخیره کند. این امر نیاز به یک سیستم ذخیره سازی میانی را از بین برد و در هزینه خواندن، نوشتن و ذخیره داده ها در سطل S3 صرفه جویی کرد.
تنها قطعه جدیدی که آنها نیاز به پیاده سازی دارند، یک لایه ارکستراسیون برای کاربرد واحدشان است که اجزای مختلف را مدیریت می کند. این هزینه ها و محدودیت های توابع مرحله ای AWS را حذف کرد.
آیا هیچ یکی از اینها مهم است؟
راستش، احتمالا نه. به این معنی نیست که جالب نیست، بلکه استفاده از آنها در مقایسه با بسیاری از شرکتها و توسعهدهندگان دیگر که تلاش میکنند زیرساختهایی را در مقیاس بزرگ بسازند، بسیار غیرعادی است. Keep in Amazon در هر ثانیه هزاران جریان را حفظ می کند. این مقیاس و الزامات فقط برای شرکت های FAANG اعمال می شود. وقتی به شرکتهایی فکر میکنید که کیفیت پخش و استریم به ذهن میرسد، دو مورد فوری Twitch و YouTube هستند که متعلق به آمازون و گوگل هستند. اگر در آن تجارت نباشید، احتمالاً روی شما تأثیری نخواهد گذاشت.
دزدی از یکی از دوستان نزدیکم، “کارآمدترین صرفه جویی در هزینه برای شرکت شما این است که الف) ناوگان میکروسرویس های خود را یکپارچه کنید ب) منابع داده های متفاوت خود را یکپارچه کنید یا ج) برخی از خدمات را به کلی کنار بگذارید.” او توضیح می دهد که سخت ترین کار این است که تشخیص دهیم کدام یک از این سه نقطه باید در اولویت قرار گیرند، و او درست می گوید.
به عنوان یک فحش جداگانه در مورد من، با بررسی نحوه ساختار سیستم خود، آنها ساده ترین ابزارها را با بالاترین هزینه انتخاب کردند.
توابع بدون سرور از مدل پرداخت به ازای استفاده پیروی می کنند که در آن فقط برای زمان واقعی اجرای عملکردهای شما صورتحساب دریافت می کنید. ایده این است که در مقایسه با سرورهای اختصاصی مقرون به صرفهتر است، زیرا همیشه میتوانید عملکردها را در زمانی که استفاده نمیشوند کاهش دهید. نکته مهم این است که زمان پردازش/محاسبه روی یک عملکرد بدون سرور به احتمال زیاد بیشتر از یک سرور اختصاصی است، اما از آنجایی که فقط در صورت نیاز اجرا می شود، می توانید در هزینه خود صرفه جویی کنید زیرا نیازی نیست همیشه آنها را اجرا کنید.
اما در اینجا، این یک مزیت بیهوده است زیرا این توابع چندین بار در ثانیه و در هر ثانیه اجرا میشوند و یک جریان ویدیوی زنده را مدیریت میکنند. مبدل رسانه و آشکارسازهای نقص احتمالاً میتوانستند روی نمونههای EC2 خودشان اجرا شوند. آنها سرورهای همیشه در حال اجرا و مقیاس پذیر خود را داشتند، مانند AWS Lambda. اگرچه موضوع ذخیره سازی بین سرویس ها همچنان باقی خواهد ماند.
وقتی نوبت به محدودیتهای AWS Step Functions میرسد، اجازه دهید به آنچه که انجام میداد نگاه کنیم. توابع مرحله ارتباط بین مراحل مختلف معماری کیفیت جریان و مدیریت خطا را مدیریت میکنند. وقتی صحبت از ارتباط بین سرویس ها می شود، ابزارهایی مانند کافکا وجود دارد و می توان از آنها برای انتقال داده (یا حالت) بین سرویس ها استفاده کرد. کافکا از یک مدل پیامرسانی pub/sub (انتشار و اشتراک) استفاده میکند که به تولیدکنندگان اجازه میدهد موضوعاتی را برای مصرفکنندگان منتشر کنند، که سپس میتوانند بر اساس موضوعاتی که در آن مشترک هستند عمل کنند. مدل pub/sub کافکا امکان پخش کارآمد و قابل اعتماد داده را فراهم میکند و آن را برای ساختن سیستمهای رویداد محور، مانند سیستمی که کیفیت ویدیو را کنترل میکند، عالی میکند.
محدودیتها و نگرانیهای آشکاری در مورد راهحل خارج از کاف من وجود دارد. مانند نیاز به یک سطل ذخیره سازی برای به اشتراک گذاری داده های ویدیویی و صوتی بین سرویس ها، اما من آنها را برای نشان دادن اینکه از ابتدا ابزارهای مورد استفاده برای ساخت سیستم نظارت جریان برای مقیاس ساخته نشده بودند، آورده ام. و تیم Prime Video از همان ابتدا از این موضوع آگاه بود. به گفته مارسین کلنی، یکی از اعضای ارشد SDE در Prime Video، آنها «طراحی کردند [their] راه حل اولیه به عنوان یک سیستم توزیع شده با استفاده از اجزای بدون سرور که انتخاب خوبی برای ساخت بود [their] خدمات سریع.» اما آنها میدانستند که از طراحی اولیه خود با محدودیتهایی مواجه خواهند شد؛ فکر نمیکردند به این زودی اتفاق بیفتد.
آنچه شما باید از این
این که آیا سیستم خود را با استفاده از میکروسرویس میسازید یا یک معماری یکپارچه، باید بر اساس مورد به مورد باشد. نیازهای هر شرکت متفاوت است و باید به دقت مورد توجه قرار گیرد.
در طرف دیگر دنیای پخش ویدئو، نتفلیکس است که پیشگام معماری میکروسرویس است. در سال 2008، نتفلیکس با یک خرابی پایگاه داده برخورد کرد که حل آن چهار روز طول کشید، زیرا خدمات آنها به یکدیگر وابسته بود. با وجود اینکه خرابی پایگاه داده بود، آنها مجبور بودند تمام سرویس های دیگر خود را تعمیر کنند. پس از آن تجربه، آنها تصمیم گرفتند به میکروسرویس ها مهاجرت کنند و اکنون نزدیک به 1000 میکروسرویس را اجرا می کنند که هر کدام بخشی از تجارت و خدمات خود را مدیریت می کنند. (منبع)
به یاد داشته باشید که این برنامه یکپارچه تنها یک جزء از کل خدمات Prime Video خود را مدیریت می کند. سایر عناصر Prime Video، و همچنین هسته آمازون، همچنان از معماری های میکروسرویس استفاده می کنند. نیاز به این انتقال به تنگناهایی در ابزار آنها و هزینه خواندن و نوشتن مداوم در یک سطل ذخیره سازی S3 خلاصه شد.
در پایان روز، آنچه را که به دنبال انجام آن هستید و نحوه استفاده از منابع، چه ذخیره سازی، زمان محاسبه، رم یا هر چیز دیگری را در نظر بگیرید. در حالی که ممکن است به دنبال صرفه جویی در پول باشید، اما همچنین می خواهید مطمئن شوید که با ابزارها و سیستم هایی ساخته می شوید که می توانند مقیاس شوند، قابل اعتماد هستند و نگهداری از آنها آسان است.
بسته بندی
گزارش های مرگ میکروسرویس ها بسیار اغراق آمیز است. و همه ما باید عاقلانه به یاد داشته باشیم که هنگام ساخت یک پروژه جدید، در نظر گرفتن نیازهای پروژه شما ضروری است.
اگر علاقه مند به کسب اطلاعات بیشتر در مورد میکروسرویس ها هستید، من یک پست وبلاگ مقدماتی نوشتم که می توانید اینجا پیدا کنید.
چه پروژه بعدی خود را به صورت یکپارچه بسازید یا با میکروسرویس ها، Amplication را بررسی کنید. Amplication به توسعه دهندگان کمک می کند تا با استفاده از بالاترین استانداردهایی که سازگار و مقیاس پذیر هستند، خدمات باطن را به سرعت بسازند.
اگر کار ما را دوست دارید، حتماً یک 🌟 در GitHub به ما بدهید و به انجمن Discord ما بپیوندید تا با سایر توسعه دهندگان Amplication گپ بزنید.