Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Бэкенд-винегретКак  подружить  разные  ЯП  на  ваших  серверахАндрей  Лузин,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                   C#         Java           Objective C          OCaml     Python Smalltalk                 ...
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_tdouble      float    doublestring      str      std::s...
Перечисления
Структуры
Сервисы
Исключения
Асинхронные  методы
Транспорт  и  протокол
Транспорт•   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СтарыйСервер       ...
И  ещё
SOA vs Monolithic
Классическая  архитектура
Рост  проекта
Рост  проекта
SOA
Ограничения
Ограничения• Балансировка• Примитивные  асинхронные  методы• Stateless
Альтернативы•   Google protobuf•   Message Pack•   Apache Avro - designed with dynamic languages    in mind
Кто  использует                  • PHP + Поисковые  бэкенды                    на  C++                  • Логгер          ...
Thrift: Итого•   Кроссязыковый•   Нативный•   Гибкий
Вопросы?Андрей  Лузин,2ГИС@dronnixandrew.luzin@gmail.com
Upcoming SlideShare
Loading in …5
×

CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших серверах?

1,751 views

Published on

  • Be the first to comment

CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших серверах?

  1. 1. Бэкенд-винегретКак  подружить  разные  ЯП  на  ваших  серверахАндрей  Лузин,2GIS
  2. 2. Зачем?
  3. 3. Зачем?
  4. 4. Зачем?1.  Возможность  использовать  готовое  решение,  реализованное  на  другом  ЯП
  5. 5. Зачем: готовые решения
  6. 6. Зачем: готовые решения
  7. 7. Зачем: готовые решения
  8. 8. Зачем?1. Возможность использовать готовое решение,реализованное на другом ЯП2. Выбор  языка под задачу
  9. 9. Зачем: выбор инструмента
  10. 10. Зачем?1. Возможность использовать готовое решение,реализованное на другом ЯП2. Выбор  языка под задачу3. Возможность  плавной  миграции  проекта  на  другой  ЯП
  11. 11. Зачем: Миграция  на  другой  ЯП
  12. 12. Как?
  13. 13. Fork / Exec
  14. 14. Fork / Exec Прост  в  использовании   Универсален   Большие  накладные  расходы  на  запуск Нет  удобного  механизма  обмена  данными
  15. 15. Модули  / Экстеншены
  16. 16. Модули  / Экстеншены Нативное использование Далеко  не  все  языки  получится  подружить Медленно,  если  модулю  нужно  подгружать  данные,   необходимые  для  работы
  17. 17. Daemon + Protocol / API
  18. 18. Свой  протокол
  19. 19. Свой  протокол Нет Трудозатратно В  лучшем  случае  получится  что-то  похожее  на  готовое   решение,  в  худшем  нерасширяемый  и   трудноподдерживаемый протокол
  20. 20. REST / SOAP / XML-RPC
  21. 21. REST / SOAP / XML-RPC Расширяемость Широкая  поддержка Избыточность и  оверхед Транспорт  фиксирован  (HTTP)
  22. 22. Apache Thrift, protobuf,MessagePack, Apache Avro
  23. 23. Apache Thrift C# Java Objective C OCaml Python Smalltalk С++ Erlang Node.js Haskell Perl JavaScript C PHP Ruby Action Script 3
  24. 24. Remote Procedure Call
  25. 25. Thrift Workflow
  26. 26. Боевой  пример
  27. 27. Геокодер API 2GIS
  28. 28. Геокодер API 2GIS
  29. 29. GeocoderTypes.thrift
  30. 30. Geocoder.thrift
  31. 31. Компилируемthrift --gen cpp --gen py Geocoder.thrift
  32. 32. Python client
  33. 33. CPP server
  34. 34. Let’s  dive  into  details
  35. 35. Встроенные  типыThrift Python C++i32 int int32_tdouble float doublestring str std::stringlist<i32> [] std::vector<int32_t>map<i32, { } std::map<int32_t, std::string>string>
  36. 36. Перечисления
  37. 37. Структуры
  38. 38. Сервисы
  39. 39. Исключения
  40. 40. Асинхронные  методы
  41. 41. Транспорт  и  протокол
  42. 42. Транспорт• HTTP• TCP• Unix Socket• Memory• File
  43. 43. Протокол• JSON• Binary• Debug
  44. 44. Версионированиеstruct Result{ 1: required i64 id, 2: required i32 score, 3: optional string synonym}
  45. 45. Версионирование Добавляем Убираем поле полеСтарыйклиент Isset() ignoreСтарыйСервер ignore FAIL
  46. 46. И  ещё
  47. 47. SOA vs Monolithic
  48. 48. Классическая  архитектура
  49. 49. Рост  проекта
  50. 50. Рост  проекта
  51. 51. SOA
  52. 52. Ограничения
  53. 53. Ограничения• Балансировка• Примитивные  асинхронные  методы• Stateless
  54. 54. Альтернативы• Google protobuf• Message Pack• Apache Avro - designed with dynamic languages in mind
  55. 55. Кто  использует • PHP + Поисковые  бэкенды на  C++ • Логгер Внешний  API
  56. 56. Thrift: Итого• Кроссязыковый• Нативный• Гибкий
  57. 57. Вопросы?Андрей  Лузин,2ГИС@dronnixandrew.luzin@gmail.com

×