Cloudflare строит новый распределённый консенсус-сервис под названием Meerkat. В его основе лежит алгоритм QuePaxa, опубликованный в 2023 году исследователями из EPFL. Зачем это нужно? Внутренние сервисы Cloudflare работают в 330+ дата-центрах по всему миру. Им нужна сильная согласованность данных (линеаризуемость) — чтобы любой клиент после записи гарантированно видел актуальное значение. Проблема в том, что сеть Cloudflare — это весь интернет, а интернет непредсказуем: серверы падают, кабели перерубают, задержки скачут.
Стандартные алгоритмы вроде Raft плохо подходят для таких wide-area сетей. Raft полагается на единого лидера. Только лидер может принимать записи. Если лидер падает или тормозит — система встаёт до выборов нового лидера через таймауты. Конфигурация этих таймаутов в сети с плавающей задержкой — сущий ад, и Cloudflare не раз с этим сталкивалась.
QuePaxa решает эту проблему иначе. У него нет обязательного лидера. Любая реплика может инициировать запись в любой момент. Есть номинальный лидер, но он не обязателен — он просто делает запись быстрее (за один раунд вместо трёх). Если лидер упал — ничего страшного, остальные продолжают работать. Если несколько реплик одновременно предлагают свои варианты для одного слота в логе — они не конфликтуют, а совместно решают, какое значение зафиксировать. Прогресс никогда не останавливается из-за таймаута.
Архитектура Meerkat выглядит так: разработчик запрашивает кластер из реплик, указывая желаемые дата-центры. Клиент шлёт запрос (например, put или get) любой реплике. Реплика кладёт его в лог событий через алгоритм консенсуса. Все реплики ведут идентичный лог. Приложение (например, key-value store) читает этот лог и строит своё состояние. Даже чтение (get) требует записи в лог — это гарантирует линеаризуемость: если один клиент написал v11, а другой сразу читает с другой реплики, он увидит именно v11, потому что читающая реплика будет вынуждена сначала доставить себе пропущенное событие.
Ограничение у Meerkat одно — задержка. На запись уходит от одного до трёх сетевых раундов между большинством реплик. Если реплики разбросаны по миру, латентность будет высокой. Поэтому Meerkat не годится для баз данных общего назначения. Его ниша — служебные данные control-plane: кто сейчас лидер базы данных, где лежит модель AI и так далее. Такие данные пишут редко, но требуют абсолютной согласованности.
Проект пока экспериментальный. Cloudflare запускала proof-of-concept на 50 репликах по всему миру — система стабильно работала, даже когда лидеры постоянно «падали». В планах на год — серия постов: как именно работает QuePaxa, как формально верифицируется реализация на Rust, как работает управление кластером и как ищутся баги с помощью детерминированного симуляционного тестирования.