Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Рефакторинг монолита в микросервисы на Go
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Andrew Minkin
November 08, 2016
Programming
0
140
Рефакторинг монолита в микросервисы на Go
Слайды с выступления на GDG DevFest 2016 в Алматы и Бишкеке
Andrew Minkin
November 08, 2016
Tweet
Share
More Decks by Andrew Minkin
See All by Andrew Minkin
Геоданные и Go
gen1us2k
0
59
Как собирать GPS треки раз в секунду экономя трафик
gen1us2k
0
61
Other Decks in Programming
See All in Programming
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
140
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
390
CSC307 Lecture 03
javiergs
PRO
1
490
AtCoder Conference 2025
shindannin
0
1.1k
CSC307 Lecture 09
javiergs
PRO
1
840
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
並行開発のためのコードレビュー
miyukiw
0
1.3k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
630
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
CSC307 Lecture 06
javiergs
PRO
0
690
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
4.3k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
Building the Perfect Custom Keyboard
takai
2
690
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
What does AI have to do with Human Rights?
axbom
PRO
0
2k
Google's AI Overviews - The New Search
badams
0
910
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
58
Become a Pro
speakerdeck
PRO
31
5.8k
Transcript
Рефакторинг монолита в микросервисы на 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
Storage • Percona • Redis • Elasticsearch
Что по архитектуре • Django монолит • Go, Twisted
Раньше • Ruby • Node.js
Сервисы? Какие сервисы • Отправщик пушей.
Сервисы? Какие сервисы • Отправщик пушей. • Отправщик СМС
Сервисы? Какие сервисы • Отправщик пушей. • Отправщик СМС •
Backend для водителей
Сервисы? Какие сервисы • Отправщик пушей. • Отправщик СМС •
Backend для водителей • Бекенд для клиентов
А еще у нас есть Docker
Что в Django • Отдел контроля качества • Прием платежей
• Учетное ядро • Отчеты • API для водителей • Менеджерская для управления
Проблемы • Приложение – один большой кусок, который нужно выкатывать
очень часто • Невозможно параллельно, многопоточно выполнять какие- то задачи • Много интеграций со сторонними сервисами
Решения • Поддерживать существующее и жить дальше • Все переписать
:trollface:
И пока не случилось
Давай в микросервисы
Давай в микросервисы
Микросервисы • Маленькие
Микросервисы • Маленькие • Сфокусированные
Микросервисы • Маленькие • Сфокусированные • Слабосвязанные
Микросервисы • Маленькие • Сфокусированные • Слабосвязанные • Высокосогласованные
Микросервисы • Малый размер • Тонкое масштабирование • Быстрый деплой
• Легкость тестирования • Любой язык
Синхронный подход © Nginx.com
Асинхронный подход © Nginx.com
А почему Go • Строготипизированный • Компилируемый • Goroutine •
sync.WaitGroup
Что есть в Go • Go-kit • Gizmo • Micro
• Echo • Gin • Mux
Как рефакторить • Четкие границы в коде между модулями
Как рефакторить • Четкие границы в коде между модулями •
Понимание, что выносить
Как рефакторить • Четкие границы в коде между модулями •
Понимание, что выносить • Нет повторений в коде и копипасты
Как рефакторить • Четкие границы в коде между модулями •
Понимание, что выносить • Нет повторений в коде и копипасты • Тесты
Как рефакторить • Четкие границы в коде между модулями •
Понимание, что выносить • Нет повторений в коде и копипасты • Тесты • Много тестов
Как рефакторить • Четкие границы в коде между модулями •
Понимание, что выносить • Нет повторений в коде и копипасты • Тесты • Много тестов • Очень много тестов
Tradeoffs
Tradeoffs • Latency
Tradeoffs • Latency • Распределенные блокировки
Tradeoffs • Latency • Распределенные блокировки • Eventual consistency
Разделение на микросервисы • Учетное ядро ака биллинг • Сервис
отчетов • Сервис тарификации • Операторская • Бекенд водителей
Ок, кто первый? • Учетное ядро ака биллинг
Наш путь • Синхронный подход • Проще • Легче •
В случае фейла все повторится • HTTP REST API • Go • Echo • GORM • JWT
Наш путь • Написали на Go • Написали тестов •
Написали e2e тесты • Прогнали все • Собрали в докер • Спланировали • Задеплоили
Заблуждения
Заблуждения • Более чистый код
Заблуждения • Более чистый код • Это легче
Заблуждения • Более чистый код • Это легче • Это
быстрее
Заблуждения • Более чистый код • Это легче • Это
быстрее • Это лучше для инженеров
Заблуждения • Более чистый код • Это легче • Это
быстрее • Это лучше для инженеров • Это лучше масштабируется
Какие бенефиты?
Какие бенефиты? • Меньше расход ресурсов
Какие бенефиты? • Меньше расход ресурсов • Можем масштабировать отдельную
фичу
Какие бенефиты? • Меньше расход ресурсов • Можем масштабировать отдельную
фичу • Поддерживать код стало чуть легче
Какие проблемы и подводные камни • Конкурентный доступ • Балансировка
Конкурентный доступ • Percona • Транзакции + select … for
update • Redis • Setnx
Балансировка • Неравномерное использование ресурсов
Выводы
Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание
лучшего кода
Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание
лучшего кода • Распределенные транзакции никогда не легче
Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание
лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти
Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание
лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти • Лучше планируйте
Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание
лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти • Лучше планируйте • Преждевременно не оптимизируйте
Выводы • Не нужно добавлять сетевое ограничение чтобы оправдать написание
лучшего кода • Распределенные транзакции никогда не легче • К микросервисам нужно прийти • Лучше планируйте • Преждевременно не оптимизируйте • Рефакторите итеративно
Вопросы?
Контакты • https:/ /github.com/maddevsio • https:/ /github.com/gen1us2k •
[email protected]
•
http:/ /gen1us2k.com • Слайды • http:/ /bit.ly/gdgalmaty2016