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

64
Ринат Абдуллин HappyPancake twitter.com/abdullin 8-я конференция .NET разработчиков 6 апреля 2014 dotnetconf.ru Micro-services Упрощаем монолитные приложения

description

Слайды доклада с конференции dotnetconf в апреле 2014 в Челябинске. Серверная разработка в .NET исторически ассоциируется с Enterprise архитектурами и монолитным кодом, который сложно и дорого поддерживать. Мы поговорим о принципах построения micro-services архитектур, когда достаточно сложная система складывается из небольших приложений в 200-300 строчек кода. Этот подход достаточно часто встречается в Linux среде, но некоторые моменты довольно успешно переносятся и в сторону .NET

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

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

Ринат Абдуллин HappyPancake

twitter.com/abdullin

8-я конференция .NET разработчиков 6 апреля 2014 dotnetconf.ru

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

Page 2: 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

• Я еще только учусь

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

План

• Что такое micro-services?

• Опыт применения в .NET компании

• Опыт применения в !.NET компании

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

Архитектура в .NETN-Layered Architecture

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

А в другой галактикеMicro-services holy wars raged

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

Fred Georgehttps://twitter.com/fgeorge52

Computer Anarchist

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

James Lewishttps://twitter.com/boicy

Consultant at ThoughtWorks

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

Stefan Tilkovhttps://twitter.com/stilkov

CEO at InnoQ

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

Martin Fowlerhttps://twitter.com/

martinfowler Programmer at ThoughtWorks

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

Micro-ServicesЧто это такое?

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

Монолит vs Компоненты

Весь функционал в одном процессе

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

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

Монолит vs КомпонентыМасштабирование

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

Это уже было!• Service-Oriented Architecture

• Enterprise Integration Patterns

• SOAP, WS-*, ESB

!

• Или “micro-services с вредными привычками”

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

Micro-services

• Новое название для старого подхода

• Просто нормальный Service-oriented design

• Без фанатичного использования технологий

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

Архитектураэто “побочный эффект”

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

Нас интересует процесс

Micro-services - это лишь результат

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

Как разбить монолит?“Protective bubble”

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

Разбить непросто

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

Методики• Domain-driven analysis

• Event storming

• Transaction boundaries

• Technological requirements

• Существующие команды

• Существующие продукты

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

Где узнать больше?• 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 24: Micro-services, Упрощаем монолитные приложения

Опыт в Lokad.com

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

Lokad.com• Основана в 2008 в Париже

• BigData аналитика для торговых сетей

• ~6 разработчиков

• ~5 продуктов

• ~15 git repositories

• .NET & Windows Azure

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

История одного приложения

Lokad.HUB

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

Что такое Lokad HUB• Регистрация

• Управление аккаунтами

• Статистика

• Авторизация

• Биллинг

• Администрирование

• Платформа + Web UI

• Windows Azure

• API : JSON + HTTP

• ~99% SLA

• ~10 запросов в секунду

• 99% < 18ms

• 200000 events

• Простая как пень

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

Lokad Hub 2008ASP.NET + SQL

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

Проблемы 2008

• SQL + CRUD

• Угадайте, где бизнес логика

• Монолитная архитектура - сложно менять

• Не любит Windows Azure

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

Решение

• Domain-Driven Design

• CQRS + EventSourcing

• Event-Driven Design

• Lokad.CQRS

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

Процесс

• Отчаянное прототипирование

• Отчаянное разделение на Bounded Contexts

• Общаются между собой сообщениями

• Каждый BC - строится из кирпичиков

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

Кирпичики Lokad.CQRSЭто сработало, но было ошибкой

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

1. Aggregate with ESИсточник событий

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

2. ProjectionПроецирует события во вьюхи

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

3. ProcessРеализация бизнес-процессов

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

4. WorkflowСвязывание раздельных контекстов

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

–Из опыта

“Детали реализации каждого компонента - это только его собачье дело.”

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

Lokad Hub 2011Lokad.CQRS + Windows Azure

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

Lokad Hub 2011• 5 bounded contexts

• Event Sourcing rules

• Команда обожает Views

• Быстрые итерации

• Работает как локально так и в Azure

• Про проект написали в Microsoft P&P CQRS Journey

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

Проблемы

• Все еще монолит

• Плохая производительность

• Функционал повторяется в других системах

• Building blocks все усложняют

• Команда ругается

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

Решение

• Разбить все на компоненты

• Пусть компоненты общаются по HTTP

• Дизайн каждого компонента - это его дело

• Компоненты должны быть простыми

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

Lokad Hub 2013

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

Простой StackТолько самое нужное

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

Простой дизайн

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

Код == дизайн

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

Компоненты просты

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

Самый сложный компонентВсе остальные - проще

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

Жизнь компонентаУ каждого - свой путь

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

Плюшки• Fiddler + wrk + weighttp

• Авто-генерируемая документация

• Полная статистика

• Разработчикам очень просто начать работать

• Апгрейды без отключений

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

Узнать большеhttp://beingtheworst.com

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

Опыт за пределами .NET

HappyPancake

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

HappyPancake.com

• Крупнейшая сеть знакомств в Швеции

• Каждый 10-й швед в сети

• Норвегия и Финляндия

• Бесплатная, доход за счет рекламы

• С 2014г - 3 разработчика

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

HPC 2013Работает

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

Проблемы

• ASP.NET + SQL

• Бизнес-логика - сами знаете где

• Плохо масштабируется

• Сложно разрабатывать

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

Требования• Простая архитектура из небольших компонентов

• 99% запросов (без кэша) - быстрее 25ms

• при 25000 запросов в секунду

• в виртуализированной среде

• Linux

• event-sourcing (для аналитики)

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

HPC 2014В разработке

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

Stack• Ubuntu 12 LTS

• Go

• FoundationDB

• Sublime / Vim

• Docker

• Statsd + Librato Metrics

• Logsd + Logentries

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

Sublime IDEили vim/emacs

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

Design• Вся логика - в одном сервере

• Несколько экземпляров сервера за load balancer

• Сервер состоит из компонентов

• FoundationDB кластер для хранения

• Event-driven design + CQRS + Domain-driven design

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

Хотелки

• Подключение новых компонентов “на лету”

• Feature toggling

• Ghost mode

• Ramp up

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

HPC 2015В планах

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

Планируется

• + NanoMsg

• + ETCD

• + Drone.io

• + Quay.io

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

Узнать большеhttp://rd.happypancake.com

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

Вопросы?http://twitter.com/abdullin