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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
180
Domain Driven Design. Модель вместо требований
happydev
0
430
К черту менеджерские карго культы! Дайте нормальное ТЗ
happydev
0
220
Эволюция больших проектов. Опыт API Яндекс.Карт
happydev
1
450
Мастер класс «Управленческие поединки»
happydev
0
210
Лучшая client-side архитектура
happydev
1
290
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
happydev
0
580
Вводный доклад про SQL, NoSQL и других
happydev
0
290
Other Decks in Programming
See All in Programming
SourceGeneratorのススメ
htkym
0
200
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
AgentCoreとHuman in the Loop
har1101
5
240
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
CSC307 Lecture 09
javiergs
PRO
1
840
Data-Centric Kaggle
isax1015
2
780
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
ぼくの開発環境2026
yuzneri
0
240
dchart: charts from deck markup
ajstarks
3
1k
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
79
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Being A Developer After 40
akosma
91
590k
Design in an AI World
tapps
0
150
WENDY [Excerpt]
tessaabrams
9
36k
From π to Pie charts
rasagy
0
130
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
55
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
150
4 Signs Your Business is Dying
shpigford
187
22k
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