SlideShare a Scribd company logo
Рефакторинг монолита в
микросервисы на Go
Минкин Андрей
Кто я
• TeamLead в MadDevs.io
• Nambataxi.com
• Nambafood.kg
• Cybernamba.com
• Kuppi.kg
• Moika.kg
• House.kg
Namba Taxi
• 4 года на рынке Бишкека
Namba Taxi
• 4 года на рынке Бишкека
• Не менее 8к заказов в сутки
Namba Taxi
• 4 года на рынке Бишкека
• Не менее 8к заказов в сутки
• 600+ водителей на линии
Namba Taxi
• 4 года на рынке Бишкека
• Не менее 8к заказов в сутки
• 600+ водителей на линии
• 300к довольных клиентов
Namba Taxi
• 4 года на рынке Бишкека
• Не менее 8к заказов в сутки
• 600+ водителей на линии
• 300к довольных клиентов
• 300 рпс на серверах
AVG response time
• Водители 20 ms
• Операторы 2.5 ms
Что такое такси
Что такое такси
• Клиенты
• Водители
• Операторы КЦ
• Контроль качества
• Back office
Как вызвать такси
Как вызвать такси
• Приложение
Как вызвать такси
• Приложение
• СМС
Как вызвать такси
• Приложение
• СМС
• Сайт
Как вызвать такси
• Приложение
• СМС
• Сайт
• IPTV
Как вызвать такси
• Приложение
• СМС
• Сайт
• IPTV
• Сторонние приложения (вызов по API)
Как вызвать такси
• Приложение
• СМС
• Сайт
• IPTV
• Сторонние приложения (вызов по API)
• Позвонить оператору
Водители
Водители
Что делает оператор
Что делает оператор
• Клиенты
• Входящие/исходящие звонки
Что делает оператор
• Клиенты
• Входящие/исходящие звонки
• Заказы
• Наблюдение
Что делает оператор
• Клиенты
• Входящие/исходящие звонки
• Заказы
• Наблюдение
• Водители
• Тревога
• Подержка
Контроль качества
Back-office
• Отчеты
• Отчеты
• Отчеты
Что по архитектуре
• SOA
Что по архитектуре
• SOA
• Redis
Что по архитектуре
• Django монолит
• Go, Twisted
Раньше
• Ruby
• Node.js
Storage
• Percona
• Redis
• Elasticsearch
Сервисы? Какие сервисы
• Отправщик пушей.
Сервисы? Какие сервисы
• Отправщик пушей.
• Отправщик СМС
Сервисы? Какие сервисы
• Отправщик пушей.
• Отправщик СМС
• Backend для водителей
Сервисы? Какие сервисы
• Отправщик пушей.
• Отправщик СМС
• Прокси для водителей
• Бекенд для клиентов
А еще у нас есть Docker
Что в Django
• Отдел контроля качества
• Прием платежей
• Учетное ядро
• Отчеты
• API для водителей
• Менеджерская для управления
Проблемы
• Приложение – один большой кусок, который нужно
выкатывать очень часто
• Невозможно параллельно, многопоточно выполнять какие-
то задачи
• Много интеграций со сторонними сервисами
Решения
• Поддерживать существующее и жить дальше
• Все переписать :trollface:
И пока не случилось
Давай в микросервисы
Микросервисы
• Маленькие
Микросервисы
• Маленькие
• Сфокусированные
Микросервисы
• Маленькие
• Сфокусированные
• Слабосвязанные
Микросервисы
• Маленькие
• Сфокусированные
• Слабосвязанные
• Высокосогласованные
Микросервисы
• Малый размер
• Тонкое масштабирование
• Быстрый деплой
• Легкость тестирования
• Любой язык
Синхронный подход
© Nginx.com
Асинхронный подход
© Nginx.com
А почему Go
• Строготипизированный
• Компилируемый
• CSP
• Goroutine
• sync.WaitGroup
Что есть в Go
• Go-kit
• Gizmo
• Micro
• Echo
• Gin
• Mux
Как рефакторить
• Четкие границы в коде между модулями
Как рефакторить
• Четкие границы в коде между модулями
• Понимание, что выносить
Как рефакторить
• Четкие границы в коде между модулями
• Понимание, что выносить
• Нет повторений в коде и копипасты
Как рефакторить
• Четкие границы в коде между модулями
• Понимание, что выносить
• Нет повторений в коде и копипасты
• Тесты
Как рефакторить
• Четкие границы в коде между модулями
• Понимание, что выносить
• Нет повторений в коде и копипасты
• Тесты
• Много тестов
Как рефакторить
• Четкие границы в коде между модулями
• Понимание, что выносить
• Нет повторений в коде и копипасты
• Тесты
• Много тестов
• Очень много тестов
Tradeoffs
Tradeoffs
• Latency
Tradeoffs
• Latency
• Распределенные блокировки
Tradeoffs
• Latency
• Распределенные блокировки
• Eventual consistency
Tradeoffs
• Latency
• Распределенные блокировки
• Eventual consistency
• Operational Complexity
Разделение на микросервисы
• Учетное ядро ака биллинг
• Сервис отчетов
• Сервис тарификации
• Операторская
• Бекенд водителей
Ок, кто первый?
• Учетное ядро ака биллинг
Наш путь
• Синхронный подход
• Проще
• Легче
• В случае фейла все повторится
• HTTP REST API
• Go
• Echo
• GORM
• JWT
Наш путь
• Написали на Go
• Написали тестов
• Написали e2e тесты
• Прогнали все
• Собрали в докер
• Спланировали
• Задеплоили
Заблуждения
Заблуждения
• Более чистый код
Заблуждения
• Более чистый код
• Это легче
Заблуждения
• Более чистый код
• Это легче
• Это быстрее
Заблуждения
• Более чистый код
• Это легче
• Это быстрее
• Это лучше для инженеров
Заблуждения
• Более чистый код
• Это легче
• Это быстрее
• Это лучше для инженеров
• Это лучше масштабируется
Какие бенефиты?
Какие бенефиты?
• Меньше расход ресурсов
Какие бенефиты?
• Меньше расход ресурсов
• Можем масштабировать отдельную фичу
Какие бенефиты?
• Меньше расход ресурсов
• Можем масштабировать отдельную фичу
• Поддерживать код стало чуть легче
Какие проблемы и подводные камни
• Конкурентный доступ
• Балансировка
Конкурентный доступ
• Percona
• Транзакции + select … for update
• Redis
• Setnx
Балансировка
• Неравномерное использование ресурсов
Выводы
Выводы
• Не нужно добавлять сетевое ограничение чтобы оправдать
написание лучшего кода
Выводы
• Не нужно добавлять сетевое ограничение чтобы оправдать
написание лучшего кода
• Распределенные транзакции никогда не легче
Выводы
• Не нужно добавлять сетевое ограничение чтобы оправдать
написание лучшего кода
• Распределенные транзакции никогда не легче
• К микросервисам нужно прийти
Выводы
• Не нужно добавлять сетевое ограничение чтобы оправдать
написание лучшего кода
• Распределенные транзакции никогда не легче
• К микросервисам нужно прийти
• Лучше планируйте
Выводы
• Не нужно добавлять сетевое ограничение чтобы оправдать
написание лучшего кода
• Распределенные транзакции никогда не легче
• К микросервисам нужно прийти
• Лучше планируйте
• Преждевременно не оптимизируйте
Выводы
• Не нужно добавлять сетевое ограничение чтобы оправдать
написание лучшего кода
• Распределенные транзакции никогда не легче
• К микросервисам нужно прийти
• Лучше планируйте
• Преждевременно не оптимизируйте
• Рефакторите итеративно
Вопросы?
Контакты
• https://github.com/gen1us2k
• chaka@maddevs.io
• http://gen1us2k.com
• Слайды
• http://bit.ly/gdgalmaty2016

More Related Content

PPTX
High load для начинающих
PPT
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
PDF
Рефакторинг монолита в микросервисы на Go
PPTX
как строить архитектуру для отказоустойчивой службы такси
PDF
"Как мы в Точке переезжаем..." Лызлов Ярослав, Банк Точка
PDF
SECON'2017, Васильков Василий, Elm в production
PDF
NoSQL — неспроста ли это "ЖЖЖ"?
PDF
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...
High load для начинающих
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Рефакторинг монолита в микросервисы на Go
как строить архитектуру для отказоустойчивой службы такси
"Как мы в Точке переезжаем..." Лызлов Ярослав, Банк Точка
SECON'2017, Васильков Василий, Elm в production
NoSQL — неспроста ли это "ЖЖЖ"?
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...

What's hot (10)

PDF
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
PPTX
Александр Афенов
PDF
Golang в avito
PDF
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
PPTX
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
PPTX
Опыт международных продаж видеостримера Flussonic / Максим Лапшин (Erlyvideo)
PPTX
виталий денисенков анатомия альфа-лизинга Fin (1)
PDF
IikoDeliveryLogistics
PPTX
SECON'2016. Алексеев Олег, Живой API
PDF
Микросервисная архитектура на базе CoreOS и Kubernetes
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Александр Афенов
Golang в avito
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Опыт международных продаж видеостримера Flussonic / Максим Лапшин (Erlyvideo)
виталий денисенков анатомия альфа-лизинга Fin (1)
IikoDeliveryLogistics
SECON'2016. Алексеев Олег, Живой API
Микросервисная архитектура на базе CoreOS и Kubernetes
Ad

Similar to Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Microservices on Go (20)

PPTX
GDGNSK Работа с геоданными в Go
PPTX
Работа с геоданными в Go GDGNSK / Work with Geodata in Go
PPTX
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
PPTX
Как собирать gps треки раз в секунду, экономя трафик / How to Collect GPS Tra...
PPTX
Собираем GPS-треки от водителей в такси раз в секунду, экономя трафик / Андре...
PPTX
Как собирать gps треки раз в секунду, экономя траффик
PPTX
Как мы делаем Banki.ru
PDF
Как я написала платформу, взаимодействующую более чем с 15 странами по всему ...
PPTX
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
PDF
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
PDF
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
PPTX
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
PPT
Высоконагруженные трейдинговые системы и их тестирование (Иосиф Иткин)
PPT
Высоконагруженные трейдинговые системы и их тестирование
PPTX
Кластеризация семантики
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
PDF
Mobile web apps
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PPTX
201107 Что происходит в хостинге?
GDGNSK Работа с геоданными в Go
Работа с геоданными в Go GDGNSK / Work with Geodata in Go
Как строить архитектуру для отказоустойчивой службы такси / How to Build a ...
Как собирать gps треки раз в секунду, экономя трафик / How to Collect GPS Tra...
Собираем GPS-треки от водителей в такси раз в секунду, экономя трафик / Андре...
Как собирать gps треки раз в секунду, экономя траффик
Как мы делаем Banki.ru
Как я написала платформу, взаимодействующую более чем с 15 странами по всему ...
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Высоконагруженные трейдинговые системы и их тестирование (Иосиф Иткин)
Высоконагруженные трейдинговые системы и их тестирование
Кластеризация семантики
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Mobile web apps
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
201107 Что происходит в хостинге?
Ad

More from Mad Devs (20)

PPTX
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
PPTX
Дружелюбнй онбординг: как с увеличением количества не потерять качество
PPTX
Mad Stream: Software Architecture 101.
PPTX
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
PDF
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
PDF
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
PDF
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
PDF
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
PDF
Mad Talks. Astashov_splitbrain
PPTX
Flutter vs Native App Development
PDF
Mad Talks. Marketing tips for tech companies
PDF
The paradox of choice in design
PDF
Git and Github for Beginners
PDF
How to hire freelancers
PDF
Ethereum blockchain
PDF
"Outside In". Web application testing.
PDF
Asynchrony in python exists and why should you use it
PDF
Ethereum: аспекты разработки смарт-контрактов
PDF
Why we sleep. Michael Ivashenko
PDF
Удаленное управление приложением и его аналитика
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Mad Stream: Software Architecture 101.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Mad Talks. Astashov_splitbrain
Flutter vs Native App Development
Mad Talks. Marketing tips for tech companies
The paradox of choice in design
Git and Github for Beginners
How to hire freelancers
Ethereum blockchain
"Outside In". Web application testing.
Asynchrony in python exists and why should you use it
Ethereum: аспекты разработки смарт-контрактов
Why we sleep. Michael Ivashenko
Удаленное управление приложением и его аналитика

Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Microservices on Go