База данных Facebook Apollo NoSQL


Последний проект Facebook — это база данных NoSQL под названием Apollo, которая обеспечивает иерархическое хранилище с низкой задержкой в Интернете.

Facebook Apollo NoSQL

Детали проекта базы данных были раскрыты в среду на QCon в Нью-Йорке Джеффом Джонсоном, инженером-программистом из группы Core Data Facebook. Он описал Apollo как распределенную базу данных вокруг строгой согласованности с использованием протоколов кворума в стиле Paxos.

Paxos — это семейство протоколов консенсуса кворума, изначально определенное для получения единого согласованного результата из ряда возможностей в сети ненадежных процессоров. Его можно использовать в реплицированных базах данных для решения проблем, вызванных отказом распределенных серверов. Чтобы обновление было принято, за него должно проголосовать большинство серверов в сегменте, и обновления завершаются только тогда, когда они попадают на большинство серверов.

Распределенные базы данных страдают от проблемы, описанной с помощью CAP или теоремы Брюера, которая гласит, что распределенная база данных не может достичь следующих результатов одновременно:

  • Согласованность данных между узлами
  • Доступность в смысле постоянного ответа на запросы
  • Допуск разделения в работе, даже если часть сети недоступна

Оригинальный документ по этому поводу был представлен д-ром Эриком Брюером из Калифорнийского университета в Беркли на ежегодном симпозиуме ACM по принципам распределенных вычислений в 2000 году:

Источник: PODC Keynote 2000.

Распределенные системы должны выбрать, какие два из C, A и P они выберут, и Facebook выбрал CP, чтобы данные были согласованы между всеми узлами и поддерживали устойчивость к разделам, чтобы они могли работать даже в случае недоступности части сети.

Слоган презентации Джонсона «Аполлон» — «сильная согласованность в масштабе». Facebook имеет четыре центра обработки данных с различными системами репликации в зависимости от системы — MySQL, HBase или информационными службами, такими как кеши или системы обработки.

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

Аполлон — это попытка преодолеть эту проблему. Два основных требования — обеспечить транзакции с атомарными данными, а подтвержденные записи должны в конечном итоге стать видимыми и никогда не теряться. Джонсон говорит, что «многие системы NoSQL не предлагают эту опцию, и это проблематично в случае, когда последний писатель побеждает, когда писатели не могут сериализовать свои действия. Это все еще зависит от сбоя миноритарных узлов и временных разделов. Гораздо проще предоставить такие гарантии на основе системы типа CP ».

Джонсон говорит, что золотая середина, к которой изначально стремится Apollo, — это онлайн-хранилище с малой задержкой, особенно с флэш-памятью и в памяти. Система — это не просто магазин K / V и не ориентированная на документы. Джонсон говорит: «Мы ориентированы на структуру данных — строки, наборы, карты, очереди, деревья и т. Д., Как Redis, но, надеюсь, сильнее».

Дизайн Apollo представляет собой иерархию из тысяч осколков, а Stanford Raft используется для достижения консенсуса. Raft указывает, что лидер из кворума выбирается с использованием протокола рандомизированных выборов лидера. Все узлы знают, кто является лидером, и могут различать старых и новых лидеров. В качестве базового хранилища можно использовать RocksDB или MySQL.

Помимо хранения и запроса данных, Apollo может использоваться для выполнения кода, отправленного пользователем, в виде конечных автоматов. Основное применение отказоустойчивых конечных автоматов — системные задачи, такие как создание или уничтожение сегментов, балансировка нагрузки и миграция данных. Однако пользователи также могут отправлять отказоустойчивые конечные автоматы.

Apollo еще не используется в производственной среде Facebook, но может использоваться для замены некоторых систем Memcached, таких как внешние кэши. Еще один ранний претендент на Apollo — это надежная распределенная база данных в памяти для Facebook, хотя для этого потребуется поработать над типом используемой системы хранения. Еще одно возможное применение — поддержка очередей различных продуктов Facebook, таких как уведомления об исходящих сообщениях Facebook для веб-пользователей и мобильных устройств. Уведомления о сообщениях ставятся в очередь до тех пор, пока они не будут доставлены в системы iOS, Android или SMS, и, хотя резидентный размер данных невелик, высокая пропускная способность означает, что может потребоваться много ГБ хранилища на случай, если очереди не будут очищены должным образом из-за к проблемам с доставкой сообщений.

Apollo все еще находится в разработке и потенциально может стать открытым исходным кодом, когда внутренняя разработка уляжется.


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