Строим сервисы на базе Nginx и Tarantool Василий Сошников Андрей Дроздов
WEB SERVER CACHE STORAGE
WEB SERVER CACHE STORAGE
STORAGE APP SERVER
 CACHE
Tarantool Upstream
Миграция sharding MySQL sharding
Архитекрура для wiki sharding sharding
Ложка и Фараон…
 Поищем связь вместе? http://wiki.build.tarantool.org
Как устроен шардинг?
Зоны и избыточность
Шард-функция
Шард-функция
Мониторинг шардов
Инициализация Node2: Node2: {'try': 0, 'ts': -1} Node1: {'try': 0, 'ts': -1} Node1: Node2: {'try': 0, 'ts': -1} Node1: {'try': 0, 'ts': 1434368336} ...
Штатная работа Node2: Node2: {'try': 0, 'ts': 1434368337} Node1: {'try': 0, 'ts': 1434368337} Node1: Node2: {'try': 0, 'ts': 1434368338} Node1: {'try': 0, 'ts': 1434368339} ...
Ошибка в сети Node2 connection failed --- Node2: Node2: {'try': 0, 'ts': 1434368354} Node1: {'try': 0, 'ts': 1434368353} Node1: Node2: {'try': 6, 'ts': 1434368358} Node1: {'try': 0, 'ts': 1434368357} ...
Исключение kill Node2 by dead timeout zone 1 has no active connections --- Node1: Node2: {'try': 10, 'ts': 1434368360} Node1: {'try': 0, 'ts': 1434368360} ...
Однофазные операции
Однофазные операции shard.demo:insert{1, 'test'} shard.demo:replace{1, 'test2'} shard.demo:update(1, {{'=', 2, 'test3'}}) shard.demo:insert{2, 'test4'} shard.demo:insert{3, 'test5'} shard.demo:delete(3)
Двухфазный протокол
Двухфазный протокол
Батчинг
Двухфазный протокол batch = shard.q_begin() batch.demo:q_insert(1, {0, 'test'}) batch.demo:q_replace(2, {0, 'test2'}) batch.demo:q_update(3, 0, {{'=', 2, 'test3'}}) batch.demo:q_insert(4, {1, 'test4'}) batch.demo:q_insert(5, {2, 'test_to_delete'}) batch.demo:q_delete(6, 2) batch:q_end()
Конфигурация local cfg = { servers = { -- сервера для шардинга { uri = 'host1:3301', zone = 'z1' }; { uri = 'host2:3301', zone = 'z2' }; }; login = 'my_user'; password = 'i_love_bananas'; redundancy = 2; -- избыточность binary = 3301; -- порт }
Реальные условия Железо • 4 ядра 2,6 GHz • 64 GB оперативной памяти Данные • 100 ГБ данных, размер запроса 2 КБ(JSON) • избыточность(2 датацентра) Кластер • 4 storage сервера(16 инстансов tarantool) • 4 application сервера(16 инстансов tarantool) • Клиентские машины для создания нагрузки
Архитектура
Критерии •ошибки на сетевом уровне •http - 200 only •ошибки на уровне lua •общее количество update-запросов •отключение узла
Чтение
Запись
Отключение узла
Архитектура
Результаты Чтение • 100 000 tps Запись • 47 000 tps Запись при выключении датацентра • 47 000 tps • время восстановления latency < 5 секунд
Ссылки • Официальный сайт проекта
 http://tarantool.org • Shard
 https://github.com/tarantool/shard • Nginx module
 https://github.com/tarantool/nginx_upstream_module • Исходники Wiki demo
 https://github.com/Sulverus/tarantool-wiki-lookup

Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (Mail.Ru)