SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Ontico
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 
Kirill A Korinskiy Rit2010 No Sql Storage
Kirill A  Korinskiy Rit2010 No Sql StorageKirill A  Korinskiy Rit2010 No Sql Storage
Kirill A Korinskiy Rit2010 No Sql Storage
rit2010
 
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Ontico
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
Ontico
 

Tendances (19)

Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterprise
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Kirill A Korinskiy Rit2010 No Sql Storage
Kirill A  Korinskiy Rit2010 No Sql StorageKirill A  Korinskiy Rit2010 No Sql Storage
Kirill A Korinskiy Rit2010 No Sql Storage
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
Drupal and NodeJS.
Drupal and NodeJS.Drupal and NodeJS.
Drupal and NodeJS.
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в Drupal
 
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systems
 
Битва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовБитва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтов
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 

En vedette

Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
Oleg Tsarev
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
it-people
 
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Alex Chistyakov
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
odnoklassniki.ru
 

En vedette (20)

Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
Диалог с воображаемым слушателем, а также поток сознания, вне контекста НЕ ИН...
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
 
Выступление в DataArt на тему "Кто такие DevOps?"
Выступление в DataArt на тему "Кто такие DevOps?"Выступление в DataArt на тему "Кто такие DevOps?"
Выступление в DataArt на тему "Кто такие DevOps?"
 
Optimization of a big PostgreSQL database
Optimization of a big PostgreSQL databaseOptimization of a big PostgreSQL database
Optimization of a big PostgreSQL database
 
DevOps-40 meetup #7, Project FiFo
DevOps-40 meetup #7, Project FiFoDevOps-40 meetup #7, Project FiFo
DevOps-40 meetup #7, Project FiFo
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
My talk on programming languages at SPbLUG Mar 2017
My talk on programming languages at SPbLUG Mar 2017My talk on programming languages at SPbLUG Mar 2017
My talk on programming languages at SPbLUG Mar 2017
 
"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)
 
HBase on HappyDev 2013
HBase on HappyDev 2013HBase on HappyDev 2013
HBase on HappyDev 2013
 
My talk at LVEE 2016
My talk at LVEE 2016My talk at LVEE 2016
My talk at LVEE 2016
 
My talk at CEE-SECR 2016
My talk at CEE-SECR 2016My talk at CEE-SECR 2016
My talk at CEE-SECR 2016
 
Harry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of BerkeleyHarry Potter and the Daemons of Berkeley
Harry Potter and the Daemons of Berkeley
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 

Similaire à HBase on Dev{Highload}

20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex Chistyakov
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
HighLoad2009
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 

Similaire à HBase on Dev{Highload} (20)

"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущего
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Rpm5
Rpm5Rpm5
Rpm5
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
 
Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 

Plus de Alex Chistyakov

Plus de Alex Chistyakov (20)

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArt
 
My slides from CC'2019
My slides from CC'2019My slides from CC'2019
My slides from CC'2019
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and Kubernetes
 
Ansible and other stuff
Ansible and other stuffAnsible and other stuff
Ansible and other stuff
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGM
 
My talk at SECR 2017
My talk at SECR 2017My talk at SECR 2017
My talk at SECR 2017
 
On scaling teams
On scaling teamsOn scaling teams
On scaling teams
 
MariaDB workshop
MariaDB workshopMariaDB workshop
MariaDB workshop
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
 

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
  • 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
  • 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