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

Happydev presentation soa

Nov 28, 2014

Download

Technology

Ant Pl

Story about avs soa application
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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