Happydev presentation soa

34
Переход к SoA архитектуре Антон Плешивцев twitter.com/allaud github.com/allaud aviasales.ru

description

Story about avs soa application

Transcript of Happydev presentation soa

Page 1: Happydev presentation soa

Переход к SoA архитектуре

Антон Плешивцев twitter.com/allaud github.com/allaud

aviasales.ru

Page 2: Happydev presentation soa

Как это работает?

Page 3: Happydev presentation soa

Intro• 20 000 запросов в час • 13 гигабайт данных в минуту • 6000+ билетов в сутки • 60 одновременных запросов

Page 4: Happydev presentation soa

Legacy• 1 RoR приложение • Множество функций • Поиск • Сбор статистики • Сбор информации о ценах • Рассылки • …

Page 5: Happydev presentation soa

RoR search• 350 mb памяти на процесс • Blocking io • Запуск Rails-приложения до 15 секунд

Page 6: Happydev presentation soa

Что с поддержкой?

• Неявность Ruby • Дорогая процедура добавления гейтов

• Высокий порог вхождения

Page 7: Happydev presentation soa

Что делать?

Page 8: Happydev presentation soa

Вариант #1 Оставить как есть

0

175

350

525

700

Июль Август Сентябрь Октябрь Ноябрь Декабрь

Page 9: Happydev presentation soa

Вариант #2 Глобальный рефакторинг

Page 10: Happydev presentation soa

Вариант #3 Сменить часть система на Sinatra

• Система остается сильно связанной • Много неявного

Page 11: Happydev presentation soa

Наш рецепт• Больше явности • Легкий движок • DSL для конфигурирования • RESTful-компоненты • SoA-архитектура

Page 12: Happydev presentation soa

SoA: сервисы вместо классов

params validator countries_extender

OzonGate

EviterraGate

OneTwoTripGate

merge

throttler

Page 13: Happydev presentation soa

Поддерживаем 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

Юнит - основа системы

OneTwoTripGatethrottler

def throttler(request, config): if random() <= config: return request else: return None

Page 15: Happydev presentation soa

Как работает юнит?

places_extenderset_confconfig get_conf

raw request

extended request

Page 16: Happydev presentation soa

DSL последовательных вычисленийA B C

"s": [ «A», «B», «C» ]

Page 17: Happydev presentation soa

DSL параллельных вычислений

A

D

"s": [ «A», {«p»: [ {«s»: «B»}, {«s»: «C»} ]}, «D» ]

B

C

Page 18: Happydev presentation soa

DSL отложенных вычислений

A

"s": [ «A», {«d»: [«B»]}, «C» ]

B С

delayed

Page 19: Happydev presentation soa

Прикладной пример

sqrt(add(a,b))

add sqrt[19, 6] 5

Page 20: Happydev presentation soa

Прикладной пример #2

(…)

add[2, 3, -15] ?

(345 - 99 * a) + (77 + 234 * b) + c

add 5

(…)

Page 21: Happydev presentation soa

Данные в системе• Справочники • курсы валют • аэропорты

• Логи • поиски • клики

• Динамические данные • диплинки • результаты поиска

Page 22: Happydev presentation soa

Справочники• ФС или kyotocabinet,

mmap для экономии памяти

• Синхронизация данных - inotify

• Синхронизация внутри кластера - rsync

Page 23: Happydev presentation soa

Логи• Не работаем с глобальным хранилищем

• Работаем с хранилищем в пределах узла

Page 24: Happydev presentation soa

Динамические данные• Быстрое key-value хранилище • Избыточность во имя отказоустойчивости

Page 25: Happydev presentation soa

Технологии?• Python3 • Tornado 3.1.1 • Файловая БД kyotocabinet • Redis

Page 26: Happydev presentation soa

Как устроен кластер

Redis

MySQL

RabbitMQ

Redis

Page 27: Happydev presentation soa

Сценарий отказа #1

Redis

Redis

Page 28: Happydev presentation soa

Сценарий отказа #2

Redis

MySQL

RabbitMQ

Redis

Page 29: Happydev presentation soa

Сценарий отказа #3

MySQL

RabbitMQ

Redis

Page 30: Happydev presentation soa

Сценарий отказа #4

MySQL

RabbitMQ

Redis

Page 31: Happydev presentation soa

Yasen infrastructure

MyS

Rab

Redi

Page 32: Happydev presentation soa

Итого• С системой может работать не программист

• Отладка упростилась в разы • Система разворачивается двумя командами

• Экономия на ресурсах

Page 33: Happydev presentation soa

About

Антон Плешивцев !twitter.com/allaud github.com/allaud https://www.facebook.com/ant.pl.3 !aviasales.ru

Page 34: Happydev presentation soa