Строим простые и масштабируемые бекэнды
TRANSCRIPT
#msdevcon
Community Track
Строим простые и масшабируемые бекэндыДенис ИвановРуководитель группы разработки, 2ГИСhttps://github.com/denisivan0v
#msdevcon
Обо мне
#msdevcon
Цели
Простота vs сложность
БекэндыПодходы к
проектированиюОткуда берется
сложность?
#msdevcon
Цели
Простота vs сложность
Инженерные практикиПринципы и паттерны
Анализ предметной области
Как правильно применять?
БекэндыПодходы к
проектированиюОткуда берется
сложность?
#msdevcon
Цели
Простота vs сложность
Инженерные практики
Практический опыт
Принципы и паттерныАнализ предметной
областиКак правильно
применять?
Разделение ответственностей
Event-driven architectureМодели чтения и записи
БекэндыПодходы к
проектированиюОткуда берется
сложность?
#msdevcon
Простота vs сложностьСлоистая архитектура
Слоистая архитектураUI
API
BL
DAL
DB
Слоистая архитектура
Разделение ответственностей
UI
API
BL
DAL
DB
Слоистая архитектура
Разделение ответственностейРасположение слоевПерегруженность слоевПоявление cross-layer абстракцийСложность поддержания границБольшое число абстракцийТрудоемкая композиция приложенияМонолит
UI
API
BL
DAL
DB
Logg
ing
Audi
t
Компонентная модель
UI
Read Model
DB DB
Domain Model
Storage
AdminBackend
DB
Read Model API
#msdevcon
Инженерные практикиПринципы и паттерны
Принципы, паттерны и подходыS.O.L.I.DПять базовых принципов ООП/ООД
Принципы, паттерны и подходыS.O.L.I.DПять базовых принципов ООП/ООД
CQSМетод – либо запрос, либо команда
CQSpublic interface IEnumerator{ object Current { get; }
bool MoveNext();
void Reset();}
Принципы, паттерны и подходыS.O.L.I.DПять базовых принципов ООП/ООД
CQSМетод – либо запрос, либо команда
Принципы, паттерны и подходыS.O.L.I.DПять базовых принципов ООП/ООД
CQSМетод – либо запрос, либо команда
Domain-Driven DesignГлубоко проработанная модель и максимально точная реализация
Принципы, паттерны и подходыS.O.L.I.DПять базовых принципов ООП/ООД
CQSМетод – либо запрос, либо команда
Domain-Driven DesignГлубоко проработанная модель и максимально точная реализация
Event-Driven ApproachРегистрация, отправка, роутинг, приём и реакция на события
CQRS
User Interface
Write Model Read Model
#msdevcon
Практический опытhttps://github.com/2gis/nuclear-river
Модель чтения как компонент
UI
Read Model
DB DB
Domain Model
Storage
AdminBackend
DB
Read Model API
Модель чтения как компонент
UI
Read Model
DB DB
Domain Model
Storage
AdminBackend
DB
Read Model API
CQRS
User Interface
Write Model Read Model
Модели чтения (Read Model)
User Interface
Write Model Read Model
Read Model
Read Model
Модель предметной области
Root1
Entity1 Entity2
ValueObject
ValueObject
ValueObject
ValueObject
Entity3
Построение Read Model-и
User Interface
Business Logic
Database
Events Querying
API
Database
Observer
Бекэнд выполнения запросов на чтение
HTTP (OData)
Querying Host
(NuClear River)
OData Controller(dynamic)
query (request)
EF(dynamic)
query (IQueryable)
Database
query (SQL)
dataobjects
jsonHTTP (json)
UI
Обработка событий
events
Handler 1 Handler 2 … Handler N
Акторная модель
public interface IActor{
IReadOnlyCollection<IEvent> ExecuteCommands(IReadOnlyCollection<ICommand> commands);
}
Акторная модельevent
s
Actor 1
events
events
commands
events
Actor 2 … Actor N
Акторная модельType1
Type1`
Type2
Type2`
Type3
Type3`
Type4
Type4`
Type5
Type5`
Акторная модельType1
Type1`
Root1
Entity1 Entity2
Type2
Type2`
Type3
Type3`
Type4
Type4`
Type5
Type5`
ValueObject
ValueObject
Акторная модельCreateDataObjectActorDeleteDataObjectActorReplaceDataObjectActorSyncDataObjectActor
Type1
Type1`
Type2
Type2`
Type3
Type3`
Type4
Type4`
Type5
Type5`
Акторная модельEntityActorValueObjectObjectActorRootToLeafActorLeafToRootActorSubrootToLeafActor
Root1
Entity1 Entity2
ValueObject
ValueObject
Eventual consistency
Event happened
Event sent Event received
Consistency
t
t2-t1
#msdevcon
Что дальше
Контролируйте
сложность
Используйте разные подходы Участвуйте!
Разделяйте отвественности
Выбирайте подходящую архитектуру
Применяйте лучшие практики
Используйте NuClear River
Делитесь фидбекомСтановитесь
контрибьютором
Границы контекстовПростые абстракции
Понятная модель приложения
#msdevcon
Ресурсы
NuClear Riverhttps://github.com/2gis/nuclear-riverODatahttp://www.odata.org/
Actor programming modelhttps://en.wikipedia.org/wiki/Actor_model
#msdevcon
Q&A
Строим простые и масшабируемые бекэндыДенис Ивановhttps://github.com/denisivan0vhttp://dev.ivanovdenis.ru
© 2016 Microsoft Corporation. All rights reserved.