Де ми зараз
MyChatBot обробляє 50M+ повідомлень на місяць по WhatsApp, Telegram, Instagram, voice та email. Ми виросли з 1M/місяць два роки тому. Ось що змінилось у нас в головах, поки ми масштабувались.
1. Tail latency, єдина латентність, що має значення
Ми витратили перший рік на оптимізацію медіанної latency. Медіана нормальна. Клієнти відчувають P95 і P99, саме там живуть погані досвіди. Тепер кожен дашборд, на який ми дивимось, показує P99 першим.
2. Ідемпотентність, або ви плакатимете
Кожне повідомлення має бути idempotent. Мережі падають. Webhooks ретраяться. Якщо ваш handler не idempotent, ви надішлете дублікати реальним клієнтам. Ми навчились цього незручним шляхом.
3. Backpressure кращий за rate-limits
Rate limits здаються безпечними, але вони штовхають проблему вгору, зазвичай до ваших клієнтів, які потім скаржаться. Backpressure (плавне сповільнення, коли downstream повільний) тримає систему стабільною без сюрпризів.
4. Логи, не метрики
Не намагайтесь виводити метрики з логів у масштабі. Будуйте first-class метрики. Логи, для дебагу окремих кейсів; метрики, для розуміння системи.
5. Pager-гігієна, частина інженерної культури
Якщо команду пейджать вночі за речі, на які не можна діяти, вона вигорить. Кожен pageable-алерт повинен мати runbook і чітку дію. Якщо нічого з цього немає, алерт не повинен пейджити.