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
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
dchart: charts from deck markup
ajstarks
3
1k
CSC307 Lecture 07
javiergs
PRO
1
560
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
100
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.6k
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
Gemini for developers
meteatamel
0
100
CSC307 Lecture 04
javiergs
PRO
0
660
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
Featured
See All Featured
HDC tutorial
michielstock
1
390
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
190
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Designing for Timeless Needs
cassininazir
0
130
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Designing for Performance
lara
610
70k
The Curse of the Amulet
leimatthew05
1
8.7k
Code Reviewing Like a Champion
maltzj
527
40k
Between Models and Reality
mayunak
1
190
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
70
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
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