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

1,385 views
1,320 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,385
On SlideShare
0
From Embeds
0
Number of Embeds
707
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×