Нетривиальное о репликации Как добиться высокой доступности Александр Казаков Ведущий инженер-программист
Нетривиальное о репликации Как добиться высокой доступности
Александр Казаков
Ведущий инженер-программист
2000 компонентов,
взаимодействующих по сети
Подход с балансировщиком
balancer
Подход с service discovery
service discovery
Чем плох подход с балансировщиком
timeout = 30
Чем плох подход с балансировщиком
balancertimeout = 30
Чем плох подход с балансировщиком. Пример 1
balancerТ = 30
Т = 60
Чем плох подход с балансировщиком. Пример 1
balancerТ = 30
Т = 60
Чем плох подход с балансировщиком. Пример 1
balancerТ = 30
Т = 60
timeout
Чем плох подход с балансировщиком. Пример 2
balancerТ = 30
Т = 10
Чем плох подход с балансировщиком. Пример 2
balancerТ = 30 Т = 10
Чем плох подход с балансировщиком. Пример 2
balancerТ = 30
Т = 10
Чем плох подход с балансировщиком. Пример 2
balancerТ = 30 Т = 10
Чем плох подход с балансировщиком. Пример 2
balancerТ = 30
Т = 10
Не получили ответ за 30 секунд,
хотя могли получить за 12 !!!
balancertimeout
Чем плох подход с service discovery. Пример 1
service discovery
Т = 30
Чем плох подход с service discovery. Пример 2
service discovery
Т = 10
Чем плох подход с service discovery. Пример 2
service discovery
Т = 10
Не получили ответ за 30 секунд,
хотя могли получить за 12 !!!
timeout
?
WE HAVE A PROBLEM
HOUSTON
Три базовые концепции
Три базовые концепции
1. Параллельные стратегии отправки запроса.
2. Использование клиентского таймаута на сервере.
3. Серые списки.
Три базовые концепции
1. Параллельные стратегии отправки запроса.
2. Использование клиентского таймаута на сервере.
3. Серые списки.
Параллельная стратегия
balancer
Т = 30
Т = 30
Т = 30Т = 30
Адаптивная параллельность
Адаптивная параллельность
t0 T2/3T1/3T
R1
R2
R3
Адаптивная параллельность
t0 T2/3T1/3T
R1
R2
R3
timeout=T
мы тут
Адаптивная параллельность
t0 T2/3T1/3T
R1
R2
R3
мы тут
OK
Адаптивная параллельность
t0 T2/3T1/3T
R1
R2
R3
timeout=T
timeout=2/3T
мы тут
Адаптивная параллельность
t0 T2/3T1/3T
R1
R2
R3
timeout=T
timeout=2/3T
timeout=1/3T
мы тут
Адаптивная параллельность
t0 T2/3T1/3T
R1
R2
R3
timeout=T
timeout=2/3T
timeout=1/3T
мы тут
OK
Адаптивная параллельность
t0 30
R1
R2
R3
R4
1 5 15
Адаптивная параллельность
t0 T4
R1
R2
R3
R4
T1 T2 T3
требует индивидуального подхода
Написал сервис — напиши клиента
Адаптивная параллельность
Адаптивная параллельность
индивидуальные параметры для каждого запроса
Адаптивная параллельность
индивидуальные параметры для каждого запроса
написал сервис — напиши клиента
Три базовые концепции
1. Параллельные стратегии отправки запроса.
2. Использование клиентского таймаута на сервере.
3. Серые списки.
B
B D
C
E
T1
T2
T3
B D
C
E
T0
T1
T2
T3
B
B
B
C
C
C
B
B
B
C
C
C
10
30
B
B
B
C
C
C
B
B
B
C
C
C
10
30
B
B
B
C
C
C
B
B
B
C
C
C
B
B
B
C
C
C
10
10
5
Используйте на серверезнание о клиентском таймаутедля конфигурации внешних вызовов
Bt0
B С
B С
t1
t2С
TimeBudget timeBudget = request.GetTimeBudget();
await client.Call(timeBudget.Remaining()); // 10 sec
. . .
await client.Call(timeBudget.Remaining()); // 5 sec
Три базовые концепции
1. Параллельные стратегии отправки запроса.
2. Использование клиентского таймаута на сервере.
3. Серые списки.
B
B
B
C
C
C
10
10
5
high availabilitylow latency
B
B
B
C
C
C
10 10
BAD NEWS EVERYONE
Серые списки не очень
Возможные реализации:
• Наивная
Серые списки не очень
Возможные реализации:
• Наивная
• Наивная + попытки
Серые списки не очень
Возможные реализации:
• Наивная
• Наивная + попытки
• Наивная + heart beat
Серые списки не очень
Возможные реализации:
• Наивная
• Наивная + попытки
• Наивная + heart beat
•…
Серые списки не очень
health = 1
health = 1
health = 1
health ∈ [0.001, 1]
health = 0.03
health = 1
health = 1
health ∈ [0.001, 1]
health = 0.7
health = 1
health = 1
health ∈ [0.001, 1]
Три базовые концепции
1. Параллельные стратегии отправки запроса.
2. Использование клиентского таймаута на сервере.
3. Серые списки. Здоровье и статистика.
@a_kazakov
Спасибо за внимание!
Александр Казаков
Ведущий инженер-программист