Upload
it-portfolio
View
640
Download
5
Embed Size (px)
DESCRIPTION
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуатация HBase на паре жизненных примеров", Александр Чистяков (ведущий разработчик Git in Sky)
Citation preview
HBase в веб-проектах
Александр ЧистяковГлавный инженер, Git in Sky
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