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

Preview:

Citation preview

Нетривиальное о репликации Как добиться высокой доступности

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

Ведущий инженер-программист

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

Спасибо за внимание!

kazakov.dev@gmail.com

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

Ведущий инженер-программист

Recommended