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

Рефакторинг монолита в микросервисы на Go

Рефакторинг монолита в микросервисы на Go

Слайды с выступления на GDG DevFest 2016 в Алматы и Бишкеке

Andrew Minkin

November 08, 2016
Tweet

More Decks by Andrew Minkin

Other Decks in Programming

Transcript

  1. Кто я • TeamLead в MadDevs.io • Nambataxi.com • Nambafood.kg

    • Cybernamba.com • Kuppi.kg • Moika.kg • House.kg
  2. Namba Taxi • 4 года на рынке Бишкека • Не

    менее 8к заказов в сутки
  3. Namba Taxi • 4 года на рынке Бишкека • Не

    менее 8к заказов в сутки • 600+ водителей на линии
  4. Namba Taxi • 4 года на рынке Бишкека • Не

    менее 8к заказов в сутки • 600+ водителей на линии • 300к довольных клиентов
  5. Namba Taxi • 4 года на рынке Бишкека • Не

    менее 8к заказов в сутки • 600+ водителей на линии • 300к довольных клиентов • 300 рпс на серверах
  6. Как вызвать такси • Приложение • СМС • Сайт •

    IPTV • Сторонние приложения (вызов по API)
  7. Как вызвать такси • Приложение • СМС • Сайт •

    IPTV • Сторонние приложения (вызов по API) • Позвонить оператору
  8. Что делает оператор • Клиенты • Входящие/исходящие звонки • Заказы

    • Наблюдение • Водители • Тревога • Подержка
  9. Сервисы? Какие сервисы • Отправщик пушей. • Отправщик СМС •

    Backend для водителей • Бекенд для клиентов
  10. Что в Django • Отдел контроля качества • Прием платежей

    • Учетное ядро • Отчеты • API для водителей • Менеджерская для управления
  11. Проблемы • Приложение – один большой кусок, который нужно выкатывать

    очень часто • Невозможно параллельно, многопоточно выполнять какие- то задачи • Много интеграций со сторонними сервисами
  12. Как рефакторить • Четкие границы в коде между модулями •

    Понимание, что выносить • Нет повторений в коде и копипасты
  13. Как рефакторить • Четкие границы в коде между модулями •

    Понимание, что выносить • Нет повторений в коде и копипасты • Тесты
  14. Как рефакторить • Четкие границы в коде между модулями •

    Понимание, что выносить • Нет повторений в коде и копипасты • Тесты • Много тестов
  15. Как рефакторить • Четкие границы в коде между модулями •

    Понимание, что выносить • Нет повторений в коде и копипасты • Тесты • Много тестов • Очень много тестов
  16. Разделение на микросервисы • Учетное ядро ака биллинг • Сервис

    отчетов • Сервис тарификации • Операторская • Бекенд водителей
  17. Наш путь • Синхронный подход • Проще • Легче •

    В случае фейла все повторится • HTTP REST API • Go • Echo • GORM • JWT
  18. Наш путь • Написали на Go • Написали тестов •

    Написали e2e тесты • Прогнали все • Собрали в докер • Спланировали • Задеплоили
  19. Заблуждения • Более чистый код • Это легче • Это

    быстрее • Это лучше для инженеров
  20. Заблуждения • Более чистый код • Это легче • Это

    быстрее • Это лучше для инженеров • Это лучше масштабируется
  21. Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание

    лучшего кода • Распределенные транзакции никогда не легче
  22. Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание

    лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти
  23. Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание

    лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти • Лучше планируйте
  24. Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание

    лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти • Лучше планируйте • Преждевременно не оптимизируйте
  25. Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание

    лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти • Лучше планируйте • Преждевременно не оптимизируйте • Рефакторите итеративно