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

Корпоративный шаблон микросервиса на Go

Корпоративный шаблон микросервиса на Go

Iskander (Alex) Sharipov

June 29, 2019
Tweet

More Decks by Iskander (Alex) Sharipov

Other Decks in Programming

Transcript

  1. Зачем? • Выросла команда go разработчиков от одного до восьми

    • Перешли на микросервисную архитектуру 4
  2. Зачем? • Выросла команда go разработчиков от одного до восьми

    • Перешли на микросервисную архитектуру • Каждая команда пишет сервис по-своему 5 net/http github.com/gorilla/mux github.com/go-kit/kit
  3. Зачем? • Выросла команда go разработчиков от одного до восьми

    • Перешли на микросервисную архитектуру • Каждая команда пишет сервис по-своему • Тратится много времени на создание нового сервиса 6
  4. scratch INFO creating project servicename… INFO project files generated ✔

    INFO go module created ✔ INFO git repository created ✔ INFO successfully created, now read README.md file and start coding 8 > learn-scratch init --id=servicename
  5. scratch README.md 1. Найдите в проекте все "TODO:" и сделайте

    то, что в них написано 2. Откройте каталог `pkg/sample`, реализующий контекст sample - и посмотрите код 3. Спроектируйте свой первый контекст и заложите его каркас, оглядываясь на sample 4. Удалите контекст sample 5. Зафиксируйте изменения в git TODO: за что отвечает сервис, где смотреть API, с чем работает (MySQL, Rabbit, Redis, другие сервисы? 10
  6. scratch 11 # Файлы .proto и автогенеренные файлы для gRPC

    и REST # Скрипты проекта и собранный бинарник # main пакеты # Вспомогательные данные. Например, миграции базы # Реализация сервиса
  7. scratch Плюсы хранения в контейнере: • версионирование ◦ запуск всегда

    актуальной версии утилиты • зависимости утилиты не надо устанавливать 14
  8. Немного о grpc grpc-gateway + легко генерится REST и gRPC

    на основе proto файла - поддерживает только JSON API 15
  9. function someMethod(SomeMethodInput input): SomeMethodOutput { newOutput = someMethodNew(input); legacyOutput =

    someMethodLegacy(input); // Регистрируем несовпавшие новый и старый ответы if (newOutput != null && newOutput != legacyOutput) { reportOutputMismatch(...); } return legacyOutput; } 17
  10. Итоги + сгенерили первый сервис + перешли на модули +

    перешли на grpc + не будет разных фреймворков + чистая архитектура на примере + единый makefile, dockerfile и т.д. + документация сервиса 18
  11. Планы • Обновление текущих проектов • Update проекта при обновлении

    версии шаблона • Интеграция с нашей платформой • End-to-end тесты API в шаблоне 19
  12. Полезные ссылки • Иван Королев "OZON. Making microservices from scratch"

    • grpc-gateway • Про микросервисы от Авито. У них тоже есть свой шаблон :) 21