Happydev presentation soa
-
Upload
ant-pl -
Category
Technology
-
view
397 -
download
1
description
Transcript of Happydev presentation soa
![Page 1: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/1.jpg)
Переход к SoA архитектуре
Антон Плешивцев twitter.com/allaud github.com/allaud
aviasales.ru
![Page 2: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/2.jpg)
Как это работает?
![Page 3: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/3.jpg)
Intro• 20 000 запросов в час • 13 гигабайт данных в минуту • 6000+ билетов в сутки • 60 одновременных запросов
![Page 4: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/4.jpg)
Legacy• 1 RoR приложение • Множество функций • Поиск • Сбор статистики • Сбор информации о ценах • Рассылки • …
![Page 5: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/5.jpg)
RoR search• 350 mb памяти на процесс • Blocking io • Запуск Rails-приложения до 15 секунд
![Page 6: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/6.jpg)
Что с поддержкой?
• Неявность Ruby • Дорогая процедура добавления гейтов
• Высокий порог вхождения
![Page 7: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/7.jpg)
Что делать?
![Page 8: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/8.jpg)
Вариант #1 Оставить как есть
0
175
350
525
700
Июль Август Сентябрь Октябрь Ноябрь Декабрь
![Page 9: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/9.jpg)
Вариант #2 Глобальный рефакторинг
![Page 10: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/10.jpg)
Вариант #3 Сменить часть система на Sinatra
• Система остается сильно связанной • Много неявного
![Page 11: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/11.jpg)
Наш рецепт• Больше явности • Легкий движок • DSL для конфигурирования • RESTful-компоненты • SoA-архитектура
![Page 12: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/12.jpg)
SoA: сервисы вместо классов
params validator countries_extender
OzonGate
EviterraGate
OneTwoTripGate
merge
throttler
![Page 13: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/13.jpg)
Поддерживаем DSL{"rt_search": { "s": [ "params_validator" "countries_extender", { "p": [ {"s": ["ozon_gate"]}, {"s": ["eviterra_gate"]}, {"s": ["onetwotrip_throttler","onetwotrip_gate"]}] }, "merge" ]}};
![Page 14: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/14.jpg)
Юнит - основа системы
OneTwoTripGatethrottler
def throttler(request, config): if random() <= config: return request else: return None
![Page 15: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/15.jpg)
Как работает юнит?
places_extenderset_confconfig get_conf
raw request
extended request
![Page 16: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/16.jpg)
DSL последовательных вычисленийA B C
"s": [ «A», «B», «C» ]
![Page 17: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/17.jpg)
DSL параллельных вычислений
A
D
"s": [ «A», {«p»: [ {«s»: «B»}, {«s»: «C»} ]}, «D» ]
B
C
![Page 18: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/18.jpg)
DSL отложенных вычислений
A
"s": [ «A», {«d»: [«B»]}, «C» ]
B С
delayed
![Page 19: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/19.jpg)
Прикладной пример
sqrt(add(a,b))
add sqrt[19, 6] 5
![Page 20: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/20.jpg)
Прикладной пример #2
(…)
add[2, 3, -15] ?
(345 - 99 * a) + (77 + 234 * b) + c
add 5
(…)
![Page 21: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/21.jpg)
Данные в системе• Справочники • курсы валют • аэропорты
• Логи • поиски • клики
• Динамические данные • диплинки • результаты поиска
![Page 22: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/22.jpg)
Справочники• ФС или kyotocabinet,
mmap для экономии памяти
• Синхронизация данных - inotify
• Синхронизация внутри кластера - rsync
![Page 23: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/23.jpg)
Логи• Не работаем с глобальным хранилищем
• Работаем с хранилищем в пределах узла
![Page 24: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/24.jpg)
Динамические данные• Быстрое key-value хранилище • Избыточность во имя отказоустойчивости
![Page 25: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/25.jpg)
Технологии?• Python3 • Tornado 3.1.1 • Файловая БД kyotocabinet • Redis
![Page 26: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/26.jpg)
Как устроен кластер
Redis
MySQL
RabbitMQ
Redis
![Page 27: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/27.jpg)
Сценарий отказа #1
Redis
Redis
![Page 28: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/28.jpg)
Сценарий отказа #2
Redis
MySQL
RabbitMQ
Redis
![Page 29: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/29.jpg)
Сценарий отказа #3
MySQL
RabbitMQ
Redis
![Page 30: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/30.jpg)
Сценарий отказа #4
MySQL
RabbitMQ
Redis
![Page 31: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/31.jpg)
Yasen infrastructure
MyS
Rab
Redi
![Page 32: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/32.jpg)
Итого• С системой может работать не программист
• Отладка упростилась в разы • Система разворачивается двумя командами
• Экономия на ресурсах
![Page 33: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/33.jpg)
About
Антон Плешивцев !twitter.com/allaud github.com/allaud https://www.facebook.com/ant.pl.3 !aviasales.ru
![Page 34: Happydev presentation soa](https://reader034.fdocument.pub/reader034/viewer/2022051817/548043bfb4af9fc3158b5d63/html5/thumbnails/34.jpg)