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
300
Переход к SoA архитектуре
Антон Плешивцев
HappyDev'13
December 07, 2013
Tweet
Share
More Decks by HappyDev'13
See All by HappyDev'13
Вводный доклад о процессах и ролях, требованиях и визуализации
happydev
0
180
Особенности разработки финансовых проектов
happydev
0
160
Domain Driven Design. Модель вместо требований
happydev
0
400
К черту менеджерские карго культы! Дайте нормальное ТЗ
happydev
0
180
Эволюция больших проектов. Опыт API Яндекс.Карт
happydev
1
380
Мастер класс «Управленческие поединки»
happydev
0
160
Лучшая client-side архитектура
happydev
1
250
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
happydev
0
520
Вводный доклад про SQL, NoSQL и других
happydev
0
230
Other Decks in Programming
See All in Programming
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
0
110
Good first issues of TypeProf
mame
1
300
チーム立ち上げにAWSを活用したらClaudeさんに褒められた話
mkdev10
3
230
FoodGram
iseruuuuu
0
230
AppRouter Panel Talk
yosuke_furukawa
PRO
1
520
Docker_OSS_ホスティング入門
satokoki645
0
140
Embedding it into Ruby code
soutaro
0
120
Introducing Kotlin Multiplatform in an existing mobile app - Workshop Edition | AndroidMakers Paris
prof18
0
170
2024 コーディング研修
ckazu
2
630
AmperとFleetを使ったAndroidアプリ
yoppie
0
300
Jetpack Composeとデザインシステム
rmakiyama
0
220
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
0
880
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
A better future with KSS
kneath
231
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
12
1.1k
Building Adaptive Systems
keathley
32
1.9k
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
4 Signs Your Business is Dying
shpigford
176
21k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Creatively Recalculating Your Daily Design Routine
revolveconf
211
11k
Building Effective Engineering Teams - LeadDev
addyosmani
33
1.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
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