Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Рефакторинг монолита в микросервисы на Go
Search
Andrew Minkin
November 08, 2016
Programming
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Рефакторинг монолита в микросервисы на Go
Слайды с выступления на GDG DevFest 2016 в Алматы и Бишкеке
Andrew Minkin
November 08, 2016
More Decks by Andrew Minkin
See All by Andrew Minkin
Геоданные и Go
gen1us2k
0
66
Как собирать GPS треки раз в секунду экономя трафик
gen1us2k
0
66
Other Decks in Programming
See All in Programming
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
510
Performance Optimization With LLMs
xleitix
0
150
ChromeでローカルLLM
ryu1013
0
140
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.6k
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
190
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
phperだってパンチカードでコーディングしたい
o0h
PRO
0
350
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
240
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.3k
The Curse of the Amulet
leimatthew05
3
16k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
What's in a price? How to price your products and services
michaelherold
247
13k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
WENDY [Excerpt]
tessaabrams
14
40k
Deep Space Network (abreviated)
tonyrice
0
380
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
67k
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