--- 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)** Запускает процессы с редакторами кода, которые можно открыть через браузер