Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Переход к SoA архитектуре
Search
HappyDev'13
December 07, 2013
Programming
0
320
Переход к SoA архитектуре
Антон Плешивцев
HappyDev'13
December 07, 2013
Tweet
Share
More Decks by HappyDev'13
See All by HappyDev'13
Вводный доклад о процессах и ролях, требованиях и визуализации
happydev
0
210
Особенности разработки финансовых проектов
happydev
0
170
Domain Driven Design. Модель вместо требований
happydev
0
420
К черту менеджерские карго культы! Дайте нормальное ТЗ
happydev
0
210
Эволюция больших проектов. Опыт API Яндекс.Карт
happydev
1
440
Мастер класс «Управленческие поединки»
happydev
0
190
Лучшая client-side архитектура
happydev
1
280
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
happydev
0
570
Вводный доклад про SQL, NoSQL и других
happydev
0
280
Other Decks in Programming
See All in Programming
Practical Tips and Tricks for Working with Compose Multiplatform Previews (mDevCamp 2025)
stewemetal
0
120
人には人それぞれのサービス層がある
shimabox
3
660
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
0
280
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
200
JSAI2025 RecSysChallenge2024 優勝報告
unonao
1
450
SODA - FACT BOOK
sodainc
1
800
Devinで実践する!AIエージェントと協働する開発組織の作り方
masahiro_nishimi
6
2.9k
RubyKaigiで得られる10の価値 〜Ruby話を聞くことだけが RubyKaigiじゃない〜
tomohiko9090
0
140
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
650
単体テストの始め方/作り方
toms74209200
0
420
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
0
110
業務自動化をJavaとSeleniumとAWS Lambdaで実現した方法
greenflagproject
1
100
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
680
A better future with KSS
kneath
239
17k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Music & Morning Musume
bryan
46
6.6k
Side Projects
sachag
454
42k
YesSQL, Process and Tooling at Scale
rocio
172
14k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Code Review Best Practice
trishagee
68
18k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Transcript
Переход к SoA архитектуре Антон Плешивцев twitter.com/allaud github.com/allaud aviasales.ru
Как это работает?
Intro • 20 000 запросов в час • 13 гигабайт
данных в минуту • 6000+ билетов в сутки • 60 одновременных запросов
Legacy • 1 RoR приложение • Множество функций • Поиск
• Сбор статистики • Сбор информации о ценах • Рассылки • …
RoR search • 350 mb памяти на процесс • Blocking
io • Запуск Rails-приложения до 15 секунд
Что с поддержкой? • Неявность Ruby • Дорогая процедура добавления
гейтов • Высокий порог вхождения
Что делать?
Вариант #1 Оставить как есть 0 175 350 525 700
Июль Август Сентябрь Октябрь Ноябрь Декабрь
Вариант #2 Глобальный рефакторинг
Вариант #3 Сменить часть система на Sinatra • Система остается
сильно связанной • Много неявного
Наш рецепт • Больше явности • Легкий движок • DSL
для конфигурирования • RESTful-компоненты • SoA-архитектура
SoA: сервисы вместо классов params validator countries_extender OzonGate EviterraGate OneTwoTripGate
merge throttler
Поддерживаем DSL {"rt_search": { "s": [ "params_validator" "countries_extender", { "p":
[ {"s": ["ozon_gate"]}, {"s": ["eviterra_gate"]}, {"s": ["onetwotrip_throttler","onetwotrip_gate"]}] }, "merge" ]}};
Юнит - основа системы OneTwoTripGate throttler def throttler(request, config): if
random() <= config: return request else: return None
Как работает юнит? places_extender set_conf config get_conf raw request extended
request
DSL последовательных вычислений A B C "s": [ «A», «B»,
«C» ]
DSL параллельных вычислений A D "s": [ «A», {«p»: [
{«s»: «B»}, {«s»: «C»} ]}, «D» ] B C
DSL отложенных вычислений A "s": [ «A», {«d»: [«B»]}, «C»
] B С delayed
Прикладной пример sqrt(add(a,b)) add sqrt [19, 6] 5
Прикладной пример #2 (…) add [2, 3, -15] ? (345
- 99 * a) + (77 + 234 * b) + c add 5 (…)
Данные в системе • Справочники • курсы валют • аэропорты
• Логи • поиски • клики • Динамические данные • диплинки • результаты поиска
Справочники • ФС или kyotocabinet, mmap для экономии памяти •
Синхронизация данных - inotify • Синхронизация внутри кластера - rsync
Логи • Не работаем с глобальным хранилищем • Работаем с
хранилищем в пределах узла
Динамические данные • Быстрое key-value хранилище • Избыточность во имя
отказоустойчивости
Технологии? • Python3 • Tornado 3.1.1 • Файловая БД kyotocabinet
• Redis
Как устроен кластер Redis MySQL Rabbit MQ Redis
Сценарий отказа #1 Redis Redis
Сценарий отказа #2 Redis MySQL Rabbit MQ Redis
Сценарий отказа #3 MySQL Rabbit MQ Redis
Сценарий отказа #4 MySQL Rabbit MQ Redis
Yasen infrastructure MyS Rab Redi
Итого • С системой может работать не программист • Отладка
упростилась в разы • Система разворачивается двумя командами • Экономия на ресурсах
About Антон Плешивцев ! twitter.com/allaud github.com/allaud https://www.facebook.com/ant.pl.3 ! aviasales.ru
None