MemBase — открытое, распределенное персистентное хранилище ключ-значение оптимизированное для хранения данных веб-приложений.
Простота. Все серверы кластера MemBase одинаковы. Клонируйте любой сервер, присоедините его к кластеру и нажмите кнопку Rebalance в веб-интерфейсе. Больше ничего делать не нужно. Протокол совместим с memcached, а значит может немедленно использоваться на множестве платформ. Фактически, в системе использована достаточно большая часть кода memcached + код для хранения данных на диске. Установка сервера и запуск MemBase занимают около 5 минут
Скорость. MemBase автоматически распределяет и данные и запросы на манипуляцию ими между серверами кластера. Данные реплицируются для обеспечения высокой доступности даже в случае выхода части серверов из строя, а также автоматически перемещаются внутри хранилища в память с соответствующим временем доступа (часто используемые данные при этом попадают в самую быструю память, а наименее часто — на медленные диски). Вся архитектура системы оптимизирована для высочайшей скорости работы.
Гибкость. MemBase масштабируется линейно. Серверы можно добавлять / удалять из кластера прямо в процессе работы.
Надежность. Любое количество серверов системы (вплоть до значения replication count, которое можно изменять) может отказать в любой момент времени, но кластер все равно будет продолжать свою работу. Даже в случае, если сервер-лидер кластера выйдет из строя, его замена будет подобрана автоматически без вмешательства пользователя.
Полная совместимость с memcached по протоколу. Для общения с membase приложения используют библиотеку memcached и memcached протокол.
При выполнении операции установки значения ключа происходит следующее:
На самом высоком уровне MemBase состоит из двух частей: Data Manager и Cluster Manager. Причем, наличие Cluster Manager на всех машинах кластера не обязательно, хотя для того, чтобы его исключить, придется пересобирать MemBase.
MemBase DataManager использует два порта для общения с клиентами. 11211 для клиентов, поддерживающих только версию 1.0 memcapable API и порт 11210 для более продвинутых клиентов с memcapable API 2.0 и выше. Такие клиенты умеют сами хешировать ключи для определения их мастер-серверов. Ключи от клиентов 1.0 хешируются с помощью части кода, которая называется Moxi.
Система хранения данных MemBase устроена таким образом, чтобы наиболее часто используемые данные хранились в наиболее быстрой памяти (оперативная), а наименее часто — в медленной (обычные диски). Если в вашей системе есть другие типы хранилищ (SSD), вы можете указать их приоритет. При определении какие данные где должны храниться используется LRU алгоритм.
Веб-интерфейс MemBase и REST-подобный интерфейс висят на порту 8080 (можно менять). Утилита membase умеет отправлять REST запросы. Таким образом, управлять кластером можно и с командной строки.
Heartbeat — это монитор, который периодически обменивается информацией с сервер-лидером кластера для получения информации о состоянии всей системы
ProcessMonitor — следит за состоянием Data Manager, перезапуская службу в случае сбоев и стучит обо всем Heartbeat.
Configuration Manager — следит за конфигурацией кластера — картой хеширования ключей, активными запросами на репликацию, картой ребалансировки и так далее.
Global Singleton Supervisor — следит за сервер-лидером кластера и участвует в его переизбрании в случае чего.
Rebalance Orchestrator — напрямую управляет процессом ребалансировки кластера
Node Health Monitor или The Doctor — собирает информацию от процессов Heartbeat всех машин кластера, обрабатывает ее и реагирует соответствующим образом (например, отправляя уведомления)
vBucket state and replication manager — мониторит процессы репликации в кластере
Q: Кто стоит за membase?
A: NorthScale, Zynga (Веселую ферму / FarmVille все помнят?) and NHN.
Q: Используется ли membase на production серверах?
A: Zynga использует его для работы серверов, поддерживающих игру FarmVille. Другие крупные внедрения мне пока неизвестны.
- персистентен
- имеет квази-постоянное (quasi-deterministic) малое время отклика
- высокая скорость работы
- линейно масштабируется с одного сервера до тысяч
- не имеет схемы данных (только ключ-значение)
- совместим по протоколу с memcached
Ключевые характеристики системы:
Простота. Все серверы кластера MemBase одинаковы. Клонируйте любой сервер, присоедините его к кластеру и нажмите кнопку Rebalance в веб-интерфейсе. Больше ничего делать не нужно. Протокол совместим с memcached, а значит может немедленно использоваться на множестве платформ. Фактически, в системе использована достаточно большая часть кода memcached + код для хранения данных на диске. Установка сервера и запуск MemBase занимают около 5 минут
Скорость. MemBase автоматически распределяет и данные и запросы на манипуляцию ими между серверами кластера. Данные реплицируются для обеспечения высокой доступности даже в случае выхода части серверов из строя, а также автоматически перемещаются внутри хранилища в память с соответствующим временем доступа (часто используемые данные при этом попадают в самую быструю память, а наименее часто — на медленные диски). Вся архитектура системы оптимизирована для высочайшей скорости работы.
Гибкость. MemBase масштабируется линейно. Серверы можно добавлять / удалять из кластера прямо в процессе работы.
Надежность. Любое количество серверов системы (вплоть до значения replication count, которое можно изменять) может отказать в любой момент времени, но кластер все равно будет продолжать свою работу. Даже в случае, если сервер-лидер кластера выйдет из строя, его замена будет подобрана автоматически без вмешательства пользователя.
Полная совместимость с memcached по протоколу. Для общения с membase приложения используют библиотеку memcached и memcached протокол.
Алгоритм выполнения операции SET
При выполнении операции установки значения ключа происходит следующее:
- Приложение обращается к memcached API с информацией о ключе и значении
- API хеширует ключ и определяет мастер-сервер кластера для данного ключа
- Запрос через сеть направляется мастер-серверу данного ключа
- Мастер-сервер выполняет операцию
- Мастер-сервер выполняет репликацию на другие серверы кластера
- Кеширует сохраняемое значение в памяти (как memcached)
- Данные помещаются в очередь на запись в персистентное хранилище, если такой запрос на запись ключа с таким значением еще не отправлялся
- Приложению возвращается ответ
Архитектура
На самом высоком уровне MemBase состоит из двух частей: Data Manager и Cluster Manager. Причем, наличие Cluster Manager на всех машинах кластера не обязательно, хотя для того, чтобы его исключить, придется пересобирать MemBase.
Data Manager
MemBase DataManager использует два порта для общения с клиентами. 11211 для клиентов, поддерживающих только версию 1.0 memcapable API и порт 11210 для более продвинутых клиентов с memcapable API 2.0 и выше. Такие клиенты умеют сами хешировать ключи для определения их мастер-серверов. Ключи от клиентов 1.0 хешируются с помощью части кода, которая называется Moxi.
Система хранения данных MemBase устроена таким образом, чтобы наиболее часто используемые данные хранились в наиболее быстрой памяти (оперативная), а наименее часто — в медленной (обычные диски). Если в вашей системе есть другие типы хранилищ (SSD), вы можете указать их приоритет. При определении какие данные где должны храниться используется LRU алгоритм.
Cluster Manager
Веб-интерфейс MemBase и REST-подобный интерфейс висят на порту 8080 (можно менять). Утилита membase умеет отправлять REST запросы. Таким образом, управлять кластером можно и с командной строки.
Службы, работающие на всех серверах кластера одновременно:
Heartbeat — это монитор, который периодически обменивается информацией с сервер-лидером кластера для получения информации о состоянии всей системы
ProcessMonitor — следит за состоянием Data Manager, перезапуская службу в случае сбоев и стучит обо всем Heartbeat.
Configuration Manager — следит за конфигурацией кластера — картой хеширования ключей, активными запросами на репликацию, картой ребалансировки и так далее.
Global Singleton Supervisor — следит за сервер-лидером кластера и участвует в его переизбрании в случае чего.
Службы, работающие только на одном сервере кластера в каждый момент времени:
Rebalance Orchestrator — напрямую управляет процессом ребалансировки кластера
Node Health Monitor или The Doctor — собирает информацию от процессов Heartbeat всех машин кластера, обрабатывает ее и реагирует соответствующим образом (например, отправляя уведомления)
vBucket state and replication manager — мониторит процессы репликации в кластере
FAQ
Q: Кто стоит за membase?
A: NorthScale, Zynga (Веселую ферму / FarmVille все помнят?) and NHN.
Q: Используется ли membase на production серверах?
A: Zynga использует его для работы серверов, поддерживающих игру FarmVille. Другие крупные внедрения мне пока неизвестны.