Slide 1

Slide 1 text

Корпоративный шаблон микросервиса на Go Шихалеев Илья Архитектор ПО, iSpring

Slide 2

Slide 2 text

Зачем? 2

Slide 3

Slide 3 text

Зачем? ● Выросла команда go разработчиков от одного до десяти 3

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Зачем? ● Выросла команда go разработчиков от одного до восьми ● Перешли на микросервисную архитектуру ● Каждая команда пишет сервис по-своему ● Тратится много времени на создание нового сервиса 6

Slide 7

Slide 7 text

Отличный пример от разработчиков из OZON: Иван Королев "OZON. Making microservices from scratch" Зачем? 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

scratch README.md ● GO111MODULE=on make ● docker-compose up --build 9 +

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

scratch 11 # Файлы .proto и автогенеренные файлы для gRPC и REST # Скрипты проекта и собранный бинарник # main пакеты # Вспомогательные данные. Например, миграции базы # Реализация сервиса

Slide 12

Slide 12 text

scratch 12

Slide 13

Slide 13 text

scratch А как запускается утилита learn-scratch? 13 > learn-scratch init terminal learn-scratch:master

Slide 14

Slide 14 text

scratch Плюсы хранения в контейнере: ● версионирование ○ запуск всегда актуальной версии утилиты ● зависимости утилиты не надо устанавливать 14

Slide 15

Slide 15 text

Немного о grpc grpc-gateway + легко генерится REST и gRPC на основе proto файла - поддерживает только JSON API 15

Slide 16

Slide 16 text

Немного о grpc 16

Slide 17

Slide 17 text

function someMethod(SomeMethodInput input): SomeMethodOutput { newOutput = someMethodNew(input); legacyOutput = someMethodLegacy(input); // Регистрируем несовпавшие новый и старый ответы if (newOutput != null && newOutput != legacyOutput) { reportOutputMismatch(...); } return legacyOutput; } 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Планы ● Обновление текущих проектов ● Update проекта при обновлении версии шаблона ● Интеграция с нашей платформой ● End-to-end тесты API в шаблоне 19

Slide 20

Slide 20 text

Спасибо за внимание! 20

Slide 21

Slide 21 text

Полезные ссылки ● Иван Королев "OZON. Making microservices from scratch" ● grpc-gateway ● Про микросервисы от Авито. У них тоже есть свой шаблон :) 21