36
ostrovok.ru Go и стартапы

Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

  • Upload
    yandex

  • View
    531

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Go и стартапы

Page 2: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Что такое стартап

Done is better then perfect

Page 3: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Нет понимания конечной точки

Что такое стартап

Done is better then perfect

Page 4: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Нет понимания конечной точки

Постоянные эксперименты и развороты на 180 градусов

Что такое стартап

Done is better then perfect

Page 5: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Нет понимания конечной точки

Постоянные эксперименты и развороты на 180 градусов

Большой резерв для экстенсивного развития

Что такое стартап

Done is better then perfect

Page 6: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Что такое стартап

Архитектура «взрослого» проекта

Page 7: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Что такое стартап

Архитектура «стартапа»

Page 8: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Когда выбирать Go?

Simplicity Performance Libs Concurrency

Python 3 0 2 0Java 1 2 2 2C/C++ 0 3 1 1Go 2 2 0 3

Erlang 1 1 1 3

3 - отлично

2 - хорошо1 - хорошо, с серьезными оговорками0 - плачевно

Page 9: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Когда выбирать Go?В стартапе можно выделить два этапа развития

Page 10: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Когда выбирать Go?В стартапе можно выделить два этапа развитияРазработка прототипа

Page 11: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Когда выбирать Go?

Важнее всего скорость и простота разработки

Выкидываем из сравнения производительность и многозадачность, получим несомненного лидера ( python ) c 5 баллами

В стартапе можно выделить два этапа развитияРазработка прототипа

Page 12: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Когда выбирать Go?

Важнее всего скорость и простота разработки

Выкидываем из сравнения производительность и многозадачность, получим несомненного лидера ( python ) c 5 баллами

В стартапе можно выделить два этапа развитияРазработка прототипа

Необходимость как-то маштабировать написанное ранее

Page 13: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Когда выбирать Go?

Важнее всего скорость и простота разработки

Выкидываем из сравнения производительность и многозадачность, получим несомненного лидера ( python ) c 5 баллами

В стартапе можно выделить два этапа развитияРазработка прототипа

Скорость и простота разработки по-прежнему очень важна, но в некоторых случаях забивать на производительность становится невозможно

Java и Go набирают в таком случае по 7 баллов

Необходимость как-то маштабировать написанное ранее

Page 14: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Итого, где именно?

Page 15: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Итого, где именно?Идеальным вариантом для нас показался гибрид python-кода и golang-сервисов. В сервисы были вынесены:

Page 16: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Итого, где именно?Идеальным вариантом для нас показался гибрид python-кода и golang-сервисов. В сервисы были вынесены:

Система кеширования ( 1Тб данных, 90000 ключей/сек )

Page 17: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Итого, где именно?Идеальным вариантом для нас показался гибрид python-кода и golang-сервисов. В сервисы были вынесены:

Система кеширования ( 1Тб данных, 90000 ключей/сек )

Обработка и переформатирование потока данных от поставщиков ( 30-50 МБ/сек )

Page 18: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Протокол обмена

Page 19: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Протокол обмена

ØMQ

Page 20: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Протокол обмена

ØMQ

Redis queues

Page 21: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Протокол обмена

ØMQ

Redis queues

HTTP keep-alive

Page 22: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сериализация

Page 23: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сериализация

json/gzip 200/500мс

Page 24: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сериализация

json/gzip 200/500мс

msgpack/gzip 150/400мс

Page 25: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сериализация

json/gzip 200/500мс

msgpack/gzip 150/400мс

json/snappy 120/170мс

Page 26: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сериализация

json/gzip 200/500мс

msgpack/gzip 150/400мс

json/snappy 120/170мс

msgpack/snappy 80/120мс

Page 27: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Дополнительные плюсы

Page 28: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Дополнительные плюсы

Golang строго типизирован. Это приводит к тому, что формат входных и выходных данных зафиксирован. Это форсирует в коде на python элементы контрактного программирования.

Page 29: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Дополнительные плюсы

Golang строго типизирован. Это приводит к тому, что формат входных и выходных данных зафиксирован. Это форсирует в коде на python элементы контрактного программирования.

Код, будучи разбит на несколько независимых подпроектов, становится мнее связным. Каждый фрагмент можно релизить независимо.

Page 30: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сложности перехода

Page 31: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сложности переходаОтсутствие аналога virtualenv в частности и пакетного менеджера вообще. Неудобная работа с зависимостями.

Page 32: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сложности переходаОтсутствие аналога virtualenv в частности и пакетного менеджера вообще. Неудобная работа с зависимостями.

Неудобная работа со типом данных map. Пример: для того, чтобы отсортировать мэп по значениям, в каждом проекте есть собственноручно-написанный костыль.

Page 33: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сложности переходаОтсутствие аналога virtualenv в частности и пакетного менеджера вообще. Неудобная работа с зависимостями.

Неудобная работа со типом данных map. Пример: для того, чтобы отсортировать мэп по значениям, в каждом проекте есть собственноручно-написанный костыль.

Низкое качество библиотек.

Page 34: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сложности переходаОтсутствие аналога virtualenv в частности и пакетного менеджера вообще. Неудобная работа с зависимостями.

Неудобная работа со типом данных map. Пример: для того, чтобы отсортировать мэп по значениям, в каждом проекте есть собственноручно-написанный костыль.

Низкое качество библиотек.

Не работает привычный подход к тестам (отсутствие возможности «мокать» код на лету.

Page 35: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Сложности переходаОтсутствие аналога virtualenv в частности и пакетного менеджера вообще. Неудобная работа с зависимостями.

Неудобная работа со типом данных map. Пример: для того, чтобы отсортировать мэп по значениям, в каждом проекте есть собственноручно-написанный костыль.

Низкое качество библиотек.

Не работает привычный подход к тестам (отсутствие возможности «мокать» код на лету.

Непривычная работа с ошибками

Page 36: Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovok.ru

ostrovok.ru

Ваши вопросы!

!

!

Илья Биин, архитектор в компании Островок.ру !

!

!

!

!

Пишите: [email protected]