---
created: 2021-06-03 12:05
type: template
status: done
aliases:
tags: [type/template]
arc42: >
arc42, Шаблон для документирования системной архитектуры и архитектуры решений.
Создатели: Dr. Gernot Starke, Dr. Peter Hruschka и контрибьюторы
Версия Шаблона: 7.0 RU (основан на asciidoc), Декабрь 2018
© Мы признаём, что в данном документе используются материалы архитектурного шаблона arc42, <http://www.arc42.de>. Создатели: Dr. Peter Hruschka & Dr. Gernot Starke
---
Введение и цели
===============
Обзор требований
----------------
Цели
-----------------------------
Impact Mapping
| Цели (зачем) | Роли (кто) | Действия (как) | Результат (что) |
| ----------- | ---------- | -------------- | -------------- |
| ? | ? | Разработать MVP | |
Ключевые участники (стейкхолдеры)
---------------------------------
ICAR
| **Задача** | *Отвественный1* | *Отвественный2* |
| ----------- | ----------- | ----------- |
| *Задача1* | | |
| *Задача2* | | |
I (Informed) - Информированность
С (Committed) - Готовность
A (Authorized) - Уполномоченность
R (Representative) - Представительность
Архитектурные ограничения
=========================
Границы и окружение системы
===========================
## владелец
- время обработки < 1с
обработка чего?
в какой ситуации ?
кому это надо ?
### доступность
уточнение: 99.999% и режим 24/7
## катерина
требования:
- доступность (какое требование по качеству? )
- нагрузка в 50 000 запросов в сек
### доступность, производительность
## игорь
`~ 100 поставщиков`
`~ 2000 потребителей`
Max нагрузка ~ 10krps
тяжелый запрос ~ 1gb ~ 1 в 10 мин
простой > 4час
## Аналитик
в основном -автоматические, есть операторы, есть сводные отчеты
## Антон - потребитель хочет REST и код 200
Диаграмма контекста
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
title Пример построения диаграммы контекста
Person(customer, "Personal Banking Customer", "A customer of the bank, with personal bank accounts.")
System(banking_system, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
System_Ext(mail_system, "E-mail system", "The internal Microsoft Exchange e-mail system.")
System_Ext(mainframe, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Rel(customer, banking_system, "Uses")
Rel_Back(customer, mail_system, "Sends e-mails to")
Rel_Neighbor(banking_system, mail_system, "Sends e-mails", "SMTP")
Rel(banking_system, mainframe, "Uses")
SHOW_LEGEND()
```
Бизнес контекст
---------------
**\<Диаграмма или таблица\>**
**\<Опционально: Описание внешних доменных интерфейсов\>**
Технический контекст
--------------------
**\<Диаграмма или таблица\>**
**\<Опционально: Подробное объяснение технических интерфейсов\>**
**\<Отображение входных и выходных данных на каналы передачи данных\>**
Стратегия решения
=================
Компонентное представление
==========================
Верхнеуровневая компонентная схема системы
------------------------------------------
В этом разделе вы описывается верхнеуровневую декомпозицию системы на
компоненты. Описание включает в себя
- обзорную диаграмму
- мотивацию декомпозиции
- краткое описание компонентов, содержащихся на диаграмме. Варианты
реализации:
- использовать *одну* таблицу, в которой кратко и прагматично
описать все компоненты в виде черных ящиков и их интерфейсы
- изложить описание компонентов в виде списка, соответствующего
шаблону описания компонентов (см. ниже). В зависимости от
выбранного инструментария, этот список может быть подглавами
(для текстовых файлов), отдельными вложенными страницами (Wiki)
или просто вложенными элементами (в терминах инструмента
моделирования).
- (опционально): описание основных интерфейсов, которые не указаны в
шаблоне описания компонента, но крайне важны для понимания общей
компонентной схемы. Так как существует огромное количество возможных
способов описания интерфейсов, мы не приводим для них какого-то
определённого шаблона. В худшем случае вам придётся описать
синтаксис, семантику, протоколы, обработку ошибок, ограничения,
версии, атрибуты качества, требования совместимости и многое многое
другое. В лучшем же случае можно ограничиться примерами или простыми
описаниями сигнатур.
Диаграмма контейнеров
***\<Обзорная диаграмма\>***
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons
!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5
' uncomment the following line and comment the first to use locally
' !include C4_Container.puml
!include DEVICONS/angular.puml
!include DEVICONS/dotnet.puml
!include DEVICONS/java.puml
!include DEVICONS/msql_server.puml
!include FONTAWESOME/server.puml
!include FONTAWESOME/envelope.puml
' LAYOUT_TOP_DOWN()
' LAYOUT_AS_SKETCH()
LAYOUT_WITH_LEGEND()
title Пример контейнер-диаграммы
Person(customer, Customer, "A customer of the bank, with personal bank accounts")
System_Boundary(c1, "Internet Banking") {
Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA", "java")
Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser", "angular")
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device", "dotnet")
ContainerDb(database, "Database", "SQL Database", "Stores user registraion information, hased auth credentials, access logs, etc.", "msql_server")
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API", "server")
}
System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", "envelope")
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Rel(customer, web_app, "Uses", "HTTPS")
Rel(customer, spa, "Uses", "HTTPS")
Rel(customer, mobile_app, "Uses")
Rel_Neighbor(web_app, spa, "Delivers")
Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
Rel_Back_Neighbor(database, backend_api, "Reads from and writes to", "sync, JDBC")
Rel_Back(customer, email_system, "Sends e-mails to")
Rel_Back(email_system, backend_api, "Sends e-mails using", "sync, SMTP")
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
SHOW_LEGEND()
```
Мотивация декомпозиции: *\<Текстовое описание\>*
Компоненты
: *\<Описание содержащихся на схеме \"черных ящиков\"\>*
Основные интерфейсы
: *\<писание основных интерфейсов\>*
### \<Черный ящик 1\>
Диаграмма компонент
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
' uncomment the following line and comment the first to use locally
' !include C4_Component.puml
title Пример компонентной диаграммы
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Container_Boundary(api, "API Application") {
Component(sign, "Sign In Controller", "MVC Rest Controlle", "Allows users to sign in to the internet banking system")
Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts")
Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.")
Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.")
Rel(sign, security, "Uses")
Rel(accounts, mbsfacade, "Uses")
Rel(security, db, "Read & write to", "JDBC")
Rel(mbsfacade, mbs, "Uses", "XML/HTTPS")
}
Rel(spa, sign, "Uses", "JSON/HTTPS")
Rel(spa, accounts, "Uses", "JSON/HTTPS")
Rel(ma, sign, "Uses", "JSON/HTTPS")
Rel(ma, accounts, "Uses", "JSON/HTTPS")
SHOW_LEGEND()
```
*\<Назначение/область ответственности\>*
*\<Интерфейс(ы)\>*
*\<(Опционально) Характеристики качества/производительности\>*
*\<(Опционально) Каталог/пакет/репозиторий/местоположение файла
компонента\>*
*\<(Опционально) Закрытые требования\>*
*\<(Опционально) Открытые вопросы/проблемы/риски\>*
### \<Черный ящик 2\>
*\<Шаблон описания черного ящика\>*
### \<Черный ящик n\>
*\<Шаблон описания черного ящика\>*
### \<Название интерфейса 1\>
...
### \<Название интерфейса m\>
Уровень 2
---------
### Детализация компонента 1
### Детализация компонента 2
...детализированное описание внутренней структуры *компонента 2*
...
### Детализация компонента m
...детализированное описание внутренней структуры *компонента m*
Уровень 3
---------
### Детализация элемента \<\_компонент x.1\_\>
*\<Шаблон описания компонента\>*
### Детализация элемента \<\_компонент x.2\_\>
*\<Шаблон описания компонента\>*
### Детализация элемента \<\_компонент x.2\_\>
*\<Шаблон описания компонента\>*
Динамическое представление
==========================
Сценарий 1
----------
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
Container_Boundary(b, "API Application") {
Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
}
Rel_R(c1, c2, "Submits credentials to", "JSON/HTTPS")
Rel(c2, c3, "Calls isAuthenticated() on")
Rel_R(c3, c4, "select * from users where username = ?", "JDBC")
SHOW_LEGEND()
```
- *\<вставьте диаграмму или текстовое описание сценария\>*
- *\<вставье описание важных аспектов взаимодействия экзепляров
компонент, представленных на этой схеме\>*
Сценарий 2
----------
Сценарий n
----------
Схема развёртывания
===================
Инфраструктурный уровень 1
--------------------------
***\<Обзорная диаграмма\>***
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
' uncomment the following line and comment the first to use locally
' !include C4_Deployment.puml
AddElementTag("fallback", $bgColor="#c0c0c0")
AddRelTag("fallback", $textColor="#c0c0c0", $lineColor="#438DD5")
' calculated legend is used (activated in last line)
' LAYOUT_WITH_LEGEND()
title Пример диаграммы развертывания
Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){
Deployment_Node(dn, "bigbank-api***\tx8", "Ubuntu 16.04 LTS"){
Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
}
}
Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){
Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
}
}
Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS", $tags="fallback") {
Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c", $tags="fallback") {
ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.", $tags="fallback")
}
}
Deployment_Node(bb2, "bigbank-web***\tx4", "Ubuntu 16.04 LTS"){
Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){
Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
}
}
}
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
}
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows or Apple macOS"){
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox, Apple Safari or Microsoft Edge"){
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
}
}
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
Rel(spa, api, "Makes API calls to", "json/HTTPS")
Rel_U(web, spa, "Delivers to the customer's web browser")
Rel(api, db, "Reads from and writes to", "JDBC")
Rel(api, db2, "Reads from and writes to", "JDBC", $tags="fallback")
Rel_R(db, db2, "Replicates data to")
SHOW_LEGEND()
```
Мотивация
: *\<Разъяснения в текстовой форме\>*
Характеристики качества и/или производительности
: *\<Разъяснения в текстовой форме\>*
Отображение компонентов системы на инфраструктуру
: *\<Описание отображения\>*
Инфраструктурный уровень 2
--------------------------
### *\<Инфраструктурный элемент 1\>*
*\<Диаграмма и описание\>*
### *\<Инфраструктурный элемент 2\>*
*\<Диаграмма и описание\>*
...
### *\<Инфраструктурный элемент n\>*
*\<Диаграмма и описание\>*
Перекрёстные концепции
======================
*\<Концепция 1\>*
-----------------
*\<Пояснения\>*
*\<Концепция 2\>*
-----------------
*\<Пояснения\>*
...
*\<Концепция n\>*
-----------------
*\<Пояснения\>*
Архитектурные и дизайн решения
==============================
Требования к атрибутам качества
===============================
Дерево атрибутов качества
-------------------------
Сценарии проверки атрибутов качества
------------------------------------
Риски и технический долг
========================
```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
' uncomment the following line and comment the first to use locally
' !include C4_Component.puml
title Пример демонстрации рисков на компонентной диаграмме
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Container_Boundary(api, "API Application") {
Component(sign, "Sign In Controller", "MVC Rest Controlle", "Allows users to sign in to the internet banking system")
Component(accounts, "Accounts Summary Controller", "MVC Rest Controller", "Provides customers with a summary of their bank accounts")
Component(security, "Security Component", "Spring Bean", "Provides functionality related to singing in, changing passwords, etc.")
Component(mbsfacade, "Mainframe Banking System Facade", "Spring Bean", "A facade onto the mainframe banking system.")
Rel(sign, security, "Uses")
Rel(accounts, mbsfacade, "Uses")
Rel(security, db, "Read & write to", "JDBC")
Rel(mbsfacade, mbs, "Uses", "XML/HTTPS")
}
note left of spa #red
Security Risk
bla bla bla
end note
note right of db
Perfomance Risk
bla bla bla
end note
Rel(spa, sign, "Uses", "JSON/HTTPS")
Rel(spa, accounts, "Uses", "JSON/HTTPS")
Rel(ma, sign, "Uses", "JSON/HTTPS")
Rel(ma, accounts, "Uses", "JSON/HTTPS")
SHOW_LEGEND()
```
### Риски
| Идентификатор | Качество | Описание |
| -------------- | -------- |---------------------- |
| *\<Риск-1\>* | | *\<Описание-1\>* |
| *\<Риск-2\>* | | *\<Описание-2\>* |
### Предположения
| Идентификатор | Качество | Описание |
| -------------- | -------- |---------------------- |
| *\<Риск-1\>* | | *\<Описание-1\>* |
| *\<Риск-2\>* | | *\<Описание-2\>* |
### Зависимости
| Идентификатор | Качество | Описание |
| -------------- | -------- |---------------------- |
| *\<Риск-1\>* | | *\<Описание-1\>* |
| *\<Риск-2\>* | | *\<Описание-2\>* |
### Проблемы
| Идентификатор | Качество | Описание |
| -------------- | -------- |---------------------- |
| *\<Риск-1\>* | | *\<Описание-1\>* |
| *\<Риск-2\>* | | *\<Описание-2\>* |
Словарь
=======
| Термин | Определение |
| -------------- | ----------------------- |
| *\<Термин-1\>* | *\<Определение-1\>* |
| *\<Термин-2\>* | *\<Определение-2\>* |
[[ARC42]]