SlideShare a Scribd company logo
1 of 40
#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
Logging
Audit
Компонентная модель
UI
Read Model
DB DB
Domain Model
Storage
Admin
Backend
DB
Read Model API
#msdevcon
Инженерные практики
Принципы и паттерны
Принципы, паттерны и подходы
S.O.L.I.D
Пять базовых принципов ООП/ООД
Принципы, паттерны и подходы
S.O.L.I.D
Пять базовых принципов ООП/ООД
CQS
Метод – либо запрос, либо команда
CQS
public 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
Admin
Backend
DB
Read Model API
Модель чтения как компонент
UI
Read Model
DB DB
Domain Model
Storage
Admin
Backend
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
Value
Object
Value
Object
Value
Object
Value
Object
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)
data
objects
json
HTTP (json)
UI
Обработка событий
events
Handler 1 Handler 2 … Handler N
Акторная модель
public interface IActor
{
IReadOnlyCollection<IEvent> ExecuteCommands(
IReadOnlyCollection<ICommand> commands);
}
Акторная модель
events
Actor 1
events
events commands events
Actor 2 … Actor N
Акторная модель
Type
1
Type
1`
Type
2
Type
2`
Type
3
Type
3`
Type
4
Type
4`
Type
5
Type
5`
Акторная модель
Type
1
Type
1`
Root1
Entity1 Entity2
Type
2
Type
2`
Type
3
Type
3`
Type
4
Type
4`
Type
5
Type
5`
Value
Object
Value
Object
Акторная модель
CreateDataObjectActor
DeleteDataObjectActor
ReplaceDataObjectActor
SyncDataObjectActor
Type
1
Type
1`
Type
2
Type
2`
Type
3
Type
3`
Type
4
Type
4`
Type
5
Type
5`
Акторная модель
EntityActor
ValueObjectObjectActor
RootToLeafActor
LeafToRootActor
SubrootToLeafActor
Root1
Entity1 Entity2
Value
Object
Value
Object
Eventual consistency
Event happened Event sent Event received Consistency
t
t2-t1
#msdevcon
Что дальше
Контролируйте
сложность
Используйте
разные
подходы Участвуйте!
Разделяйте отвественности
Выбирайте подходящую
архитектуру
Применяйте лучшие
практики
Используйте NuClear River
Делитесь фидбеком
Становитесь
контрибьютором
Границы контекстов
Простые абстракции
Понятная модель
приложения
#msdevcon
Ресурсы
NuClear River
https://github.com/2gis/nuclear-river
OData
http://www.odata.org/
Actor programming model
https://en.wikipedia.org/wiki/Actor_model
#msdevcon
Q&A
Строим простые и
масшабируемые бекэнды
Денис Иванов
https://github.com/denisivan0v
http://dev.ivanovdenis.ru
© 2016 Microsoft Corporation. All rights reserved.

More Related Content

Similar to Строим простые и масштабируемые бекэнды

Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едятHappyDev-lite
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...GoSharp
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Вебклуб Perlgolf.ru
Вебклуб Perlgolf.ruВебклуб Perlgolf.ru
Вебклуб Perlgolf.rumayperl
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET CoreAndrew Gubskiy
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azuremourhoon
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Fwdays
 
20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговлеAndrew Sovtsov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Сложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковСложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковz-tech
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийВиктор Золотов
 
Лекция 4
Лекция 4Лекция 4
Лекция 4itc73
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Alexander Novichkov
 
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - ZvooqDroidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - ZvooqMail.ru Group
 

Similar to Строим простые и масштабируемые бекэнды (20)

Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Вебклуб Perlgolf.ru
Вебклуб Perlgolf.ruВебклуб Perlgolf.ru
Вебклуб Perlgolf.ru
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Описание и архитектура TFS 2008
Описание и архитектура TFS 2008Описание и архитектура TFS 2008
Описание и архитектура TFS 2008
 
20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле20160323 Пример бизнес-приложения контроля качества в розничной торговле
20160323 Пример бизнес-приложения контроля качества в розничной торговле
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Сложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковСложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворков
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
 
Лекция 4
Лекция 4Лекция 4
Лекция 4
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)
 
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - ZvooqDroidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
Droidcon Moscow 2015. Clean Architecture и MVP. Алексей Макаров - Zvooq
 

Строим простые и масштабируемые бекэнды