Elliptics 
Игорь Жидков, системный администратор
〉Нужно хранить много данных, делать это распределенно в нескольких 
датацентрах 
〉Количество данных постоянно растет 
〉Данные читают, и читают много 
〉Не должно быть единой точки отказа 
〉Нужно уметь масштабировать систему 
3 
Задача хранения данных
〉RAID 1 - производительно и надежно 
〉RAID 5/6 - надежно и экономично 
4 
Как насчет RAID?
Помимо ожидаемого износа оборудования и отказа дисков 
〉Машинки перезагружаются и ломаются 
〉Случаются перебои в работе сети 
〉Целиком отключаются датацентры 
5 
Мир не идеален :(
6 
Что такое elliptics 
Elliptics 
Отказоустойчивое распределенное key-value хранилище данных с 
открытым исходным кодом (распространяется под GPL-лицензией), не 
имеющее единой точки отказа
7 
CAP теорема 
CAP теорема - выбери любые два: 
〉согласованность данных (consistency) 
〉доступность (availability) 
〉устойчивость к разделению (partition tolerance)
8 
CAP теорема
Elliptics - AP система 
Согласованность в конечном счете (eventual consistency) - в любой 
момент времени данные могут быть неконсистентны, но будут 
консистентны в практически обозримое время 
9 
CAP теорема
10 
Как работает elliptics
11 
Как работает elliptics
12 
Как работает elliptics
13 
Как работает elliptics
14 
Как работает elliptics
15 
Как работает elliptics
N - суммарное количество групп 
W - количество групп, в которое мы должны записать, чтобы транзакция 
считалась завершенной 
R - количество групп, из которых читаются данные 
В Elliptics в зависимости от задач можно использовать несколько типов 
согласованности: 
〉strong consistency - W+R > N медленно, но более надежно 
〉weak consistency - W+R<=N - быстро, но менее надежно 
16 
Отказоустойчивость
17 
Как работает elliptics
18 
Как работает elliptics
19 
Как работает elliptics
20 
Как работает elliptics
21 
Как работает elliptics
22 
Как работает elliptics
23 
Как работает elliptics
24 
Как работает elliptics
25 
Как работает elliptics
Каждый документ хранится по 512-битному ключу (sha512 от названия) 
Все ключи - кольцо с диапазоном значений от 0 до 2512 
26 
DHT в Elliptics
27 
DHT в elliptics
echo -n "hypnotoad.jpg" | sha512sum 
〉c9b70e9b62923feba1afd890891937c0486d48db99de3cc0e649319e49dfc 
ba70132e7cf073d3f1e66d61255df668e1950edddcb310b4597e37402750a2f0 
71a 
echo -n "hypnotoad1.jpg" | sha512sum 
〉02c1f6c1413fc3fc522638db83fbd76ddb54413a83e909aeeb7566acbcb19f 
1008316ff892bf33ab6f8ef4feb19112ae31e14b9d1108270234eeb29cc8cac9f 
8 
28 
DHT в elliptics
29 
DHT в elliptics
30 
DHT в elliptics
31 
DHT в elliptics
32 
DHT в elliptics
33 
DHT в elliptics
34 
DHT в elliptics
35 
DHT в elliptics
36 
DHT в elliptics
37 
DHT в elliptics
38 
DHT в elliptics
39 
DHT в elliptics
40 
DHT в elliptics
41 
DHT в elliptics
42 
DHT в elliptics
43 
DHT в elliptics
44 
DHT в elliptics
45 
DHT в elliptics
46 
DHT в elliptics
47 
DHT в elliptics
48 
DHT в elliptics
49 
DHT в elliptics
50 
DHT в elliptics
51 
DHT в elliptics
52 
DHT в elliptics
53 
DHT в датацентрах
54 
Серверная нода
55 
Eblob
56 
Eblob
57 
Итерирование eblob
58 
Итерирование eblob
59 
Итерирование eblob
60 
Итерирование eblob
Восстановление - обязательный регулярно запускаемый процесс для 
поддержания консистентности данных в Elliptics 
〉Read-recovery - восстановление при чтении 
〉Merge - восстановление в рамках одной группы 
〉DC - восстановление между группами 
61 
Восстановление
62 
Read-recovery
63 
Read-recovery
64 
Merge
65 
Dc
Легко добавлять ноды, но есть ограничения 
〉Итерирование по ноде - длительный ресурсоемкий процесс 
(упираемся в диск) 
〉Перенос и копирование ключей - упирается в сеть 
66 
Масштабируемость
67 
Mediastorage
68 
Mediastorage
69 
Mediastorage
70 
Mediastorage
71 
Mediastorage
72 
Mediastorage
73 
Mediastorage
74 
Mediastorage
75 
Mediastorage
76 
Mediastorage
77 
Mediastorage
78 
Mediastorage
79 
Mediastorage
Обе схемы имеют право на жизнь, у каждой свои преимущества и 
недостатки 
DHT: 
+ не надо хранить ключ 
+ высокая производительность 
+ хорошая отказоустойчивость 
- долгое восстановление 
- ограниченные возможности масштабирования 
80 
Итоги
Mediastorage: 
+ Легко масштабируется 
+ Хорошая отказоустойчивость 
+ Гибкость, удобство восстановления 
- Нет чистого key-value, необходимо хранить couple 
81 
Итоги
Спасибо за внимание!
https://tech.yandex.ru/elliptics/ 
https://github.com/reverbrain/elliptics 
https://github.com/yandex/mastermind 
http://reverbrain.com/elliptics/ 
83 
Ссылки

Жидков Игорь - Elliptics