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
Введение в микросервисную архитектуру
Search
Vladimir Plizga
January 28, 2020
Programming
0
480
Введение в микросервисную архитектуру
Вводная лекция для студентов одной из проектных лабораторий НГУ
Vladimir Plizga
January 28, 2020
Tweet
Share
More Decks by Vladimir Plizga
See All by Vladimir Plizga
Путеводитель по анализу памяти JVM
toparvion
0
120
Заметки о беге
toparvion
0
250
Измерь меня полностью
toparvion
0
230
Экскурсия в бэкенд Интернета вещей
toparvion
0
400
Как внедрять тестовое поведениев чистовой код?
toparvion
0
370
Spring Boot «fat» JAR: Тонкие части толстого артефакта
toparvion
0
480
Краткий экскурс в Spring Security (core)
toparvion
0
350
Инъекция тестовых поведений: как выйти сухим из воды?
toparvion
0
420
HTTPs и его прикладные друзья
toparvion
0
160
Other Decks in Programming
See All in Programming
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
390
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
300
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
240
今から始めるClaude Code超入門
448jp
8
9.1k
ぼくの開発環境2026
yuzneri
0
250
Fluid Templating in TYPO3 14
s2b
0
130
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
630
CSC307 Lecture 01
javiergs
PRO
0
690
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Thoughts on Productivity
jonyablonski
74
5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
We Have a Design System, Now What?
morganepeng
54
8k
Site-Speed That Sticks
csswizardry
13
1.1k
Designing for Timeless Needs
cassininazir
0
130
A better future with KSS
kneath
240
18k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
The Curse of the Amulet
leimatthew05
1
8.7k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
72
Evolving SEO for Evolving Search Engines
ryanjones
0
130
Transcript
Введение в микросервисную архитектуру НГУ, январь’20
Привет! Я – Владимир Плизгá ⬗ Java разработчик (backend) ⬗
TechLead серверной команды PrePaid ⬗ ≈8 лет в деле 2
1. Для начала Цели и вопросы
Что это такое? Оставим вопрос открытым. Пока нам достаточно интуитивного
понимания. 4
Цель – ответить на 1 вопрос: 5 НАФИГА? ДЛЯ ЧЕГО
ЭТО ВООБЩЕ НУЖНО?
“Всё познаётся в сравнении… 6
2. Традиционный подход Как учили нас деды
1 человек – 1 программа (aka 1:1) ⬗ Абсолютно нормальный
подход ⬗ Используется давно ⬗ Подходит многим ⬗ Вряд ли исчезнет 8
Масса позитивных примеров ⬗ Лабораторная/курсовая работа ⬗ Домашний сайт ⬗
Десктопная/консольная утилита ⬗ Telegram-бот ⬗ Мобильное приложение ⬗ (впиши своё) 9
Причины успеха ⬗ Программа умещается в 1 голове ⬗ Легко
меняется (даже вся) ⬗ Мало пользователей ⬗ Можно обновлять редко и полностью 10 Потому что маленький!
А что дальше? С ростом возможностей растут и сложности 11
12 1 000 5 000 10 000 500 000 0
2 000 4 000 6 000 8 000 10 000 12 000 14 000 Строк кода (LoC) Примерные размеры программ Курсач Хомяк Настолка Интернет-банк
1 000 5 000 10 000 500,000 1,000,000 5,000,000 0
1,000,000 2,000,000 3,000,000 4,000,000 5,000,000 Строк кода (LoC) Примерные размеры программ Курсач Хомяк Настолка Интернет-банк Биллинг АБС
Сложности большого приложения ⬗ Не помещается в 1 голове ⬗
Меняется всё труднее ⬗ Сложно разбираться 14
15
Сложности большого приложения ⬗ Не помещается в 1 голове ⬗
Меняется всё труднее ⬗ Сложно разбираться ⬗ Много неочевидных связей 16
17 https://twitter.com/glorphindale/status/1199663658193891328
Сложности большого приложения ⬗ Не помещается в 1 голове ⬗
Меняется всё труднее ⬗ Сложно разбираться ⬗ Много неочевидных связей ⬗ Страшно что-то менять 18
19
Следствия растущей популярности ⬗ Нужны обновления ⬗ Часто ⬗ Выборочно
⬗ Незаметно ⬗ Нужно масштабирование 20
21 Ситуация глазами разработчика ⬗ Трудно развивать приложение ⬗ Любая
правка чревата ⬗ Стек технологий фиксирован ⬗ Проект превращается в болото ☹ Зато болото большое!
3. Микросервисы Желанное спасение. Или нет.
Разделяй и властвуй Человеческая мудрость и инженерный подход в одном
флаконе 23
«Divide Et Impera» в действии Модули Классы и пакеты в
ООП. Помогают бороться с паразитными связями в исходном коде. Библиотеки JAR, DLL, PYM, … Помогают (частично) обновлять приложение частями. SOA Service Oriented Architecture. Помогает (частично) бороться с простоями. 24
Microservice Architecture (MSA) Декомпозиция приложения на отдельно разрабатываемые, поставляемые и
запускаемые модули. 25
Место MSA в арсенале декомпозиции 26 Классы/пакеты ≈ тысячи штук
Библиотеки ≈ сотни штук SOA/MSA ≈ десятки штук
монолит VS микросервисы 27 https://martinfowler.com/articles/microservices.html
28 Свойства микросервисов (1/3) ⬗ Построены вокруг бизнес-нужд ⬗ Одна
функция ≈ один сервис ⬗ Команда, которую можно накормить одной пиццей
29 Свойства микросервисов (2/3) ⬗ Соблюдают строгий контракт взаимодействия: ⬗
Общение только через API ⬗ У каждого своя БД (схема)
30 Свойства микросервисов (3/3) ⬗ 12 факторов cloud-native приложения ⬗
Упрощают разработку ⬗ Упрощают поставку (особенно в облако ☁) ⬗ Включают лучшие практики
31 Эти свойства возвращают лучшее ⬗ Программа умещается в 1
голове ⬗ Легко меняется (даже вся) ⬗ Можно обновлять редко и полностью Потому что маленький!
4. Прививки реальности Неочевидные особенности микросервисной архитектуры
И вот у нас микросервисы. Но так ли всё просто?
Photo by Kostiantyn Stupak from Pexels
1. Как направлять клиентский трафик? ⬗ В обычном приложении: ⬗
Клиент встроен ⬗ Сервер один ⬗ Адрес фиксирован 34
35
⬗ А что если: ⬗ Клиентов много? ⬗ Среди них
мобилки? ⬗ Серверов много? ⬗ Сервера реплицированы? 36 1. Как направлять клиентский трафик?
Точка входа (API Gateway) 37 https://docs.microsoft.com/en-us/azure/architecture/includes/images/microservices-logical.png
Точка входа (API Gateway) тащит 38 ⬗ Маршрутизацию ⬗ Безопасность
⬗ Трансляцию протоколов ⬗ Кэширование ⬗ Агрегацию запросов ⬗ Мониторинг
2. Как сервисам находить друг друга? ⬗ В обычном приложении:
⬗ Сервер знает, где он ⬗ Адрес фиксирован ⬗ Сервер один 39
2. Как сервисам находить друг друга? ⬗ А что если:
⬗ Сервисов много? ⬗ Сервисы реплицированы? ⬗ Адреса динамические? 40 Прописывать вручную уже не вариант
Реестр сервисов (Service Registry) 41 https://blog.mazarin.lk/wp-content/uploads/2016/08/microservices.png
Реестр сервисов помогает 42 ⬗ В упрощении конфигурации ⬗ В
работе в эластичной среде ☁ ⬗ В балансировке нагрузки ⬗ В мониторинге
Реестр сервисов участвует 43 https://www.eclipse.org/community/eclipse_newsletter/2017/september/images/image006_sm.png
Итог: +2 сервиса на ровном месте! ⬗ Каждый надо разработать*!
⬗ У каждого свой жизненный цикл ⬗ Каждый требует поддержки ⬗ И это еще не всё! * обычно на основе библиотеки 44
А для частых релизов ещё нужно… ⬗ Тестировать (постоянно!) ⬗
Учитывать окружения ⬗ Контролировать безопасность ⬗ Предоставлять мониторинг ⬗ Обеспечивать логирование 45
А для частых релизов ещё нужно… ⬗ Continuous Integration &
Delivery (CI/CD) ⬗ Контейнеризация (Docker) ⬗ Оркестрация (Kubernetes) ⬗ Культура (DevOps) 46
47 А ещё для частых релизов пригодится…
48
5. Примеры Связь с реальным миром
Да кому это вообще надо?!. 50 . . .
51 https://spring.io/blog/2015/07/14/microservices-with-spring
52 Пример с такси https://www.nginx.com/ blog/introduction-to-microservices/ По мотивам архитектуры UBER’а
55
6. Заключение Выжимки и выводы
“… you shouldn't start a new project with microservices, even
if you're sure your application will be big enough to make it worthwhile. 57 https://martinfowler.com/bliki/MonolithFirst.html Martin Fowler
Недостатки MSA ⬗ Накладные расходы на сеть ⬗ Сложность релиза
⬗ Трудоемкость мониторинга ⬗ Зоопарк технологий ⬗ … 58
Преимущества MSA ⬗ Компактность кода сервисов ⬗ Изоляция изменений ⬗
Гибкое масштабирование ⬗ Локальность обновлений ⬗ Соответствие командам ⬗ … 59
Выводы ⬗ MSA – не новшество ⬗ и не серебряная
пуля ⬗ Высокий порог вхождения ⬗ Единственный путь развития для одновременно мощных и гибких высоконагруженных приложений* 60
* это и есть ответ на вопрос: 61 НАФИГА? ДЛЯ
ЧЕГО ЭТО ВООБЩЕ НУЖНО?
Резюме 62 Микросервисы – ужасный способ построения сложных веб-приложений. Но
лучше пока ничего не придумано.
63 Спасибо! Время для вопросов Владимир Плизгá @toparvion Toparvion https://toparvion.pro/talk/2020/shift-nsu-winter/
Credits Special thanks to all the people who made and
released these awesome resources for free: ⬗ Presentation template and backgrounds by SlidesCarnival ⬗ Photographs by Unsplash & Pexels 64