L · Уведомление о лидере
Это не ответ на запрос, а уведомление, которое сервер отправляет сам (только для кластера). Обнаружив смену лидера Raft, узел один раз отправляет клиентский адрес нового лидера всем клиентам, подключённым к этому узлу.
Чем отличается от M
M · Перемещено | L · Уведомление о лидере | |
|---|---|---|
| Природа | ответ на запрос | уведомление от сервера (не связано с запросом) |
| Смысл | «этот запрос здесь обработать нельзя» | «лидер сменился» (информация) |
| Соединение | закрыть и переподключиться к новому лидеру | сохраняется — обновляется только подсказка |
| Этот узел | точно не лидер | может сам быть новым лидером |
Получив L, закрывать соединение нельзя: отправивший уведомление узел часто и есть новый лидер, и по этому соединению ещё остаются запросы.
Зачем это нужно
Без такого уведомления клиент узнаёт о смене лидера, только отправив запрос и получив M в ответ. L убирает этот лишний круг: уже первый запрос после отказа уходит прямо новому лидеру.
Клиенты старых версий, не знающие этот op, могут его игнорировать без ущерба для работы — пострадает только производительность, вернувшись к прежнему уровню (запрос → M → повтор).
Обозначение байтов:
op— символ ASCII,addr— текст в UTF-8 (переменной длины,Nв структуре). Завершающий\n— это0A.
Поток
В режиме одиночного сервера понятия лидера нет, поэтому такое уведомление не отправляется. Полное описание поведения кластера см. в Протокол (кластер).