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

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

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

Avatar for Iskander (Alex) Sharipov

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