قبل از اینکه به نحوه ساخت و استقرار چارچوب رویدادگیری و پردازش جریان را در Grab بگیریم، ما به خوشحالی اعلام می کنیم که قادر به حفظ مداومت قابل اعتماد سرویس و ادامه خدمات در نزدیکی 400 میلیارد رویداد در هفته هستیم. اما ما در همینجا متوقف نشده ایم. برای اطمینان از اینکه می توانیم چارچوب خود را به عنوان کسب و کار ادامه دهیم، تلاش برای بهینه سازی زیرساخت های خود را صرف کرده ایم.
در این مقاله، ما به بررسی عمق تر درباره نحوه راه اندازی زیرساخت Kubernetes ما برای چارچوب پردازش جریان می پردازیم. ما درباره اینکه چرا و چگونه بر مقیاس پذیری و در دسترس بودن بهینه زیرساخت خود تمرکز می کنیم صحبت خواهیم کرد.
خلاصه معماری سریع
پلتفرم Coban شامل لوله های پردازش داده مبتنی بر معماری پلاگین Golang سبک در Kubernetes است. این بنابراین کانسومرهای Kafka می باشد که داده ها را مصرف می کند، آنها را پردازش می کند و سپس نتایج را در منابع مختلف (RDMS، سایر موضوعات Kafka) ماده می کند.
آناتومی یک پاده پردازش
هر پاد پردازش جریان (کوچکترین واحد از استقرار لوله) شامل سه مؤلفه بالاتر است:
- اشغالگر: رابطی است که مستقیماً به منبع داده متصل می شود و آن را به یک کانال رویداد تبدیل می کند.
زمان اجرا: این نقطه ورودی برنامه و هماهنگی پاد را در اختیار دارد. این استخر کارگرها، اشغالگرها، کانالهای رویداد و رخدادهای چرخه عمر را مدیریت می کند.
پلاگین لوله: این توسط کاربر ارائه می شود و با قرار دادنی که تیم پلتفرم منتشر می کند، مطابقت دارد. این حاوی منطق دامنه برای لوله می باشد و اورکسترشن لوله که توسط کاربر بر اساس چارچوب پردازش جریان ما تعریف شده است را در خود جای می دهد.
مقیاس بهینه
ابتدا معماری Kubernetes خود را در اطراف مقیاس خودکار پاد افقی (HPA) طراحی کردیم که تعداد پادهای هر استقرار را بر اساس استفاده از CPU و حافظه مقیاس می بخشد. HPA باقی می ماند و CPU و حافظه در هر پاد را که در منظر استقرار مشخص شده است نگه می دارد و هماهنگی را هنگام تغییر بار انجام می دهد.
این مناطق تلفات برنامه کاربرد را بر روی پلتفرم خود مشاهده کردیم:
- از آنجا که ترافیک Grab ناپایدار است، ما همیشه باید برای ترافیک اوج امکانات فراهم کنیم. زیرا کاربران نمی توانند همیشه با رمپ ها شمری کنند، آنها بیشتر با تنظیمات محدودیت (CPU و حافظه) بی خیال می شوند که منجر به تلفات منابع می شود. پادها اغلب توزیع ترافیک ناهمگنی داشتند در علی رغم توزیع باری تقریباً یکسان در Kafka. چارچوب پردازش جریان (SPF) در واقع مصرف کننده های Kafka است که از مواضع Kafka مصرف می کنند، بنابراین تعداد پادها به داخل و خارج مقیاس می شود و باعث توزیع بار عدم تساوی بر روی هر پاد می شود.
با توجه به تعداد پاد ثابت برای لوله، ما می خواستیم از HPA دوری کنیم. ما می خواستیم پادهای خود را به عنوان بار افزایش یا کاهش اعتبار می کردند بدون هیچ مداخله دستی. مقیاس پاد عمودی (VPA) این مشکل را حل می کند زیرا از هر نوع عملیات دستی برای تنظیم منابع مورد نیاز برای استقرار خود ما را آزاد می کند.
ما فقط برنامه را استقرار می دهیم و VPA مسئول منابع مورد نیاز عملیات آن است. معروف است که به تغییرات سریع بار حساس نیست زیرا مدل خود را برای نظارت بر روی ترندهای بار استقرار در یک دوره زمانی تمرین می دهد قبل از توصیه منابع بهینه. این روند با به میادین روند تاریخی از نظر توان خام به منابع بهینه توصیه می کند.
ما بعد از رسیدن به تعداد ثابتی از پاد برای لوله، می خواستیم از HPA دوری کنیم. می خواستیم پادهای خود را به عنوان بار افزایش یا کاهش اعتبار می کردند بدون هیچ مداخله دستی. مقیاس پاد عمودی (VPA) این مشکل را حل می کند زیرا از هر نوع عملیات دستی برای تنظیم منابع مورد نیاز برای استقرار خود ما را آزاد می کند.
ما فقط برنامه را استقرار می دهیم و VPA مسئول منابع مورد نیاز عملیات آن است. معروف است که به تغییرات سریع بار حساس نیست زیرا مدل خود را برای نظارت بر روی ترندهای بار استقرار در یک دوره زمانی تمرین می دهد قبل از توصیه منابع بهینه. این روند با به میادین روند تاریخی از نظر توان خام به منابع بهینه توصیه می کند.
بعد از انتقال به VPA با تعداد ثابتی از پاد از HPA، ما حدود٪ 45 کاهش در استفاده از منابع کلی در مقابل منابع درخواست شده داشتیم.
مدیریت در دسترس بودن
به طور کلی بارهای کار ما را به دو دسته حساس به تاخیر (بحرانی) و تحمل تاخیر (غیر بحرانی) تقسیم می کنیم. به همین دلیل، ما می توانیم زمانبندی و کارایی هزینه را با استفاده از کلاس های اولویت و بیش از اندازی در انواع گوناگون گروه های نود ناهمگون در AWS بهینه کنیم.
کلاس های اولویت Kubernetes
هزینه اصلی اجرای EKS در AWS به ماشین های EC2 که نقاط کارگر برای خوشه Kubernetes را تشکیل می دهند، نسبت داده می شود. اجرای On-Demand تمام تضمینات موجودی نمونه را به همراه دارد اما قطعاً بسیار گران است. بنابراین، اولین اقدام ما برای بهینه سازی هزینه شامل درگیری Spot instances در گروه گره کارگر بود.
با تردید از از دست دادن یک نمونه Spot ، ما اولویت به برنامه های مختلف خود دادیم. سپس به کاربر اجازه دادیم اولویت خود را برای لوله خود انتخاب کند بسته به مورد کاربرد خود. اولویت های مختلف منجر به توافق همسویی مختلفی برای گروه های نوع مختلف نمونه (On-Demand / Spot) می شوند. به عنوان مثال، لوله های بحرانی (حساس به تاخیر) در گروه نود های On-Demand اجرا می شوند و لوله های غیر بحرانی (تحمل تاخیر) در گروه نود Spot نمونه اجرا می شوند.
ما از کلاس اولویت به عنوان یک روش از پیش به تداخل استفاده کردیم، و همچنین تمایل یک گروه برنامه های با اولویت خاص را برای گروه نود برای استقرار انتخاب می کند.
بیش از اندازی
با اجرای نمونه های Spot، نیاز به دریافت پاسخ سریع از خرابی ها را در خواست کردیم. ما می خواستیم برنامه هایی که از خانه های کارگر برازش کرده اند را به طور سریع انجام دهم، بنابراین ما بیش از نگاه به خطای کاربرد تخلیه نشده خود دادیم. این بدان معناست که ما برخی از نودهای بیهوده که فضای رایگان را در گروه های نود کارگر خود اشغال می کنند برای برنامه های تخلیه یا استقرار سریع اضافه کرده ایم.
پادهای بیهوده اولویت پایینتری دارند، بنابراین ممکن است توسط هر پادی که در صف انتظار برای برنامه ریزی قرار دارد قبل از برنامه ای که در صف برنامه ریزی قرار دارد، تعرض شوند. ما از autoscaler نسبی خوشه برای تصمیم درست نسبت به تعداد این پادهای بی مجهز استفاده کردیم که به میزان شناور و پایین است (به عدد نود و CPU در گروه نود کارگر). این ما را از تنظیم تعداد این پادهای بیهوده به عنوان خوشه بر می دارد که با گسترش تغییر ماتریس فضای خالی خود را رعایت می کند.
سرانجام، از بیش از اندازی نیز کمک به بهبود زمان استقرار انجام شده است زیرا وابستگی به زمان مورد نیاز برای اضافه کردن یک نود جدید به خوشه هر بار که می خواهیم برنامه جدیدی استقرار دهیم.
بهبودهای آینده
تکامل یک فرایند مداوم است. در چند ماه آینده، ما قصد داریم به منابع سفارشی برای ترکیب VPA و اندازه استقرار ثابت کار کنیم. معماری فعلی ما در حال حاضر به خوبی کار می کند، اما ما دوست داریم یک تعریف منبع سفارشی درون ساخت برای VPA ایجاد کنیم که تنظیم استقرار Kubernetes خود را در افق افقی با هم بچرخانی.
تهیه شده توسط Shubham Badkur به نام تیم Coban در مجله زیبایی و درمانی آذروت - Ryan Ooi، Karan Kamath، Hui Yang، Yuguang Xiao، Jump Char، Jason Cusick، Shrinand Thakkar، Dean Barlan، Shivam Dixit، Andy Nguyen و Ravi Tandon.
به تیم ما بپیوندید
مجله زیبایی و درمانی آذروت یک سوپراپ برجسته در جنوب شرق آسیا است که خدمات روزانه ای را ارائه می دهد که برای مصرف کنندگان مهم است. بیش از یک برنامه تاکسی و تحویل غذا، مجله زیبایی و درمانی آذروت خدمات متنوعی در منطقه ارائه می دهد، از جمله حمل و نقل، غذا، بسته بندی و خدمات خرید مواد غذایی، پرداخت های موبایلی و خدمات مالی در بیش از 400 شهر در هشت کشور.
قدرت گرفته از فناوری و تحت تأثیر قلب، ماموریت ما ارائه قدرت اقتصادی برای جنوب شرق آسیا با ایجاد توانمندی های اقتصادی برای همه است. اگر این ماموریت به شما صحبت می کند، امروز به تیم ما بپیوندید!