دیسکورد چهجوری هزینهٔ هر فیچر رو حساب میکنه
خلاصهٔ کاملتر
به گفتهٔ نویسنده، API دیسکورد رو یه کدبیس یکپارچهٔ پایتون قدرت میگیره که بیش از ۱۷۰۰ اندپوینت و حدود ۷۰۰ تسک پسزمینه داره. مهندسا هر روز رو این کد مشترک تغییر میدن و این تغییرات بهصورت پیوسته و طی یه فرآیند رولاوت مرحلهای، به چند صد دیپلوی جدای کوبرنتیز مستقر میشن.
نویسنده میگه این حجم زیاد کد و اندپوینت و دیپلوی، پیگیری همهٔ تغییرات روزانه رو سخت میکنه، ولی تیم ابزار مانیتورینگ خوبی داره که چشمش به تأخیر، توان و نرخ خطاست تا رگرسیونهایی که به کاربر یا سیستم آسیب میزنن رو زود تشخیص بده.
ولی یه شکاف تو دیدشون بود که پارسال میخواستن پُرش کنن: اینکه هزینهٔ هاستینگ دقیقاً چهجوری بین فیچرهای مختلف محصول تقسیم میشه. مثلاً اجرای اون بخشایی از API که برای فرستادن و گرفتن پیام استفاده میشن چقدر خرج داره؟ شروع یه استریم؟ فرستادن یه هدیهٔ Nitro؟ و این اعداد در طول زمان چهجوری تغییر میکنن؟ تیم میخواست جواب این سؤالا رو هم برای یه اندپوینت تکی و هم برای یه فیچر کامل (مثل چت) بدونه.
نویسنده توضیح میده که بیشتر ارائهدهندههای ابری با کمال میل هزینه رو به تفکیک دیپلوی کوبرنتیز جدا میکنن، که مفیده ولی فقط قدم اوله؛ چون دیسکورد همون یه کدبیس رو تو همهٔ دیپلویها اجرا میکنه و هر دیپلوی زیرمجموعهٔ خاصی از ترافیک HTTP یا تسکای پسزمینه رو هندل میکنه. چون از قبل کلی دیپلوی دارن، تیکهتیکهکردن بیشترشون برای پیگیری هزینه عملی نیست، پس باید بدون تغییر توپولوژی دیپلوی، ردیابی بهتری اضافه میکردن.
یه چالش دیگه این بود که هر پروسهٔ ورکر API همزمان چندین تسک رو هندل میکنه و تو هر لحظه داره روی کارهای مربوط به چند فیچر مختلف کار میکنه. در نهایت برای فهمیدن هزینهٔ سروکردن ترافیک مربوط به یه فیچر، باید میتونستن هزینهٔ یه دیپلوی رو بر اساس مقدار زمانی که صرف کد مربوط به اون فیچر شده تخصیص بدن. نویسنده میگه با گسترشدادن ابزار پروفایلینگ اپلیکیشن، دقیقاً تونستن همین کارو بکنن.
نکات کلیدی:
- API دیسکورد یه کدبیس یکپارچهٔ پایتون با ۱۷۰۰+ اندپوینت و ۷۰۰ تسک پسزمینهست
- هدف: فهمیدن اینکه هزینهٔ هاستینگ چهجوری بین فیچرهای مختلف تقسیم میشه
- تفکیک هزینهٔ ابری فقط تا سطح دیپلوی جواب میده و کافی نیست
- هر ورکر همزمان کار چند فیچر رو هندل میکنه، پس تخصیص باید بر اساس زمان صرفشده باشه
- راهحل: گسترش ابزار پروفایلینگ برای تخصیص هزینه بر اساس زمان اجرای کد هر فیچر، بدون تغییر توپولوژی دیپلوی




