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
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
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
ThorVG Viewer In VS Code
nors
0
760
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
180
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
370
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
450
「ブロックテーマでは再現できない」は本当か?
inc2734
0
600
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
6k
ぼくの開発環境2026
yuzneri
0
110
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
150
Fluid Templating in TYPO3 14
s2b
0
130
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
250
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
250
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
Building Applications with DynamoDB
mza
96
6.9k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
930
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
110
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Amusing Abliteration
ianozsvald
0
96
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]