---
tags: Архитектура
---
# Архитектура
```graphviz
digraph Arch {
graph [nodesep=0.75]
A [label="API"]
B [label="Backend"]
C [label="Code Runner"]
D [label="Database"]
E [label="Code Editor"]
F [label="Frontend"]
Q [label="Queue"]
F -> A
F -> E [style="dotted"]
A -> B
A -> D
A -> E [style="dotted"]
B -> D
B -> C
B -> Q
{rank=min; E}
{rank=same; E; F}
subgraph cluster_API {
{rank=same; A B}
style="dotted"
A B
}
subgraph cluster_Editor {
style=invis
node [shape=record]
E -> Supervisor
Supervisor [label="{Supervisor |{ User1 Editor | ... | UserN Editor}}"]
}
}
```
> Курсивом выделены необязательные пункты
## [Frontend](/IVnb6ghGTnKH3Sc0AHAyvg)
* **[Frontend](/IVnb6ghGTnKH3Sc0AHAyvg)** общается только с **[API](/puevSQbdTe-guzWXpIslXg)**
* _**[Frontend](/IVnb6ghGTnKH3Sc0AHAyvg)** редиректит на редактор кода пользователя_
## [API](/puevSQbdTe-guzWXpIslXg)
* **[API](/puevSQbdTe-guzWXpIslXg)** хранит данные о курсах/задачах/учениках/учителях в **[Database](/ZwJ50RnETqGDwTS81UFhVw)**
* **[API](/puevSQbdTe-guzWXpIslXg)** ставит задачи на проверку в **[Backend](/wrVTZHlERk-pRXfgE_BV1w)**
* **[API](/puevSQbdTe-guzWXpIslXg)** и **[Backend](/wrVTZHlERk-pRXfgE_BV1w)** можно сделать одним сервисом
* _**[API](/puevSQbdTe-guzWXpIslXg)** запускает браузерные редакторы кода через **[Code Editor](/i-BLixpdQ9-Pp6wPR8xbHA)**_
## [Backend](/wrVTZHlERk-pRXfgE_BV1w)
* **[Backend](/wrVTZHlERk-pRXfgE_BV1w)** кладет результаты проверки в **[Database](/ZwJ50RnETqGDwTS81UFhVw)**
* **[Backend](/wrVTZHlERk-pRXfgE_BV1w)** использует **[Code Runner](/gCRhFIsdTwK9JBbikXy6aw)**, чтобы запускать код на C++/Java/Pascal/Python в песочнице
* **[Backend](/wrVTZHlERk-pRXfgE_BV1w)** использует **[Queue](/W3hmwEX5QIq3SJXlWB5nkA)** как брокер для задач
## [Code Editor](/i-BLixpdQ9-Pp6wPR8xbHA)
* **[Code Editor](/i-BLixpdQ9-Pp6wPR8xbHA)** Запускает процессы с редакторами кода, которые можно открыть через браузер