Я читаю о плоту, но я немного запутался, когда дело доходит до консенсуса после сетевого раздела.
Итак, учитывая кластер из 2 узлов, 1 Лидер, 1 Последователь.
Перед разбиением, там, где X-сообщения написаны, успешно реплицированы, а затем представьте, что проблема с сетью привела к разбиению, поэтому есть 2 раздела, A (бывший лидер) и B (бывший последователь), которые теперь оба лидеры (получение пишет):
before partition | Messages |x| Partition | Messages
Leader | 0 1 2 3 4 |x| Partition A | 5 6 7 8 9
Follower | 0 1 2 3 4 |x| Partition B | 5' 6' 7' 8' 9'
После события раздела мы выяснили, что происходит?
а) Мы выбираем 1 нового лидера и рассматриваем его журнал? (сбросить сообщения нового подписчика?
например:
0 1 2 3 4 5 6 7 8 9 (total of 10 messages, 5 dropped)
или даже:
0 1 2 3 4 5' 6' 7' 8' 9' (total of 10 messages, 5 dropped)
(в зависимости от того, какой узел стал лидером)
б) Мы выбираем нового лидера и находим способ достичь консенсуса по всем сообщениям?
0 1 2 3 4 5 5' 6 6' 7 7' 8 8' 9 9' (total of 15 messages, 0 dropped)
если b, есть ли какой-то особый способ сделать это? или это зависит от реализации клиента? (например: метка времени сообщения ...)