37
Строим сервисы на базе Nginx и Tarantool Василий Сошников Андрей Дроздов

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

  • Upload
    ontico

  • View
    878

  • Download
    3

Embed Size (px)

Citation preview

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

Строим сервисы на базе Nginx и TarantoolВасилий СошниковАндрей Дроздов

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

WEB SERVER

CACHE

STORAGE

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

WEB SERVER

CACHE

STORAGE

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

STORAGE

APP SERVERCACHE

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

Tarantool Upstream

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

Миграция

sharding

MySQL sharding

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

Архитекрура для wiki

sharding

sharding

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

Ложка и Фараон…Поищем связь вместе?

http://wiki.build.tarantool.org

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

Как устроен шардинг?

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

Зоны и избыточность

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

Шард-функция

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

Шард-функция

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

Мониторинг шардов

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

Инициализация

Node2: Node2: {'try': 0, 'ts': -1} Node1: {'try': 0, 'ts': -1} Node1: Node2: {'try': 0, 'ts': -1} Node1: {'try': 0, 'ts': 1434368336} ...

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

Штатная работа

Node2: Node2: {'try': 0, 'ts': 1434368337} Node1: {'try': 0, 'ts': 1434368337} Node1: Node2: {'try': 0, 'ts': 1434368338} Node1: {'try': 0, 'ts': 1434368339} ...

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

Ошибка в сети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} ...

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

Исключение

kill Node2 by dead timeout zone 1 has no active connections --- Node1: Node2: {'try': 10, 'ts': 1434368360} Node1: {'try': 0, 'ts': 1434368360} ...

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

Однофазные операции

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

Однофазные операции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)

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

Двухфазный протокол

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

Двухфазный протокол

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

Батчинг

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

Двухфазный протокол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()

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

Конфигурацияlocal cfg = {

servers = { -- сервера для шардинга

{ uri = 'host1:3301', zone = 'z1' };

{ uri = 'host2:3301', zone = 'z2' };

};

login = 'my_user';

password = 'i_love_bananas';

redundancy = 2; -- избыточность

binary = 3301; -- порт

}

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

Реальные условияЖелезо

• 4 ядра 2,6 GHz

• 64 GB оперативной памяти

Данные

• 100 ГБ данных, размер запроса 2 КБ(JSON)

• избыточность(2 датацентра)

Кластер

• 4 storage сервера(16 инстансов tarantool)

• 4 application сервера(16 инстансов tarantool)

• Клиентские машины для создания нагрузки

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

Архитектура

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

Критерии•ошибки на сетевом уровне

•http - 200 only

•ошибки на уровне lua

•общее количество update-запросов

•отключение узла

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

Чтение

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

Запись

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

Отключение узла

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

Архитектура

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

РезультатыЧтение

• 100 000 tps

Запись

• 47 000 tps

Запись при выключении датацентра

• 47 000 tps

• время восстановления latency < 5 секунд

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

Ссылки• Официальный сайт проекта

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