15. Front
nginx
CARP nginx
Mons Anderson
Олег Мамонтов
16. Front
nginx
CARP nginx
Mons Anderson
Олег Мамонтов
17. Storage
storage
N/2
N Tb =
storage
N/2
Mons Anderson
Олег Мамонтов
18. Storage
N Tb
storage
Front hash
storage
Mons Anderson
Олег Мамонтов
19. Storage
N Tb
storage
Front hash
storage
Mons Anderson
Олег Мамонтов
20. Storage
storage
storage
Front hash
storage
storage
Mons Anderson
Олег Мамонтов
21. Storage
storage
storage
Front hash
storage
storage
Mons Anderson
Олег Мамонтов
22. Resizer
storage
storage
image_filter()
Front hash
storage
storage
image_filter()
Mons Anderson
Олег Мамонтов
23. Resizer
storage
storage
Front hash
image_filter()
Low
storage
storage CPU
image_filter()
Mons Anderson
Олег Мамонтов
24. Resizer
storage
storage
Resize
Front Resize
Resize storage
storage
Mons Anderson
Олег Мамонтов
25. Hashing
storage
storage
Resize
Front Hash Resize
Resize ? storage
storage
Mons Anderson
Олег Мамонтов
26. Hashing
storage
storage
Resize
Resize
Resize
ScaleHash(time,id)
storage
storage
Mons Anderson
Олег Мамонтов
27. Hashing
URL: http://…/ObjectID
ObjectID = (xxx)-(xxx)-…
ID Time
Mons Anderson
Олег Мамонтов
28. Hashing
a
b c
d
e
past start upgrade over future
Timeline
0x0FFF
0x00FF
0x02FF
0x0000
0x0010
Mons Anderson
Олег Мамонтов
29. Hashing
TimeHash(Time) {
0x0000 - 0x00FF [ a, b ]
0x00FF - 0x02FF [ a, c, d ]
0x02FF - 0x0FFF [ c, d ]
0x0FFF - 0xFFFF [ f ]
} groups
Mons Anderson
Олег Мамонтов
32. Access Control
ID
storage
ACLD
storage
group ACLD
Perl: DB
- AnyEvent::HTTPD
- AnyEvent::HTTP
- AnyEvent::DBI Mons Anderson
Олег Мамонтов
33. Access Control: Public object
→ GET /XXX
Perl handler (check perms)
← 200 OK
Mons Anderson
Олег Мамонтов
34. Access Control: Protected object
GET /XXX
Perl handler
X-Accel-Redirect: /access/...
GET /access/...
proxy_pass http://ACLD
X-Accel-Redirect: /int/..
GET /int/..
200 OK Mons Anderson
Олег Мамонтов
38. Cache is a problem :(
Front
Front Cache Resize Storage ACL
Mons Anderson
Олег Мамонтов
39. Front Cache Resize Storage ACLD
/i /source/ /source /source/
/i/AxB /i/AxB
proxy: ?q=/i/AxB handler() ?q=/i/AxB
//storage XAccel: /cache/i/AxB+
(mtime:ctime:status)
200 OK /i /source/ /source/
HIT /i/AxB+
proxy: ?q=/i/AxB+ ?q=/i/AxB+
//cache /source
handler() XAccel: /int
/cache /i
proxy: proxy://store
//resize resize()
cache
200 OK 200 OK 200 OK 200 OK /internal
store Mons Anderson
Олег Мамонтов
40. Combine?
Front
Front Cache Resize Storage ACL
MEM CPU HDD
Mons Anderson
Олег Мамонтов
41. Combined! Money are saved :)
Deployed on same hosts
Front
Front Cache Resize Storage ACL
Full resource consumption
Mons Anderson
Олег Мамонтов
42. Combined, but scalable!
Cache Resize Storage
cluster cluster cluster
Front
Front Cache Resize Storage ACL
Cache Resize Storage
+ + +
MEM CPU HDD Mons Anderson
Олег Мамонтов
43. Create, Update, Delete?
Storage group
GET storage
PUT
GET storage DELETE
OPTIONS
Mons Anderson
Олег Мамонтов
44. Temporary loss
Storage group
GET storage
PUT
GET storage DELETE
OPTIONS
Mons Anderson
Олег Мамонтов
45. Flashing error
Storage group
GET storage
GET storage
Mons Anderson
Олег Мамонтов
46. No file? Ask a friend!
Storage group
GET storage
404
GET storage
fallback
proxy_pass
Mons Anderson
Олег Мамонтов
47. 404 Fallback: avoiding recursion
Storage group
GET storage ask
next…
unless storage
asked
Mons Anderson
Олег Мамонтов
48. 404 Fallback
Storage group
Just...
storage
proxy_next_upstream
http_404
storage
Mons Anderson
Олег Мамонтов
49. Again about PUT
Storage group
storage
PUT
storage
Mons Anderson
Олег Мамонтов
50. How about single PUT?
Storage group
storage
PUT
ZFS
storage DELETE
«replication»
OPTIONS
Mons Anderson
Олег Мамонтов
51. Приоритеты выбора решения
● Надежность / избыточность хранения
● Производительность чтения и записи
● Возможность распределения нагрузки
● Потенциальная масштабируемость
● Стандартные аппаратные компоненты
● Простота в настройке и обслуживании
Mons Anderson
Олег Мамонтов
52. Традиционная работа с диском
Файловая система
Имя <=> объект (inode)
Файловая система
объект <=> LBA тома
Менеджер томов
LBA тома <=> LBA RAID
RAID контроллер
LBA RAID <=> LBA диска
Дисковые устройства
Mons Anderson
Олег Мамонтов
53. Rampant layering violation ;)
Файловая система (zfs)
Модель агрегации (zpool)
Дисковые устройства
Mons Anderson
Олег Мамонтов
54. stripe / mirror / raidz / ?
stripe – быстро, дешево, ненадежно
mirror – быстро, надежно, дорого
raidz – относительно надежно, недорого, медленно :(
Mons Anderson
Олег Мамонтов
55. Универсального решения нет :(
Дано: 100 дисков по 100GB, 200 IOPS
Конфигурация Объем, GB IOPS
stripe 1 x 100 10000 20000
mirror 2 x 50 5000 20000
raidz 1 x ( 99 + 1 ) 9900 200
raidz 5 x ( 19 + 1 ) 9500 1000
raidz 33 x ( 2 + 1 ) 6600 6600
Mons Anderson
Олег Мамонтов
56. Наше хранилище — 6TB / 2U
2U: 2 x 500MB + 10 x 1TB, SATA-2
mirror raidz1 raidz1 raidz1 spare
stripe
Mons Anderson
Олег Мамонтов
57. Будущее уже наступило!
snapshot
мгновенный снимок
(cow - быстро, дешево)
Mons Anderson
Олег Мамонтов
58. Будущее уже наступило!
rollback
откат файловой системы
на заданный снимок
Mons Anderson
Олег Мамонтов
59. Будущее уже наступило!
clone
“альтернативная реальность”
(ветка из снимка)
Mons Anderson
Олег Мамонтов
60. Будущее уже наступило!
send
дамп снимка
(полный или разностный)
Mons Anderson
Олег Мамонтов
62. “Почти” репликация
1. Создание мгновенного снимка (snapshot)
2. Получение инкрементального дампа (send)
3. Пересылка дампа на целевую машину (socketpipe)
4. Восстановление дампа на целевой машине (receive)
5. Создание клона файловой системы (clone)
6. Переустановка символической ссылки (link -fhs)
7. sleep && goto п.1;
Mons Anderson
Олег Мамонтов
63. Неочевидные нюансы
Зачем нужны клоны и
символические ссылки?
Mons Anderson
Олег Мамонтов
64. Неочевидные нюансы
Удаление старых
снимков и клонов
Mons Anderson
Олег Мамонтов
65. Неочевидные нюансы
● Минимизация лага репликации
● Мониторинг актуальности
● Уникальные имена файлов при обновлениях
● Двухуровневое кеширование
Mons Anderson
Олег Мамонтов