Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Строим cloud-native приложение на Go – Алексей ...

Строим cloud-native приложение на Go – Алексей Горбылёв

GopherCon Russia

April 13, 2019
Tweet

More Decks by GopherCon Russia

Other Decks in Programming

Transcript

  1. О докладе и докладчике Коротко о докладе: • Транспорт, протоколы,

    версионирование • Событийное взаимодействие • Отказоустойчивость и масштабирование • Типичные проблемы и их решения Пара слов о докладчике: • 7 лет управления разработкой • 4 года на go, до этого java и php • Опыт в e-com, ads и fintech • 5 запущенных проектов с нуля за 5 лет 2
  2. Discovery / Обнаружение 7 Пиринговые протоколы: gossip, mdns Брокеры сообщений:

    nats, nsq, rabbitmq, ... Централизованное хранилище: consul, etcd (v2, v3), zookeeper, ...
  3. Versioning / Версионирование 8 Версия в имени метода: get_user_by_id_1(id uuid)

    + Поддержка нескольких версий - Путаница Тэггирование: get_user, id_uuid + Меньше путаницы - Есть вероятность ошибки Версии у сервисов: ‘v1.2.7’==‘v1.2.7’ + Нет путаницы и дублирования - Нет поддержки нескольких версий Совпадение сигнатур: {“get_user_by_id”: {“req”: [{“name”: “id”, “type”: “uuid”}], “rsp”:[...]}} + Очень удобна - Есть вероятность коллизии
  4. Transport / Транспорт 2 способа передачи запросов и ответов между

    сервисами 9 ИЛИ Коммуникация сервисов напрямую друг с другом: http, raw socket, zmq Требует доступности портов Использование брокера сообщений: nats, rabbitmq, nsq Требует стабильности от брокера
  5. Events / События 12 Broadcasting с фильтрацией на принимающей стороне

    Прямой обмен сообщениями и связь «каждый с каждым»
  6. Events / События 13 Broadcasting с фильтрацией на принимающей стороне

    Прямой обмен сообщениями и связь «каждый с каждым» Использование брокера сообщений
  7. А всё ли так хорошо в MSA? Мой TOP-3 проблем:

    • Отладка и поиск проблемных мест • Отказ микросервисов • Консистентность данных // здесь можно добавить свои варианты :) 14
  8. Отладка и поиск проблемных мест 15 Так в чем проблема?

    • Нет step-by-step отладки • Неизвестно состояние сервисов • Одинаковые запросы могут попадать в разные сервисы • Дополнительные ошибки в транспорте и протоколе Решение? • Opentracing / Datadog / AWS X-Ray • Сквозное логгирование
  9. Ещё немного про go-micro Что ещё есть: • Kubernetes integration

    • ChatOps bot • Simple metrics • Rate limiting Недостатки: • Очень много interface{} • Использование reflect • Совсем нет security • Хочется gogo/protobuf 26
  10. И в заключение Пробуйте Micro: • https://github.com/micro/go-micro • https://github.com/micro/go-plugins •

    https://github.com/micro/kubernetes // присылайте ваши pull-request’ы 28
  11. И в заключение Пробуйте Micro: • https://github.com/micro/go-micro • https://github.com/micro/go-plugins •

    https://github.com/micro/kubernetes // присылайте ваши pull-request’ы Пробуйте альтернативы: • Go kit https://github.com/go-kit/kit • Gizmo https://github.com/nytimes/gizmo • RPCX https://github.com/smallnest/rpcx • Kite https://github.com/koding/kite 29
  12. И в заключение Пробуйте Micro: • https://github.com/micro/go-micro • https://github.com/micro/go-plugins •

    https://github.com/micro/kubernetes // присылайте ваши pull-request’ы Пробуйте альтернативы: • Go kit https://github.com/go-kit/kit • Gizmo https://github.com/nytimes/gizmo • RPCX https://github.com/smallnest/rpcx • Kite https://github.com/koding/kite 30 Создайте свой идеальный фреймворк для микро-сервисов ;)