SlideShare a Scribd company logo
Ринат Абдуллин
HappyPancake
twitter.com/abdullin
8-я конференция .NET разработчиков
6 апреля 2014
dotnetconf.ru
Micro-services
Упрощаем монолитные приложения
Обо мне
• До 2014 - .NET Tech Lead в lokad.com
• C 2014 - разработчик в HappyPancake
• Блог - abdullin.com / twitter.com/abdullin
• Подкасты
• BeingTheWorst.com
• DistributedPodcast.com
• Happy Friday : RD.HappyPancake.com
• Я еще только учусь
План
• Что такое micro-services?
• Опыт применения в .NET компании
• Опыт применения в !.NET компании
Архитектура в .NET
N-Layered Architecture
Micro-services, Упрощаем монолитные приложения
А в другой галактике
Micro-services holy wars raged
Micro-services, Упрощаем монолитные приложения
Fred George
https://twitter.com/fgeorge52
Computer Anarchist
James Lewis
https://twitter.com/boicy
Consultant at ThoughtWorks
Stefan Tilkov
https://twitter.com/stilkov
CEO at InnoQ
Martin Fowler
https://twitter.com/
martinfowler
Programmer at
ThoughtWorks
Micro-Services
Что это такое?
Монолит vs Компоненты
Весь функционал 

в одном процессе
Каждый элемент

в отдельном процессе
Монолит vs Компоненты
Масштабирование
Это уже было!
• Service-Oriented Architecture
• Enterprise Integration Patterns
• SOAP, WS-*, ESB
!
• Или “micro-services с вредными привычками”
Micro-services
• Новое название для старого подхода
• Просто нормальный Service-oriented design
• Без фанатичного использования технологий
Архитектура
это “побочный эффект”
Нас интересует
процесс
Micro-services - это лишь результат
Micro-services, Упрощаем монолитные приложения
Как разбить монолит?
“Protective bubble”
Разбить
непросто
Методики
• Domain-driven analysis
• Event storming
• Transaction boundaries
• Technological requirements
• Существующие команды
• Существующие продукты
Где узнать больше?
• 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
Опыт в Lokad.com
Lokad.com
• Основана в 2008 в Париже
• BigData аналитика для
торговых сетей
• ~6 разработчиков
• ~5 продуктов
• ~15 git repositories
• .NET & Windows Azure
История одного
приложения
Lokad.HUB
Что такое Lokad HUB
• Регистрация
• Управление аккаунтами
• Статистика
• Авторизация
• Биллинг
• Администрирование
• Платформа + Web UI
• Windows Azure
• API : JSON + HTTP
• ~99% SLA
• ~10 запросов в секунду
• 99% < 18ms
• 200000 events
• Простая как пень
Lokad Hub 2008
ASP.NET + SQL
Проблемы 2008
• SQL + CRUD
• Угадайте, где бизнес логика
• Монолитная архитектура - сложно менять
• Не любит Windows Azure
Решение
• Domain-Driven Design
• CQRS + EventSourcing
• Event-Driven Design
• Lokad.CQRS
Процесс
• Отчаянное прототипирование
• Отчаянное разделение на Bounded Contexts
• Общаются между собой сообщениями
• Каждый BC - строится из кирпичиков
Кирпичики
Lokad.CQRS
Это сработало, но было ошибкой
1. Aggregate with ES
Источник событий
2. Projection
Проецирует события во вьюхи
3. Process
Реализация бизнес-процессов
4. Workflow
Связывание раздельных контекстов
–Из опыта
“Детали реализации каждого компонента -
это только его собачье дело.”
Lokad Hub 2011
Lokad.CQRS + Windows Azure
Lokad Hub 2011
• 5 bounded contexts
• Event Sourcing rules
• Команда обожает Views
• Быстрые итерации
• Работает как локально так и
в Azure
• Про проект написали в
Microsoft P&P CQRS Journey
Проблемы
• Все еще монолит
• Плохая производительность
• Функционал повторяется в
других системах
• Building blocks все
усложняют
• Команда ругается
Решение
• Разбить все на компоненты
• Пусть компоненты общаются по HTTP
• Дизайн каждого компонента - это его дело
• Компоненты должны быть простыми
Lokad Hub 2013
Простой Stack
Только самое нужное
Простой
дизайн
Код == дизайн
Компоненты
просты
Самый сложный компонент
Все остальные - проще
Жизнь компонента
У каждого - свой путь
Плюшки
• Fiddler + wrk + weighttp
• Авто-генерируемая документация
• Полная статистика
• Разработчикам очень просто начать работать
• Апгрейды без отключений
Узнать больше
http://beingtheworst.com
Опыт за
пределами .NET
HappyPancake
HappyPancake.com
• Крупнейшая сеть знакомств в
Швеции
• Каждый 10-й швед в сети
• Норвегия и Финляндия
• Бесплатная, доход за счет
рекламы
• С 2014г - 3 разработчика
HPC 2013
Работает
Проблемы
• ASP.NET + SQL
• Бизнес-логика - сами знаете
где
• Плохо масштабируется
• Сложно разрабатывать
Требования
• Простая архитектура из небольших компонентов
• 99% запросов (без кэша) - быстрее 25ms
• при 25000 запросов в секунду
• в виртуализированной среде
• Linux
• event-sourcing (для аналитики)
HPC 2014
В разработке
Stack
• Ubuntu 12 LTS
• Go
• FoundationDB
• Sublime / Vim
• Docker
• Statsd + Librato Metrics
• Logsd + Logentries
Sublime IDE
или vim/emacs
Design
• Вся логика - в одном сервере
• Несколько экземпляров сервера за load balancer
• Сервер состоит из компонентов
• FoundationDB кластер для хранения
• Event-driven design + CQRS + Domain-driven
design
Хотелки
• Подключение новых компонентов “на лету”
• Feature toggling
• Ghost mode
• Ramp up
HPC 2015
В планах
Планируется
• + NanoMsg
• + ETCD
• + Drone.io
• + Quay.io
Узнать больше
http://rd.happypancake.com
Вопросы?
http://twitter.com/abdullin

More Related Content

PPTX
Переход от монолитной архитектуры к распределенной
PDF
Денис Трифонов
PDF
Применение CQRS и EventSourcing в DDD-проекте
PPTX
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
PPTX
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
PDF
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
PDF
User (1)
PPTX
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Переход от монолитной архитектуры к распределенной
Денис Трифонов
Применение CQRS и EventSourcing в DDD-проекте
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
User (1)
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET

What's hot (18)

PDF
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
PDF
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
PPT
презентация.1
PDF
Использование Wiki-системы большой командой для управления БА информацией
PPTX
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
PDF
Андрей Лузин
PDF
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
PPTX
рентабельный код
PDF
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
PPTX
Как за $5 и несколько вечеров сделать интегрированную новостную платформу
PPT
Кейс SKCG: Викторина INTEL
PPTX
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
PPTX
Coding like a sex
PPTX
Самодиагностика сервисов на базе платформы .NET
PDF
Илья Ефимов «IoC/DI на примере Autofac»
PDF
PDF
Дмитрий Евдокимов
PDF
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
презентация.1
Использование Wiki-системы большой командой для управления БА информацией
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
Андрей Лузин
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
рентабельный код
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Как за $5 и несколько вечеров сделать интегрированную новостную платформу
Кейс SKCG: Викторина INTEL
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Coding like a sex
Самодиагностика сервисов на базе платформы .NET
Илья Ефимов «IoC/DI на примере Autofac»
Дмитрий Евдокимов
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Ad

Viewers also liked (19)

PDF
CQRS на практике. В поиске точки масштабирования и новых метафор
PDF
Шаблоны интеграции - актуальные инструменты и решения
PPTX
CUDAfy.NET параллельное программирование на видеокартах NVidia и не только
PPTX
ховатти светлана
PPSX
Unit тестирование на энтузиазме
PPTX
Dapper + QueryObject
PPTX
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
PDF
Переход от монолитной архитектуры к распределенной
PDF
Как размножается Sphinx
PDF
ElasticSearch: Найдется все... и быстро!
PDF
Пять самых важных составляющих процесса выпуска продуктов
PDF
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
PDF
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PDF
Дмитрий Новиков - Tarantool в Badoo
PDF
"Обзор Tarantool DB"
PPTX
Microservice vs. Monolithic Architecture
PDF
facebook architecture for 600M users
PDF
Бизнес-гибкость через микросервисную архитектуру
CQRS на практике. В поиске точки масштабирования и новых метафор
Шаблоны интеграции - актуальные инструменты и решения
CUDAfy.NET параллельное программирование на видеокартах NVidia и не только
ховатти светлана
Unit тестирование на энтузиазме
Dapper + QueryObject
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
Переход от монолитной архитектуры к распределенной
Как размножается Sphinx
ElasticSearch: Найдется все... и быстро!
Пять самых важных составляющих процесса выпуска продуктов
Баг-трекер по-новому: что и почему JetBrains изменил в последней версии YouTrack
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Дмитрий Новиков - Tarantool в Badoo
"Обзор Tarantool DB"
Microservice vs. Monolithic Architecture
facebook architecture for 600M users
Бизнес-гибкость через микросервисную архитектуру
Ad

Similar to Micro-services, Упрощаем монолитные приложения (20)

PDF
Cеминар в Виннице (22.03.2014)
PDF
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
PPT
Микросервисы: первая кровь
PDF
Cisco WebEx - от XaaS до on-premise решений.
PDF
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
PDF
Видеозвонки и шаринг экрана в мобильном приложении
PPTX
Test Driven Development in .NET Applications
PDF
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
PPTX
Микросервисы в .NET Core
PPTX
Экосистема или зоопарк / Федор Щудло (EastBanc Technologies)
PPTX
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
PPTX
Test driven development in net
PPTX
Как сделать интернет-сайт на SharePoint и не передумать на полпути
PDF
Inversion of Control в .NET
PDF
Денис Чистяков — JavaScript на фронте и в тылу
PPTX
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
ODP
Python & Web: От простого к сложному
PDF
Tech Talks @NSU: Проходим тест Джоэла
PDF
Эволюция управления зависимостями в коде
PDF
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Cеминар в Виннице (22.03.2014)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
Микросервисы: первая кровь
Cisco WebEx - от XaaS до on-premise решений.
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Видеозвонки и шаринг экрана в мобильном приложении
Test Driven Development in .NET Applications
JS Lab2017_Алексей Зеленюк_Сбалансированное окружение для вашей продуктивности
Микросервисы в .NET Core
Экосистема или зоопарк / Федор Щудло (EastBanc Technologies)
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Test driven development in net
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Inversion of Control в .NET
Денис Чистяков — JavaScript на фронте и в тылу
CodeFest 2014. Шкредов С. — Управление зависимостями в архитектуре. Переход о...
Python & Web: От простого к сложному
Tech Talks @NSU: Проходим тест Джоэла
Эволюция управления зависимостями в коде
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii

Micro-services, Упрощаем монолитные приложения