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
Backend Salad
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
dronnix
March 30, 2013
Programming
1
200
Backend Salad
Slides for talk about cross-language communications at CodeFest 2013
dronnix
March 30, 2013
Tweet
Share
Other Decks in Programming
See All in Programming
Data-Centric Kaggle
isax1015
2
770
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
450
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
AgentCoreとHuman in the Loop
har1101
5
230
CSC307 Lecture 07
javiergs
PRO
0
550
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The SEO identity crisis: Don't let AI make you average
varn
0
67
The Limits of Empathy - UXLibs8
cassininazir
1
210
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.6k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Leo the Paperboy
mayatellez
4
1.4k
Fireside Chat
paigeccino
41
3.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
110
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Transcript
Бэкенд-винегрет Как подружить разные ЯП на ваших серверах Андрей Лузин,
2GIS
Зачем?
Зачем?
Зачем? 1. Возможность использовать готовое решение, реализованное на другом ЯП
Зачем: готовые решения
Зачем: готовые решения
Зачем: готовые решения
Зачем? 1. Возможность использовать готовое решение, реализованное на другом ЯП
2. Выбор языка под задачу
Зачем: выбор инструмента
Зачем? 1. Возможность использовать готовое решение, реализованное на другом ЯП
2. Выбор языка под задачу 3. Возможность плавной миграции проекта на другой ЯП
Зачем: Миграция на другой ЯП
Как?
Fork / Exec
Fork / Exec Прост в использовании Универсален Большие накладные расходы
на запуск Нет удобного механизма обмена данными
Модули / Экстеншены
Модули / Экстеншены Нативное использование Далеко не все языки получится
подружить Медленно, если модулю нужно подгружать данные, необходимые для работы
Daemon + Protocol / API
Свой протокол
Свой протокол Нет Трудозатратно В лучшем случае получится что-то похожее
на готовое решение, в худшем нерасширяемый и трудноподдерживаемый протокол
REST / SOAP / XML-RPC
REST / SOAP / XML-RPC Расширяемость Широкая поддержка Избыточность и
оверхед Транспорт фиксирован (HTTP)
Apache Thrift, protobuf, MessagePack, Apache Avro
Apache Thrift С++ PHP C# Python Erlang Java Ruby Perl
Objective C C Haskell JavaScript Node.js OCaml Smalltalk Action Script 3
Remote Procedure Call
Thrift Workflow
Боевой пример
Геокодер API 2GIS
Геокодер API 2GIS
GeocoderTypes.thrift
Geocoder.thrift
Компилируем thrift --gen cpp --gen py Geocoder.thrift
Python client
CPP server
Let’s dive into details
Встроенные типы Thrift Python C++ i32 int int32_t double float
double string str std::string list<i32> [ ] std::vector<int32_t> map<i32, string> { } std::map<int32_t, std::string>
Перечисления
Структуры
Сервисы
Исключения
Асинхронные методы
Транспорт и протокол
Транспорт • HTTP • TCP • Unix Socket • Memory
• File
Протокол • JSON • Binary • Debug
Версионирование struct Result { 1: required i64 id, 2: required
i32 score, 3: optional string synonym }
Версионирование Добавляем поле Убираем поле Старый клиент Isset() ignore Старый
Сервер ignore FAIL
И ещё
SOA vs Monolithic
Классическая архитектура
Рост проекта
Рост проекта
SOA
Ограничения
Ограничения • Балансировка • Примитивные асинхронные методы • Stateless
Альтернативы • Google protobuf • Message Pack • Apache Avro
- designed with dynamic languages in mind
Кто использует • PHP + Поисковые бэкенды на C++ •
Логгер Внешний API
Thrift: Итого • Кроссязыковый • Нативный • Гибкий
Вопросы? Андрей Лузин, 2ГИС @dronnix
[email protected]