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
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
47
Как собирать GPS треки раз в секунду экономя трафик
gen1us2k
0
56
Other Decks in Programming
See All in Programming
甘い香りに誘われてVanilla Extractを1年間運用してみた
miyahkun
1
110
Elm 0.19.0 Changes
bkuhlmann
0
480
StreamlitとTerraformでデータカタログを作った話
gussan0223
0
280
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
7
2.9k
CQRS/ES avec Symfony, c’est (trop) bien !
jeremyfreeagent
1
630
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
160
脱・初心者!脱・マネコン!AWS CDKを使ってみませんか!?
har1101
0
300
Git Lint
bkuhlmann
4
740
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
1.1k
What We Can Learn From OSS
inouehi
0
390
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.6k
Featured
See All Featured
Designing for Performance
lara
601
67k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
KATA
mclloyd
14
12k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
Six Lessons from altMBA
skipperchong
19
3k
Building Applications with DynamoDB
mza
88
5.6k
Pencils Down: Stop Designing & Start Developing
hursman
116
11k
Automating Front-end Workflow
addyosmani
1354
200k
For a Future-Friendly Web
brad_frost
171
8.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
8
8.3k
Done Done
chrislema
178
15k
4 Signs Your Business is Dying
shpigford
175
21k
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