SlideShare a Scribd company logo
1 of 72
Download to read offline
Нетривиальное о репликации 

Как добиться высокой доступности
Александр
Казаков
Ведущий
инженер-программист
2000 компонентов,
взаимодействующих по сети
Подход с балансировщиком
balancer
Подход с service discovery
service
discovery
Чем плох подход с балансировщиком
timeout = 30
Чем плох подход с балансировщиком
balancer
timeout = 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 !!!
balancer
timeout
Чем плох подход с 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
Используйте на сервере
знание о клиентском таймауте
для конфигурации внешних вызовов
B
t0
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 availability
low 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
Спасибо за внимание!
kazakov.dev@gmail.com
Александр
Казаков
Ведущий
инженер-программист

More Related Content

More from CodeFest

More from CodeFest (20)

Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 
Алексей Акулович
Алексей АкуловичАлексей Акулович
Алексей Акулович
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
Олег Савкин
Олег СавкинОлег Савкин
Олег Савкин
 
Levon Ter-Isahakyan
Levon Ter-IsahakyanLevon Ter-Isahakyan
Levon Ter-Isahakyan
 

Александр Казаков