Архитектура без главного сервера
Традиционные информационные системы долгие годы строились по клиент-серверной схеме. В центре находился мощный сервер, который принимал запросы, обрабатывал данные и отправлял команды обратно клиентам. Если этот центральный узел выходил из строя, вся система мгновенно прекращала работу. В информатике такое уязвимое место называют единой точкой отказа (Single Point of Failure).
Распределённая база данных устроена иначе. Она состоит из десятков или сотен независимых серверов, объединённых в кластер по принципу одноранговой сети (peer-to-peer). Каждый сервер хранит часть информации, умеет отвечать на запросы пользователей и синхронизироваться с соседями. Пчелиная семья организована точно так же. В улье живут десятки тысяч особей, но ни у одной из них нет генерального плана сборки сот или расписания полётов. Каждая пчела выполняет простые инструкции на основе локальных наблюдений, а вместе они формируют сложное поведение, которое биологи называют роевым интеллектом, а программисты — эмерджентностью.
Протоколы связи и сплетни в сети
Чтобы кластер компьютеров работал как единое целое, узлы должны постоянно передавать друг другу обновления. Если один сервер записал новые данные от пользователя, остальные машины должны узнать об этом изменении. Пересылать широковещательное сообщение сразу на все узлы слишком накладно для сети, поэтому инженеры используют эпидемические алгоритмы или протоколы сплетен (Gossip protocols). Сервер случайно выбирает двух-трёх соседей и передаёт им новость, те делятся с другими, и через несколько миллисекунд информация расходится по всему кластеру.
Пчёлы используют идентичный механизм передачи данных. Когда разведчица находит цветущий луг, она возвращается в улей и исполняет виляющий танец. Этот танец кодирует расстояние до источника нектара углом наклона к вертикали сот и продолжительностью жужжания. Разведчица не обращается ко всей колонии разом. Её танец считывают несколько пчёл, стоящих вплотную на сотах. Они вылетают по указанным координатам, возвращаются с добычей и тоже начинают танцевать. В результате информация лавинообразно распространяется по улью через локальные контакты, точно воспроизводя работу Gossip-протокола Apache Cassandra или Amazon DynamoDB.
Достижение консенсуса и кворум
Критически важная задача для распределённой базы данных — прийти к согласию относительно текущего состояния данных. В компьютерных науках для этого применяют алгоритмы консенсуса, такие как Paxos или Raft. Они опираются на концепцию кворума. Сервер не считает операцию завершённой, пока строго определённое большинство независимых узлов не подтвердит запись.
В естественной среде аналогичный механизм изучил биолог Томас Сили при исследовании того, как пчёлы выбирают новое жилище во время роения. Разведчицы находят разные дупла и возвращаются с противоречивыми предложениями. Каждая группа агитирует сородичей танцем разной интенсивности в зависимости от качества найденного места. Пчёлы перепроверяют варианты независимо друг от друга. Выбор совершается только тогда, когда у одного из дупел собирается критическая масса разведчиц, то есть набирается биологический кворум. Улей никогда не полагается на мнение одной особи, исключая тем самым ошибку отдельного агента.
Репликация ресурсов и разделение кластера
В распределённых базах данных данные обязательно реплицируются. Это означает, что одна и та же запись копируется на разные физические диски. Если выйдет из строя жесткий диск или сгорит сетевой коммутатор, база данных продолжит отдавать информацию из уцелевших реплик.
- Запасы мёда и перги пчёлы распределяют по тысячам одинаковых восковых ячеек кластера сот, что предотвращает потерю всего ресурса при локальном повреждении гнезда.
- Выращивание расплода дублируется по всей центральной зоне улья, поэтому гибель части рабочих пчёл-кормилиц не останавливает развитие нового поколения.
- В случае перенаселения улей запускает контролируемое деление системы, называемое роением, в ходе которого половина пчёл забирает часть ресурсов и образует полностью автономный новый кластер.
В компьютерных распределённых системах незапланированное разделение называют расщеплением мозга (Split-Brain). Если кабель между двумя дата-центрами обрывается, кластер распадается на две изолированные половины. Инженеры настраивают базу данных так, чтобы активной оставалась только та половина, которая смогла собрать кворум большинства серверов, иначе в данные закрадутся неразрешимые противоречия. В биологии роение происходит по строгому протоколу, исключающему хаотичный распад колонии.
Частые вопросы
Бывает ли в улье сетевая задержка?
Да, физическое перемещение пчёл по сотам и время на исполнение танца выступают прямым биологическим аналогом пинга и сетевых задержек в компьютерной сети. Если соты повреждены или улей слишком велик, распространение сигнала замедляется.
Как пчёлы решают проблему конфликта данных?
Если две группы разведчиц предлагают диаметрально противоположные направления для сбора взятка, система решает конфликт временем угасания сигнала. Менее обильный источник даёт пчёлам меньше энергии, их танцы становятся реже, и колония естественным образом переключается на более выгодный ресурс.
Какая база данных ближе всего по структуре к улью?
Архитектура Apache Cassandra или ScyllaDB копирует принципы улья точнее всего. В них нет выделенного главного узла (Masterless), данные распределяются по кольцу, а узлы синхронизируются через Gossip-протокол.