SlideShare a Scribd company logo
1 of 28
Download to read offline
Франкенштейнизация Voldemort или key-value
данные в Одноклассниках

Роман Антипин
инженер-программист
проекта Одноклассники
2
Данные в Одноклассниках
•
•
•
•
•

SQL (MSSQL): ~ 330 серверов без учета backup, ~28 TB
Blob storage (OBS): ~ 460 серверов, ~1.5 PB
Column Family (Cassandra): ~ 410 серверов, ~70 TB
Key-Value (Voldemort): ~ 220 серверов, ~2.2 TB
Key-Value, Queue (Berkeley DB): ~100 серверов, ~1 TB

3 года назад:
• SQL (MSSQL)
• Key-Value, Queue (Berkeley DB)

3
CAP теорема

4
Развитие Key-Value хранилищ

5
Решение на основе Berkley DB

6
Недостатки решения с Berkley DB
•
•
•
•
•

Низкая отказоустойчивость (data corruption)
Ограничение в масштабируемости
Сложное обслуживание (ручная работа по восстановлению)
Высокая стоимость (много update => slave == backup)
Berkley DB 4.5 (Си) необходимо использовать JNI
– Пробовали Berkley DB 5.0 (Си) – снижение производительности

7
Требования к key-value хранилищу. Итерация 1

•
•
•
•
•
•

Open source
Высокая доступность, отказоустойчивость (data corruption)
Неограниченная масштабируемость без down time
Высокая производительность для отношения 3:R / 1:W
Возможность использования дешевого железа
Простота обслуживания (минимум ручной работы, только
для восстановления персистентных отказов оборудования)

8
Анализ существующих решений (2010 г.)
• Cassandra 0.6.4
–
–
–
–

Column Family
Поддерживает Hinted Handoff и Read-repair
Java
Нет механизма определения конфликтов (timestamp)

• Voldemort 0.8.1
–
–
–
–
–

Pluggable backend (default Berkley DB)
Поддерживает Read-repair
Механизм определения конфликтов (Vector Clock)
Java
Отсутствие Hinted Handoff

• Riak
– Сопоставим с Voldemort
– Erlang

9
Архитектура Voldemort

10
Vector clock

11
Tarantool как back end для Voldemort
• In-Memory NoSQL database
– Высокая производительность без деградации
– Ограничение по RAM

•
•
•
•
•
•
•

Персистентность за счет commit logs и snapshots
Поддержка вторичных индексов
Поддержка хранимых процедур на lua
Опыт использования в @mail.ru
Кооперативная многозадачность
Отсутствие embedded решения
Максимальный размер кортежа 1Мб

12
Исследование производительности
Тесты для кластера 3 ноды с replication factor 3, read/write quorum 2
Сервера SuperMicro 2 CPU(8 cores), RAM 32 Gb, 500 Gb SATA 7200.
Размер данных ~1-5Kb, объем данных 25Gb, read 50%, write 50%

• Voldemort 0.8.1 (BerkeleyDB java edition)
– Read: ~32K req/sec
– Write: ~7.5K req/sec

• Voldemort 0.8.1 (Tarantool)
– Read: ~36K req/sec
– Write: ~9K req/sec

13
Результаты использования Voldemort+Tarantool
•
•
•
•
•

Нет повреждений данных (data corruption)
Высокая доступность (устойчивость к падению любой ноды)
Масштабируемость без down time
Время старта кластера ~20 минут (объем ноды ~80G)
Необходимость ручной работы только в случае полного
восстановления ноды или расширения кластера
• Увеличение пропускной способности (throughput) в ~2 раза
• Увеличение среднего времени операций (latency) на ~50%
• Наличие небольшого количества повторных изменений

14
Примеры использования
Всего на данный момент запущено 25 кластеров
Service

Servers

Calls / calls
per node,
ops

Average
request
time

Average
data size

Cluster
size

Instantmessenger

24

600k / 26k

1.3ms

1.5kb

224G

Suggested

12

140k / 11k

1.5ms

22kb

584G

Black list

12

400k / 33k

1.1ms

0.6kb

20G

Music playlist

9

37k / 4k

0.9ms

1.4kb

90G

P.S: ping local DC ~150µs , cross DC ~500µs
15
Графики на примере сервиса сообщений

16
Требования к key-value хранилищу. Итерация 2

•
•
•
•
•

Избавиться от In-Memory ограничения
Увеличение производительности
Простая миграция на новое хранилище
Embedded storage engine
Желательно pure Java

17
Анализ решений на замену Tarantool
• Kyoto Cabinet 1.2.76
– Key-Value
– Различные типы storage (HashDB, TreeDB, …)
– C++

• LevelDB 1.9.0
– Key-Value
– Использует LSM Tree и SSTable
– C++

• Cassandra 0.6.4
– Column Family
– Использует LSM Tree и SSTable
– Java

18
Тестовая конфигурация
• Тестовый сервер
–
–
–
–
–
–

Intel Xeon CPU E5506 2.13GHz
RAM: 48Gb
Linux kernel: 2.6.34
HDD ST3500320NS (7200rpm 32Mb)
SSD INTEL SSDSA2CW300G3
File system: xfs rw, noatime, nodiratime, delaylog, noquota

• Тестовые данные
– 90M записей key – long , value – byte[1000]

19
Kyoto Cabinet 1.2.76
Параметры: HashDB, opts=TLINEAR, bnum=200M, msiz=30G, dfunit=8
60000

Insert data, 10 threads
50000

rps

40000

30000

20000

10000

0
0

1000

2000

3000

4000

5000

6000

7000

time
20
LevelDB 1.9.0
50000

Параметры конфигурации:

45000

•
•
•
•
•
•
•

40000

30000
25000
20000
15000
10000
5000
0
0

100

200

300

400
time

500

600

700

800
30000
25000

Параметры теста:
•
•
•
•

cache hit rate 90%
read threads 30
write threads 10
write unlimited

20000
read rps

write rps

35000

max_open_files=100K
block_size=4000 byte
write_buffer_size=512M
block_cache=LRUCache(30G)
filter_policy=NewBloomFilterPolicy(10)
logs - hdd, sstables – ssd,
увеличен размер L0

15000
10000
5000
0
0

100

200

300

400
time

500

600

700

21

800
LevelDB 1.9.0
14000
12000

8000
6000
4000
2000
0
0

50

100

150
time

200

250

300
45000
40000
35000

Параметры теста:
•
•
•
•

cache hit rate 90%
read threads 30
write threads 10
write limit 10K

30000
read rps

write rps

10000

25000
20000
15000
10000
5000
0
0

50

100

150
time

200

250

300

22
Cassandra 0.6.4
90000

Параметры конфигурации:

80000

•
•
•
•
•
•

70000

50000
40000
30000
20000
10000
0
0

150

300

450

600

750

900
40000

time

35000

Параметры теста:
•
•
•
•

cache hit rate 90%
read threads 30
write threads 10
write unlimited

30000
read rps

write rps

60000

RowsCached=15M
MemtableThroughputInMB=512
IndexInterval=128
CommitLogRotationThresholdMB=128
DiskAccessMode=mmap
logs - hdd, sstables – ssd

25000
20000
15000
10000
5000
0
0

150

300

450
time

600

750

23

900
Cassandra 0.6.4
25000

15000
10000
5000
0
0

50

100

150

200

250
70000

time

60000
50000

Параметры теста:
•
•
•
•

cache hit rate 90%
read threads 30
write threads 10
write limit 10K

read rps

write rps

20000

40000
30000
20000
10000
0
0

50

100

150
time

200

250

24
LSM Tree & SSTable

25
Интересные факты
• Не используем Cassandra cache
– Используем ConcurrentLinkedHashMap SECOND_CHANCE
– Производительность ConcurrentLinkedHashMap 1.4 LRU < ~50%
– В качестве Value MemoryWrapper через sun.misc.Unsafe

• Off heap allocation malloc (glibс 2.5) -> tcmalloc
– Отсутствие деградации
– Average allocation time ~ 800 ns против десятков µs

• Тюнинг linux по примеру LVS и HAProxy, снижение average
client time на ~30%

26
Результаты
•
•
•
•

Снято ограничение In-Memory
Embedded java storage
Возможность максимально использовать железо
Увеличение производительности
–
–
–
–

Instant-messenger (~1.5 kb данные) с одной ноды ~30K -> ~90K
Cache hit rate ~95%
Reads ~75K Writes ~15K
Сокращение количества серверов с 24 -> 12

• Cleanup без полного обхода, сохраняется информация о
tombstone на каждой ноде

27
Спасибо!
Контакты
http://habrahabr.ru/company/odnoklassniki/blog/
https://github.com/odnoklassniki/

roman.antipin@odnoklassniki.ru

http://v.ok.ru

More Related Content

What's hot

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandraodnoklassniki.ru
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)Ontico
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Ontico
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Ontico
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016Alex Chistyakov
 
Марина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизуМарина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизуYandex
 
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)Ontico
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Ontico
 

What's hot (20)

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
Марина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизуМарина Широчкина: Верстка. Вид снизу
Марина Широчкина: Верстка. Вид снизу
 
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
 

Viewers also liked

Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013odnoklassniki.ru
 
Взломать одноклассники или взлом в одноклассниках
Взломать одноклассники или взлом в одноклассникахВзломать одноклассники или взлом в одноклассниках
Взломать одноклассники или взлом в одноклассникахodnoklassik
 
Java Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVMJava Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVModnoklassniki.ru
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013it-people
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014odnoklassniki.ru
 
"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)AvitoTech
 
Зачем в Avito Аналитика?
Зачем в Avito Аналитика?Зачем в Avito Аналитика?
Зачем в Avito Аналитика?AvitoTech
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)AvitoTech
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
 
Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...Ontico
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooMail.ru Group
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
 

Viewers also liked (20)

Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
Being closer to Cassandra by Oleg Anastasyev. Talk at Cassandra Summit EU 2013
 
Взломать одноклассники или взлом в одноклассниках
Взломать одноклассники или взлом в одноклассникахВзломать одноклассники или взлом в одноклассниках
Взломать одноклассники или взлом в одноклассниках
 
Java Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVMJava Runtime: повседневные обязанности JVM
Java Runtime: повседневные обязанности JVM
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
Add a bit of ACID to Cassandra. Cassandra Summit EU 2014
 
"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)
 
Зачем в Avito Аналитика?
Зачем в Avito Аналитика?Зачем в Avito Аналитика?
Зачем в Avito Аналитика?
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 

Similar to Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Антипин

Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...tfmailru
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with JavaAndrei Pangin
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераDaniel Podolsky
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиVsevolod Shabad
 
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...IBS
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Ontico
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...rit2011
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Oracle exa2 biz_summit
Oracle exa2 biz_summitOracle exa2 biz_summit
Oracle exa2 biz_summitNick Turunov
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupMail.ru Group
 
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктурыОбработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктурыVsevolod Shabad
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаIgor Khokhryakov
 
подходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших системподходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших системDenis Pavlov
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
Современные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO StorageСовременные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO StorageDEPO Computers
 

Similar to Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Антипин (20)

Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими данными
 
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
Максим Исаев, IBS. Практика использования комплекса Veritas NetBackup для мод...
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Oracle exa2 biz_summit
Oracle exa2 biz_summitOracle exa2 biz_summit
Oracle exa2 biz_summit
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
 
High Load
High LoadHigh Load
High Load
 
SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация) SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация)
 
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктурыОбработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
 
Cassandra:Курс молодого бойца
Cassandra:Курс молодого бойцаCassandra:Курс молодого бойца
Cassandra:Курс молодого бойца
 
подходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших системподходы к проектрованию, разработке и развертыванию больших систем
подходы к проектрованию, разработке и развертыванию больших систем
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Современные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO StorageСовременные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO Storage
 

More from odnoklassniki.ru

Distributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevdayDistributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevdayodnoklassniki.ru
 
Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015odnoklassniki.ru
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассникахodnoklassniki.ru
 
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей ПаньгинАварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгинodnoklassniki.ru
 
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.odnoklassniki.ru
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераodnoklassniki.ru
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruodnoklassniki.ru
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...odnoklassniki.ru
 

More from odnoklassniki.ru (8)

Distributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevdayDistributed systems at ok.ru #rigadevday
Distributed systems at ok.ru #rigadevday
 
Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015Тестирование аварий. Андрей Губа. Highload++ 2015
Тестирование аварий. Андрей Губа. Highload++ 2015
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассниках
 
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей ПаньгинАварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
Аварийный дамп – чёрный ящик упавшей JVM. Андрей Паньгин
 
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
 

Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Антипин

  • 1. Франкенштейнизация Voldemort или key-value данные в Одноклассниках Роман Антипин инженер-программист проекта Одноклассники
  • 2. 2
  • 3. Данные в Одноклассниках • • • • • SQL (MSSQL): ~ 330 серверов без учета backup, ~28 TB Blob storage (OBS): ~ 460 серверов, ~1.5 PB Column Family (Cassandra): ~ 410 серверов, ~70 TB Key-Value (Voldemort): ~ 220 серверов, ~2.2 TB Key-Value, Queue (Berkeley DB): ~100 серверов, ~1 TB 3 года назад: • SQL (MSSQL) • Key-Value, Queue (Berkeley DB) 3
  • 7. Недостатки решения с Berkley DB • • • • • Низкая отказоустойчивость (data corruption) Ограничение в масштабируемости Сложное обслуживание (ручная работа по восстановлению) Высокая стоимость (много update => slave == backup) Berkley DB 4.5 (Си) необходимо использовать JNI – Пробовали Berkley DB 5.0 (Си) – снижение производительности 7
  • 8. Требования к key-value хранилищу. Итерация 1 • • • • • • Open source Высокая доступность, отказоустойчивость (data corruption) Неограниченная масштабируемость без down time Высокая производительность для отношения 3:R / 1:W Возможность использования дешевого железа Простота обслуживания (минимум ручной работы, только для восстановления персистентных отказов оборудования) 8
  • 9. Анализ существующих решений (2010 г.) • Cassandra 0.6.4 – – – – Column Family Поддерживает Hinted Handoff и Read-repair Java Нет механизма определения конфликтов (timestamp) • Voldemort 0.8.1 – – – – – Pluggable backend (default Berkley DB) Поддерживает Read-repair Механизм определения конфликтов (Vector Clock) Java Отсутствие Hinted Handoff • Riak – Сопоставим с Voldemort – Erlang 9
  • 12. Tarantool как back end для Voldemort • In-Memory NoSQL database – Высокая производительность без деградации – Ограничение по RAM • • • • • • • Персистентность за счет commit logs и snapshots Поддержка вторичных индексов Поддержка хранимых процедур на lua Опыт использования в @mail.ru Кооперативная многозадачность Отсутствие embedded решения Максимальный размер кортежа 1Мб 12
  • 13. Исследование производительности Тесты для кластера 3 ноды с replication factor 3, read/write quorum 2 Сервера SuperMicro 2 CPU(8 cores), RAM 32 Gb, 500 Gb SATA 7200. Размер данных ~1-5Kb, объем данных 25Gb, read 50%, write 50% • Voldemort 0.8.1 (BerkeleyDB java edition) – Read: ~32K req/sec – Write: ~7.5K req/sec • Voldemort 0.8.1 (Tarantool) – Read: ~36K req/sec – Write: ~9K req/sec 13
  • 14. Результаты использования Voldemort+Tarantool • • • • • Нет повреждений данных (data corruption) Высокая доступность (устойчивость к падению любой ноды) Масштабируемость без down time Время старта кластера ~20 минут (объем ноды ~80G) Необходимость ручной работы только в случае полного восстановления ноды или расширения кластера • Увеличение пропускной способности (throughput) в ~2 раза • Увеличение среднего времени операций (latency) на ~50% • Наличие небольшого количества повторных изменений 14
  • 15. Примеры использования Всего на данный момент запущено 25 кластеров Service Servers Calls / calls per node, ops Average request time Average data size Cluster size Instantmessenger 24 600k / 26k 1.3ms 1.5kb 224G Suggested 12 140k / 11k 1.5ms 22kb 584G Black list 12 400k / 33k 1.1ms 0.6kb 20G Music playlist 9 37k / 4k 0.9ms 1.4kb 90G P.S: ping local DC ~150µs , cross DC ~500µs 15
  • 16. Графики на примере сервиса сообщений 16
  • 17. Требования к key-value хранилищу. Итерация 2 • • • • • Избавиться от In-Memory ограничения Увеличение производительности Простая миграция на новое хранилище Embedded storage engine Желательно pure Java 17
  • 18. Анализ решений на замену Tarantool • Kyoto Cabinet 1.2.76 – Key-Value – Различные типы storage (HashDB, TreeDB, …) – C++ • LevelDB 1.9.0 – Key-Value – Использует LSM Tree и SSTable – C++ • Cassandra 0.6.4 – Column Family – Использует LSM Tree и SSTable – Java 18
  • 19. Тестовая конфигурация • Тестовый сервер – – – – – – Intel Xeon CPU E5506 2.13GHz RAM: 48Gb Linux kernel: 2.6.34 HDD ST3500320NS (7200rpm 32Mb) SSD INTEL SSDSA2CW300G3 File system: xfs rw, noatime, nodiratime, delaylog, noquota • Тестовые данные – 90M записей key – long , value – byte[1000] 19
  • 20. Kyoto Cabinet 1.2.76 Параметры: HashDB, opts=TLINEAR, bnum=200M, msiz=30G, dfunit=8 60000 Insert data, 10 threads 50000 rps 40000 30000 20000 10000 0 0 1000 2000 3000 4000 5000 6000 7000 time 20
  • 21. LevelDB 1.9.0 50000 Параметры конфигурации: 45000 • • • • • • • 40000 30000 25000 20000 15000 10000 5000 0 0 100 200 300 400 time 500 600 700 800 30000 25000 Параметры теста: • • • • cache hit rate 90% read threads 30 write threads 10 write unlimited 20000 read rps write rps 35000 max_open_files=100K block_size=4000 byte write_buffer_size=512M block_cache=LRUCache(30G) filter_policy=NewBloomFilterPolicy(10) logs - hdd, sstables – ssd, увеличен размер L0 15000 10000 5000 0 0 100 200 300 400 time 500 600 700 21 800
  • 22. LevelDB 1.9.0 14000 12000 8000 6000 4000 2000 0 0 50 100 150 time 200 250 300 45000 40000 35000 Параметры теста: • • • • cache hit rate 90% read threads 30 write threads 10 write limit 10K 30000 read rps write rps 10000 25000 20000 15000 10000 5000 0 0 50 100 150 time 200 250 300 22
  • 23. Cassandra 0.6.4 90000 Параметры конфигурации: 80000 • • • • • • 70000 50000 40000 30000 20000 10000 0 0 150 300 450 600 750 900 40000 time 35000 Параметры теста: • • • • cache hit rate 90% read threads 30 write threads 10 write unlimited 30000 read rps write rps 60000 RowsCached=15M MemtableThroughputInMB=512 IndexInterval=128 CommitLogRotationThresholdMB=128 DiskAccessMode=mmap logs - hdd, sstables – ssd 25000 20000 15000 10000 5000 0 0 150 300 450 time 600 750 23 900
  • 24. Cassandra 0.6.4 25000 15000 10000 5000 0 0 50 100 150 200 250 70000 time 60000 50000 Параметры теста: • • • • cache hit rate 90% read threads 30 write threads 10 write limit 10K read rps write rps 20000 40000 30000 20000 10000 0 0 50 100 150 time 200 250 24
  • 25. LSM Tree & SSTable 25
  • 26. Интересные факты • Не используем Cassandra cache – Используем ConcurrentLinkedHashMap SECOND_CHANCE – Производительность ConcurrentLinkedHashMap 1.4 LRU < ~50% – В качестве Value MemoryWrapper через sun.misc.Unsafe • Off heap allocation malloc (glibс 2.5) -> tcmalloc – Отсутствие деградации – Average allocation time ~ 800 ns против десятков µs • Тюнинг linux по примеру LVS и HAProxy, снижение average client time на ~30% 26
  • 27. Результаты • • • • Снято ограничение In-Memory Embedded java storage Возможность максимально использовать железо Увеличение производительности – – – – Instant-messenger (~1.5 kb данные) с одной ноды ~30K -> ~90K Cache hit rate ~95% Reads ~75K Writes ~15K Сокращение количества серверов с 24 -> 12 • Cleanup без полного обхода, сохраняется информация о tombstone на каждой ноде 27