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
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
140
GCCのプラグインを作る / I Made a GCC Plugin
shouth
1
150
EventSourcingの理想と現実
wenas
6
2.1k
Synchronizationを支える技術
s_shimotori
1
150
カラム追加で増えるActiveRecordのメモリサイズ イメージできますか?
asayamakk
4
1.6k
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
360
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4.1k
色々なIaCツールを実際に触って比較してみる
iriikeita
0
280
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
2
2.1k
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
390
Macとオーディオ再生 2024/11/02
yusukeito
0
230
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
400
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
334
57k
Designing for humans not robots
tammielis
249
25k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Building an army of robots
kneath
302
42k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
107
49k
Optimizing for Happiness
mojombo
376
69k
Typedesign – Prime Four
hannesfritz
39
2.4k
Building Your Own Lightsaber
phodgson
102
6.1k
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]