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
190
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
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
480
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
1
300
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.2k
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.5k
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
140
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
距離関数を極める! / SESSIONS 2024
gam0022
0
290
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
190
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
110
Featured
See All Featured
Happy Clients
brianwarren
98
6.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
How STYLIGHT went responsive
nonsquared
95
5.2k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Embracing the Ebb and Flow
colly
84
4.5k
A Philosophy of Restraint
colly
203
16k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Site-Speed That Sticks
csswizardry
0
28
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]