درسهای اسکیل کردن Slack و GitHub از زبان Maude Lemaire
خلاصهٔ کاملتر
توی این قسمت از پادکست The Pragmatic Engineer، گرگلی اوروس با Maude Lemaire حرف زده؛ مهندس ارشد و نویسندهی کتاب Refactoring at Scale. اون نزدیک هشت سال توی Slack تیم زیرساخت پرفورمنس بکاند رو رهبری کرده، سال ۲۰۲۴ رفته GitHub تا مشکلات اسکیل دیتابیس رو حل کنه و اخیراً هم روی پرفورمنس Cursor کار کرده، از جمله زمان رسیدن اولین توکن.
یکی از جالبترین مثالها thundering herd هست، یعنی وقتی یه اتفاق باعث میشه خیلیها همزمان به یه منبع هجوم بیارن. فرض کنید مدیرعامل توی یه کانال ۱۰۰ هزار نفره بنویسه «جمعه همه تعطیلن!» و همه شروع کنن ایموجی سفارشی بذارن. هر ایموجی باید به هر ۱۰۰ هزار نفر برسه؛ ۱۰ ایموجی یعنی یه میلیون پیام و ۱۰۰ تا یعنی ده میلیون. برای همین Slack تعداد ایموجیهای سفارشی یه پیام رو به ۲۳ تا محدود کرده و به گفتهی مهمان کسی جای ایموجی بیستوچهارم رو خالی حس نمیکنه.
پسرعموی این مشکل event flood هست، یعنی وقتی یه کلاینت تکی زیر بار رویدادهایی که از WebSocket خودش میاد له میشه. مثلاً یه کارمند IT که عضو کلی کانال شلوغه، یهو همهی اون پیامها و ایموجیها رو بدون حذف تکراریها دریافت میکنه و سیستمش کند میشه.
برای یه مشتری جدید با ۵۰۰ هزار کاربر، لازم بود Slack با تست بار مطمئن بشه که این حجم اتصال WebSocket رو تحمل میکنه. راه ساده اجرای Chrome بدون رابط گرافیکی برای هر نشست بود، با هزینهی ۰.۳۷ دلار برای هر نشست پنج ساعته؛ یعنی حدود ۱۵۰ هزار دلار برای هر بار تست. بهجاش لومر ابزاری به اسم Koi Pond ساخت که نسخههای سبکشدهای از کلاینت Slack رو به زبان Go اجرا میکنه.
توی GitHub که یه مونولیت بزرگ Ruby on Rails بود، Active Record (یعنی لایهای که کار با دیتابیس رو شبیه کار با آبجکتها میکنه) دردسرساز شده بود. لود صفحهی اصلی معمولاً حدود ۱۰۰ کوئری SQL روی سه کلاستر دیتابیس میزد، چون توسعهدهندهها اصلاً نمیدیدن چه باری روی دیتابیس میذارن. خیلی از این کوئریها scatter query بودن، یعنی کوئری بدون کلید شاردینگ که باید روی همهی شاردها اجرا بشه. هر شارد جدید این کوئریها رو کندتر میکرد و همین باعث شد GitHub نتونه بیشتر از ۱۶ شارد داشته باشه.
دربارهی هوش مصنوعی، لومر میگه برای کارهای پایهای و پلتفرمی هر خروجی LLM رو خودش دقیق بررسی میکنه، چون ساختارهای بزرگ فقط روی پایهی محکم وایمیستن. پیشنهادش هم اینه که مهندسهای پلتفرم و محصول بیشتر جابهجا بشن تا تیم پلتفرم از تجربهی واقعی استفاده از ابزارهاش دور نیفته.
نکات کلیدی:
- Slack تعداد ایموجی سفارشی رو به ۲۳ تا محدود کرده تا جلوی fan-out میلیونی تو کانالهای بزرگ رو بگیره.
- تست بار ۵۰۰ هزار اتصال WebSocket با Chrome بدون رابط حدود ۱۵۰ هزار دلار برای هر اجرا خرج داشت؛ Koi Pond با Go این رو ارزون کرد.
- صفحهی اصلی GitHub برای هر لود حدود ۱۰۰ کوئری SQL روی سه کلاستر دیتابیس اجرا میکرد.
- scatter queryها باعث شدن GitHub نتونه بیشتر از ۱۶ شارد دیتابیس داشته باشه.
- لومر خروجی LLM رو توی کارهای پلتفرمی و پایهای خودش شخصاً و با دقت بررسی میکنه.




