Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Backend Salad
Search
dronnix
March 30, 2013
Programming
200
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Backend Salad
Slides for talk about cross-language communications at CodeFest 2013
dronnix
March 30, 2013
Other Decks in Programming
See All in Programming
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
330
Intent as Code
shoppingjaws
6
1.1k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
1
1.2k
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
520
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
460
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
Workers Cache を知る
syumai
0
320
一人だけ、Kiroが静止する日
hideg
0
140
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
200
The Rails Doctrine Decade
koic
2
440
Webの地図
yosuke_furukawa
PRO
6
5k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Automating Front-end Workflow
addyosmani
1369
210k
Claude Code のすすめ
schroneko
67
230k
New Earth Scene 8
popppiees
4
2.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
What's in a price? How to price your products and services
michaelherold
247
13k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Optimizing for Happiness
mojombo
378
71k
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]