Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,260 views

Published on

Слушатели этого доклада получат представление о том, как построить отказоустойчивое, быстрое, простое и легко масштабируемое решение на базе Nginx и Tarantool.

Коротко о главном:
+ Обзор внутреннего устройства шардинга в Tarantool.
+ Обзор Tarantool upstream модуля для Nginx.
+ Результаты нагрузочного тестирования Tarantool шардинга в связке с Nginx модулем.
+ Live-demo: распределенное отображение графа категорий Wikipedia в СУБД Tarantool с единой точкой входа и возможностью реалтайм поиска по категориям.

Published in: Engineering
  • Be the first to comment

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

  1. 1. Строим сервисы на базе Nginx и Tarantool Василий Сошников Андрей Дроздов
  2. 2. WEB SERVER CACHE STORAGE
  3. 3. WEB SERVER CACHE STORAGE
  4. 4. STORAGE APP SERVER
 CACHE
  5. 5. Tarantool Upstream
  6. 6. Миграция sharding MySQL sharding
  7. 7. Архитекрура для wiki sharding sharding
  8. 8. Ложка и Фараон…
 Поищем связь вместе? http://wiki.build.tarantool.org
  9. 9. Как устроен шардинг?
  10. 10. Зоны и избыточность
  11. 11. Шард-функция
  12. 12. Шард-функция
  13. 13. Мониторинг шардов
  14. 14. Инициализация Node2: Node2: {'try': 0, 'ts': -1} Node1: {'try': 0, 'ts': -1} Node1: Node2: {'try': 0, 'ts': -1} Node1: {'try': 0, 'ts': 1434368336} ...
  15. 15. Штатная работа Node2: Node2: {'try': 0, 'ts': 1434368337} Node1: {'try': 0, 'ts': 1434368337} Node1: Node2: {'try': 0, 'ts': 1434368338} Node1: {'try': 0, 'ts': 1434368339} ...
  16. 16. Ошибка в сети 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} ...
  17. 17. Исключение kill Node2 by dead timeout zone 1 has no active connections --- Node1: Node2: {'try': 10, 'ts': 1434368360} Node1: {'try': 0, 'ts': 1434368360} ...
  18. 18. Однофазные операции
  19. 19. Однофазные операции 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)
  20. 20. Двухфазный протокол
  21. 21. Двухфазный протокол
  22. 22. Батчинг
  23. 23. Двухфазный протокол 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()
  24. 24. Конфигурация local cfg = { servers = { -- сервера для шардинга { uri = 'host1:3301', zone = 'z1' }; { uri = 'host2:3301', zone = 'z2' }; }; login = 'my_user'; password = 'i_love_bananas'; redundancy = 2; -- избыточность binary = 3301; -- порт }
  25. 25. Реальные условия Железо • 4 ядра 2,6 GHz • 64 GB оперативной памяти Данные • 100 ГБ данных, размер запроса 2 КБ(JSON) • избыточность(2 датацентра) Кластер • 4 storage сервера(16 инстансов tarantool) • 4 application сервера(16 инстансов tarantool) • Клиентские машины для создания нагрузки
  26. 26. Архитектура
  27. 27. Критерии •ошибки на сетевом уровне •http - 200 only •ошибки на уровне lua •общее количество update-запросов •отключение узла
  28. 28. Чтение
  29. 29. Запись
  30. 30. Отключение узла
  31. 31. Архитектура
  32. 32. Результаты Чтение • 100 000 tps Запись • 47 000 tps Запись при выключении датацентра • 47 000 tps • время восстановления latency < 5 секунд
  33. 33. Ссылки • Официальный сайт проекта
 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

×