HBase в веб-проектах
Александр Чистяков
Главный инженер, Git in Sky
alex@gitinsky.com

2013

dev.it-portfolio.net
Докладчик
●

Третий раз в этом зале

●

Надеюсь, не последний

●

Немного разрабатывал на VB

●

Немного разрабатывал на PHP

dev.it-portfolio.net

2
Слушатели
●

Веб-разработчики?

●

DBA?

●

Инженеры по эксплуатации?

●

Архитекторы?

dev.it-portfolio.net

3
Суть проблемы
●

●

Иногда данных бывает много
Они перестают помещаться на одну
машину

●

Можно взять сервер побольше

●

Можно взять два сервера

dev.it-portfolio.net

4
Как взять два сервера?
●

Amazon Dynamo (~2007)

●

Google BigTable (~2006)

●

^ С них все началось

●

Riak, Cassandra, Voldemort, ...

●

MongoDB, MemBase (CouchBase), HBase, ...

dev.it-portfolio.net

5
Пресловутая CAP-теорема
●

Consistency

●

Availability

●

Partition tolerance

●

^ Выберите любые два

●

(Partition tolerance не выбрать нельзя)

dev.it-portfolio.net

6
CP или AP?
●

●

CP: strong consistency (гарантии)
AP: “eventually consistent DB will become
eventually inconsistent one day”

dev.it-portfolio.net

7
Анатомия NoSQL движка
●

Роутер запросов

●

“Автоматический” шардинг

●

Сторадж

●

^ MongoDB

●

MemBase – сторадж был сделан на базе
SQLite

dev.it-portfolio.net

8
Анатомия HBase
●

Java – язык

●

JVM - платформа

●

ZooKeeper – распределенный координатор

●

HDFS – распределенная файловая система

●

master node (SPOF)

●

regionserver nodes
dev.it-portfolio.net

9
Анатомия HBase
●

SSTable -> LSM-tree

●

^ отсортированная структура данных

●

На файловой системе - файлы

●

Ключ - значение

●

Можно делать range scan

●

Можно делать range scan по части ключа
dev.it-portfolio.net

10
Consistency
●

●

●

●

Настолько консистентна, насколько хорош
ваш fsync
Транзакции только в пределах строки
Полная денормализация (ни foreign keys,
ни даже вторичных индексов)
^ Можно взять group commit фреймворк,
разработанный третьей стороной
dev.it-portfolio.net

11
Кто использует HBase?
●

Facebook

●

Yahoo

●

StumbleUpon

●

Cezurity (http://vk.com/av)

dev.it-portfolio.net

12
Что является клиентом?
●

Мы работаем в web – скриптовые языки

●

Thrift-сервер (HBase-клиент на Java)

●

Через Thrift работают Python, Perl, etc...

●

Мне это не очень нравится, так как может
существенно нарушаться локальность
данных

dev.it-portfolio.net

13
Какова нагрузка?
●

●

●

~6.5 Tb данных
До 30Krps read/write 50/50 для 3-х region
servers
^ были приняты специальные меры

dev.it-portfolio.net

14
Какие бывают специальные меры?
●

●

●

dfs.block.local-path-access.user = user
^ Разрешить этому пользователю
локальный прямой доступ к HDFS-файлам
на той же ноде
dfs.client.read.shortcircuit = true –
разрешить локальному клиенту читать
файлы напрямую
dev.it-portfolio.net

15
Какие бывают специальные меры?
●

hbase.client.keyvalue.maxsize – увеличить
максимальный размер файла, чтобы
избежать частых сплитов региона

●

Включить сжатие при записи на диск

●

Закрепить таблицу в памяти

●

Включить отложенный fsync

●

Включить block cache для файлов
dev.it-portfolio.net

16
С чем столкнулись при эксплуатации
●

●

●

●

Как обычно в Java – garbage collector
Как обычно в MVCC – необходимость
чистить старые данные
Лучше делать pre-split регионов
Лучше чтобы replication factor был
соблюден (копий меньше, чем серверов)

dev.it-portfolio.net

17
С чем столкнулись при эксплуатации
●

●

●

●

Однажды пришлось делать crash recovery
вручную
В момент сплита один из region servers
упал
Данные никуда не пропали, просто
пришлось немного их переместить
Strong consistency!
dev.it-portfolio.net

18
Выводы
●

HBase – не самый плохой выбор

●

Вы должны знать граничные условия

●

●

При определенных граничных условиях
можно масштабироваться безгранично
^ Если победить закон Амдала

dev.it-portfolio.net

19
Спасибо за внимание!
●

Вопросы?

●

С вами был Саша Чистяков

●

●

●

Главный инженер, Git in Sky,
http://gitinsky.com
^ занимаемся тюнингом
Координатор, DevOps-40,
http://www.meetup.com/DevOps-40
dev.it-portfolio.net

20

HBase on Dev{Highload}

  • 1.
    HBase в веб-проектах АлександрЧистяков Главный инженер, Git in Sky alex@gitinsky.com 2013 dev.it-portfolio.net
  • 2.
    Докладчик ● Третий раз вэтом зале ● Надеюсь, не последний ● Немного разрабатывал на VB ● Немного разрабатывал на PHP dev.it-portfolio.net 2
  • 3.
  • 4.
    Суть проблемы ● ● Иногда данныхбывает много Они перестают помещаться на одну машину ● Можно взять сервер побольше ● Можно взять два сервера dev.it-portfolio.net 4
  • 5.
    Как взять двасервера? ● Amazon Dynamo (~2007) ● Google BigTable (~2006) ● ^ С них все началось ● Riak, Cassandra, Voldemort, ... ● MongoDB, MemBase (CouchBase), HBase, ... dev.it-portfolio.net 5
  • 6.
    Пресловутая CAP-теорема ● Consistency ● Availability ● Partition tolerance ● ^Выберите любые два ● (Partition tolerance не выбрать нельзя) dev.it-portfolio.net 6
  • 7.
    CP или AP? ● ● CP:strong consistency (гарантии) AP: “eventually consistent DB will become eventually inconsistent one day” dev.it-portfolio.net 7
  • 8.
    Анатомия NoSQL движка ● Роутерзапросов ● “Автоматический” шардинг ● Сторадж ● ^ MongoDB ● MemBase – сторадж был сделан на базе SQLite dev.it-portfolio.net 8
  • 9.
    Анатомия HBase ● Java –язык ● JVM - платформа ● ZooKeeper – распределенный координатор ● HDFS – распределенная файловая система ● master node (SPOF) ● regionserver nodes dev.it-portfolio.net 9
  • 10.
    Анатомия HBase ● SSTable ->LSM-tree ● ^ отсортированная структура данных ● На файловой системе - файлы ● Ключ - значение ● Можно делать range scan ● Можно делать range scan по части ключа dev.it-portfolio.net 10
  • 11.
    Consistency ● ● ● ● Настолько консистентна, насколькохорош ваш fsync Транзакции только в пределах строки Полная денормализация (ни foreign keys, ни даже вторичных индексов) ^ Можно взять group commit фреймворк, разработанный третьей стороной dev.it-portfolio.net 11
  • 12.
  • 13.
    Что является клиентом? ● Мыработаем в web – скриптовые языки ● Thrift-сервер (HBase-клиент на Java) ● Через Thrift работают Python, Perl, etc... ● Мне это не очень нравится, так как может существенно нарушаться локальность данных dev.it-portfolio.net 13
  • 14.
    Какова нагрузка? ● ● ● ~6.5 Tbданных До 30Krps read/write 50/50 для 3-х region servers ^ были приняты специальные меры dev.it-portfolio.net 14
  • 15.
    Какие бывают специальныемеры? ● ● ● dfs.block.local-path-access.user = user ^ Разрешить этому пользователю локальный прямой доступ к HDFS-файлам на той же ноде dfs.client.read.shortcircuit = true – разрешить локальному клиенту читать файлы напрямую dev.it-portfolio.net 15
  • 16.
    Какие бывают специальныемеры? ● hbase.client.keyvalue.maxsize – увеличить максимальный размер файла, чтобы избежать частых сплитов региона ● Включить сжатие при записи на диск ● Закрепить таблицу в памяти ● Включить отложенный fsync ● Включить block cache для файлов dev.it-portfolio.net 16
  • 17.
    С чем столкнулисьпри эксплуатации ● ● ● ● Как обычно в Java – garbage collector Как обычно в MVCC – необходимость чистить старые данные Лучше делать pre-split регионов Лучше чтобы replication factor был соблюден (копий меньше, чем серверов) dev.it-portfolio.net 17
  • 18.
    С чем столкнулисьпри эксплуатации ● ● ● ● Однажды пришлось делать crash recovery вручную В момент сплита один из region servers упал Данные никуда не пропали, просто пришлось немного их переместить Strong consistency! dev.it-portfolio.net 18
  • 19.
    Выводы ● HBase – несамый плохой выбор ● Вы должны знать граничные условия ● ● При определенных граничных условиях можно масштабироваться безгранично ^ Если победить закон Амдала dev.it-portfolio.net 19
  • 20.
    Спасибо за внимание! ● Вопросы? ● Свами был Саша Чистяков ● ● ● Главный инженер, Git in Sky, http://gitinsky.com ^ занимаемся тюнингом Координатор, DevOps-40, http://www.meetup.com/DevOps-40 dev.it-portfolio.net 20