Мащабиране на всичко освен базата данни
Мащабирахме красиво нашите 20 услуги. Всички удряха една и съща PostgreSQL инстанция.
Архитектурата:
- 20 микросървиси (независимо мащабируеми! ✅)
- 1 PostgreSQL база данни (не е мащабируема ❌)
- Всяка услуга: 10 размер на connection pool
- PostgreSQL max_connections: 100
Математиката:
- 20 услуги × 10 връзки = 200 необходими
- Максимум налични: 100
- Резултат: Гладуване за връзки при мащабиране
Какво всъщност се случи:
- Услуги A, B, C грабнаха всички връзки
- Услуги D-T: "connection refused"
- Проверките за здраве се провалят
- Pods се рестартират, грабват още връзки
- Спирала на смъртта
Решението:
- PgBouncer за пулинг на връзки
- Лимити на връзки за услуга
- Реплики за четене за услуги с много четене
- В крайна сметка: база данни на услуга модел
Урок: "Микросървиси" със споделена база данни е разпределен монолит с допълнителни стъпки.