F1 от Google — масштабируемая альтернатива MySQL


Google переместил свои рекламные услуги из MySQL в новую базу данных, созданную собственными силами, под названием F1. Новая система сочетает в себе лучшие подходы NoSQL и SQL.

По данным Google Research, многие из критически важных для рекламного бизнеса Google сервисов исторически поддерживались MySQL, но Google недавно перенес несколько из этих сервисов в F1, новую СУБД, разработанную в Google. Команда Google Research заявляет, что F1 дает преимущества систем NoSQL (масштабируемость, отказоустойчивость, прозрачное сегментирование и снижение затрат) с простотой использования и поддержкой транзакций в РСУБД.

Компания Google Research разработала F1 для обеспечения функций реляционных баз данных, таких как механизм параллельных запросов SQL и транзакции в сильно распределенной системе хранения, масштабируемой на стандартном оборудовании.

(нажмите, чтобы увеличить)

Хранилище динамически сегментировано, поддерживает репликацию между центрами обработки данных при сохранении согласованности транзакций и может справляться с отключениями центра обработки данных без потери данных. Оборотная сторона сохранения согласованности транзакций означает, что F1 имеет более высокие задержки записи по сравнению с MySQL, поэтому команда реструктурировала схемы базы данных и переработала приложения, так что эффект увеличенной задержки в основном скрыт от внешних пользователей. Поскольку F1 является распределенным, Google утверждает, что он легко масштабируется и может поддерживать гораздо более высокую пропускную способность для пакетных рабочих нагрузок, чем традиционная база данных.

База данных сегментирована заказчиком, а приложения оптимизированы с учетом сегментированности. Когда требуется больше мощности, база данных может увеличиваться за счет добавления сегментов. Использование шардов таким образом имеет некоторые недостатки, в том числе трудности с перебалансировкой шардов и тот факт, что вы не можете выполнять кросс-сегментные транзакции или соединения.

F1 был разработан совместно с новой системой хранения нижнего уровня под названием Spanner. Его называют потомком Bigtable от Google и преемником Megastore. Megastore — это менеджер транзакционных индексированных записей, созданный Google на основе своего хранилища данных BigTable NoSQL. Spanner предлагает синхронную репликацию между центрами обработки данных (с Paxos, алгоритмом для отказоустойчивых распределенных систем). Он обеспечивает чтение моментальных снимков и выполняет несколько операций чтения, за которыми следует одна атомарная запись, чтобы гарантировать согласованность транзакций.

F1 основан на сегментированных серверах Spanner и может обрабатывать параллельное чтение с помощью SQL или Map-Reduce. Google развернул его, используя пять копий, разбросанных по всей стране, чтобы выжить в региональных катастрофах. Чтение намного медленнее, чем MySQL, от 5 до 10 мс.

Механизм параллельных запросов SQL был разработан с нуля, чтобы скрыть задержку удаленного вызова процедур (RPC) и обеспечить параллельное и пакетное выполнение. Задержка решается за счет использования единой фазы чтения и запрета последовательного чтения, хотя вы можете выполнять асинхронное чтение параллельно. Записи буферизуются на клиенте и отправляются как один RPC. Вызовы объектно-реляционного сопоставления также обрабатываются осторожно, чтобы избежать проблем, связанных с F1.

В исследовательской работе по F1, представленной на SIGMOD 2012, в качестве особых точек избегания упоминаются серийные чтения и циклы, которые выполняют один запрос на итерацию, и говорится, что, хотя это снижает производительность во всех базах данных, они катастрофичны для F1. В связи с этим клиентская библиотека описывается как очень легкая ORM — в ней действительно нет буквы «R». Он никогда не использует реляционные или обходные соединения, и все объекты загружаются явно.


Добавить комментарий