Мащабирахме красиво нашите 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 за пулинг на връзки
  • Лимити на връзки за услуга
  • Реплики за четене за услуги с много четене
  • В крайна сметка: база данни на услуга модел

Урок: "Микросървиси" със споделена база данни е разпределен монолит с допълнителни стъпки.


← Назад към Научени Уроци