micro-services, Упрощаем монолитные приложения
DESCRIPTION
Слайды доклада с конференции dotnetconf в апреле 2014 в Челябинске. Серверная разработка в .NET исторически ассоциируется с Enterprise архитектурами и монолитным кодом, который сложно и дорого поддерживать. Мы поговорим о принципах построения micro-services архитектур, когда достаточно сложная система складывается из небольших приложений в 200-300 строчек кода. Этот подход достаточно часто встречается в Linux среде, но некоторые моменты довольно успешно переносятся и в сторону .NETTRANSCRIPT
![Page 1: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/1.jpg)
Ринат Абдуллин HappyPancake
twitter.com/abdullin
8-я конференция .NET разработчиков 6 апреля 2014 dotnetconf.ru
Micro-servicesУпрощаем монолитные приложения
![Page 2: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/2.jpg)
Обо мне• До 2014 - .NET Tech Lead в lokad.com
• C 2014 - разработчик в HappyPancake
• Блог - abdullin.com / twitter.com/abdullin
• Подкасты
• BeingTheWorst.com
• DistributedPodcast.com
• Happy Friday : RD.HappyPancake.com
• Я еще только учусь
![Page 3: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/3.jpg)
План
• Что такое micro-services?
• Опыт применения в .NET компании
• Опыт применения в !.NET компании
![Page 4: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/4.jpg)
Архитектура в .NETN-Layered Architecture
![Page 5: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/5.jpg)
![Page 6: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/6.jpg)
А в другой галактикеMicro-services holy wars raged
![Page 7: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/7.jpg)
![Page 11: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/11.jpg)
Martin Fowlerhttps://twitter.com/
martinfowler Programmer at ThoughtWorks
![Page 12: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/12.jpg)
Micro-ServicesЧто это такое?
![Page 13: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/13.jpg)
Монолит vs Компоненты
Весь функционал в одном процессе
Каждый элементв отдельном процессе
![Page 14: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/14.jpg)
Монолит vs КомпонентыМасштабирование
![Page 15: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/15.jpg)
Это уже было!• Service-Oriented Architecture
• Enterprise Integration Patterns
• SOAP, WS-*, ESB
!
• Или “micro-services с вредными привычками”
![Page 16: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/16.jpg)
Micro-services
• Новое название для старого подхода
• Просто нормальный Service-oriented design
• Без фанатичного использования технологий
![Page 17: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/17.jpg)
Архитектураэто “побочный эффект”
![Page 18: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/18.jpg)
Нас интересует процесс
Micro-services - это лишь результат
![Page 19: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/19.jpg)
![Page 20: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/20.jpg)
Как разбить монолит?“Protective bubble”
![Page 21: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/21.jpg)
Разбить непросто
![Page 22: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/22.jpg)
Методики• Domain-driven analysis
• Event storming
• Transaction boundaries
• Technological requirements
• Существующие команды
• Существующие продукты
![Page 23: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/23.jpg)
Где узнать больше?• Fred George: http://vimeo.com/79866979
• James Lewis: http://vimeo.com/74452550
• Martin Fowler: http://martinfowler.com/articles/microservices.html
• Stefan Tilkov : http://www.infoq.com/presentations/Breaking-the-Monolith
![Page 25: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/25.jpg)
Lokad.com• Основана в 2008 в Париже
• BigData аналитика для торговых сетей
• ~6 разработчиков
• ~5 продуктов
• ~15 git repositories
• .NET & Windows Azure
![Page 26: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/26.jpg)
История одного приложения
Lokad.HUB
![Page 27: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/27.jpg)
Что такое Lokad HUB• Регистрация
• Управление аккаунтами
• Статистика
• Авторизация
• Биллинг
• Администрирование
• Платформа + Web UI
• Windows Azure
• API : JSON + HTTP
• ~99% SLA
• ~10 запросов в секунду
• 99% < 18ms
• 200000 events
• Простая как пень
![Page 29: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/29.jpg)
Проблемы 2008
• SQL + CRUD
• Угадайте, где бизнес логика
• Монолитная архитектура - сложно менять
• Не любит Windows Azure
![Page 30: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/30.jpg)
Решение
• Domain-Driven Design
• CQRS + EventSourcing
• Event-Driven Design
• Lokad.CQRS
![Page 31: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/31.jpg)
Процесс
• Отчаянное прототипирование
• Отчаянное разделение на Bounded Contexts
• Общаются между собой сообщениями
• Каждый BC - строится из кирпичиков
![Page 32: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/32.jpg)
Кирпичики Lokad.CQRSЭто сработало, но было ошибкой
![Page 33: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/33.jpg)
1. Aggregate with ESИсточник событий
![Page 34: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/34.jpg)
2. ProjectionПроецирует события во вьюхи
![Page 35: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/35.jpg)
3. ProcessРеализация бизнес-процессов
![Page 36: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/36.jpg)
4. WorkflowСвязывание раздельных контекстов
![Page 37: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/37.jpg)
–Из опыта
“Детали реализации каждого компонента - это только его собачье дело.”
![Page 38: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/38.jpg)
Lokad Hub 2011Lokad.CQRS + Windows Azure
![Page 39: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/39.jpg)
Lokad Hub 2011• 5 bounded contexts
• Event Sourcing rules
• Команда обожает Views
• Быстрые итерации
• Работает как локально так и в Azure
• Про проект написали в Microsoft P&P CQRS Journey
![Page 40: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/40.jpg)
Проблемы
• Все еще монолит
• Плохая производительность
• Функционал повторяется в других системах
• Building blocks все усложняют
• Команда ругается
![Page 41: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/41.jpg)
Решение
• Разбить все на компоненты
• Пусть компоненты общаются по HTTP
• Дизайн каждого компонента - это его дело
• Компоненты должны быть простыми
![Page 42: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/42.jpg)
Lokad Hub 2013
![Page 43: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/43.jpg)
Простой StackТолько самое нужное
![Page 44: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/44.jpg)
Простой дизайн
![Page 45: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/45.jpg)
Код == дизайн
![Page 46: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/46.jpg)
Компоненты просты
![Page 47: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/47.jpg)
Самый сложный компонентВсе остальные - проще
![Page 48: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/48.jpg)
Жизнь компонентаУ каждого - свой путь
![Page 49: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/49.jpg)
Плюшки• Fiddler + wrk + weighttp
• Авто-генерируемая документация
• Полная статистика
• Разработчикам очень просто начать работать
• Апгрейды без отключений
![Page 51: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/51.jpg)
Опыт за пределами .NET
HappyPancake
![Page 52: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/52.jpg)
HappyPancake.com
• Крупнейшая сеть знакомств в Швеции
• Каждый 10-й швед в сети
• Норвегия и Финляндия
• Бесплатная, доход за счет рекламы
• С 2014г - 3 разработчика
![Page 53: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/53.jpg)
HPC 2013Работает
![Page 54: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/54.jpg)
Проблемы
• ASP.NET + SQL
• Бизнес-логика - сами знаете где
• Плохо масштабируется
• Сложно разрабатывать
![Page 55: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/55.jpg)
Требования• Простая архитектура из небольших компонентов
• 99% запросов (без кэша) - быстрее 25ms
• при 25000 запросов в секунду
• в виртуализированной среде
• Linux
• event-sourcing (для аналитики)
![Page 56: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/56.jpg)
HPC 2014В разработке
![Page 57: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/57.jpg)
Stack• Ubuntu 12 LTS
• Go
• FoundationDB
• Sublime / Vim
• Docker
• Statsd + Librato Metrics
• Logsd + Logentries
![Page 58: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/58.jpg)
Sublime IDEили vim/emacs
![Page 59: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/59.jpg)
Design• Вся логика - в одном сервере
• Несколько экземпляров сервера за load balancer
• Сервер состоит из компонентов
• FoundationDB кластер для хранения
• Event-driven design + CQRS + Domain-driven design
![Page 60: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/60.jpg)
Хотелки
• Подключение новых компонентов “на лету”
• Feature toggling
• Ghost mode
• Ramp up
![Page 61: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/61.jpg)
HPC 2015В планах
![Page 62: Micro-services, Упрощаем монолитные приложения](https://reader033.vdocuments.pub/reader033/viewer/2022042713/547dcfaab4af9fda158b548e/html5/thumbnails/62.jpg)
Планируется
• + NanoMsg
• + ETCD
• + Drone.io
• + Quay.io