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
59
Как собирать GPS треки раз в секунду экономя трафик
gen1us2k
0
61
Other Decks in Programming
See All in Programming
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
Oxlintはいいぞ
yug1224
5
1.4k
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
dchart: charts from deck markup
ajstarks
3
1k
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
150
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
950
Believing is Seeing
oripsolob
1
59
Thoughts on Productivity
jonyablonski
74
5k
Statistics for Hackers
jakevdp
799
230k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
66
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
110
HDC tutorial
michielstock
1
400
GraphQLとの向き合い方2022年版
quramy
50
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.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