# Architectural Dimensions: Application, Network, Infrastructure

## Software (Codebased Application) Architecture

* Monolithic (Монолит) — единое приложение со всеми компонентами в одном процессе.

* Service-Oriented (SOA) — крупные сервисы с централизованной шиной (ESB).

* Microservices — множество независимых мелких сервисов (каждый за свою бизнес-возможность).

![Software (Codebased Application) Architecture](/pictures/ComputerScience/EvolutionofSoftwareArchitecture.png?raw=true)

Эволюция: Monolithic (2000-е) -> SOA (середина 2000-х) -> Microservices (2010-е).


## Network interaction architecture

* [Client-Server (Клиент-Сервер)](./2.4.2%20Client-Server.md) - Классическая централизованная модель: клиент запрашивает, сервер отвечает. Основа веба и API.

    * Базовый Client-Server — прямое соединение клиента с сервером.

    * API Gateway — единая точка входа для всех клиентских запросов к вашей системе.

> Нужна простота и контроль -> Client-Server.

* Peer-to-Peer (P2P, Одноранговая) - Полностью децентрализованная модель: все узлы равны и обмениваются данными напрямую. Используется в файлообмене и блокчейне. 

Примеры: BitTorrent, блокчейн сети, Skype (раньше), WebRTC для прямых соединений.
Особенность: Нет центрального сервера или он минимален.

> Нужна устойчивость и децентрализация -> P2P. 

![ClientServerP2P](/pictures/ComputerScience/ClientServerP2P.png?raw=true)

* Event-Driven/Event-Based (Асинхронная/Событийно-ориентированная)
Реактивная модель: компоненты общаются через события, а не прямые запросы.
Когда: Нужна гибкая реакция на события, масштабируемость, слабая связанность.
Подтипы:

    * Event-Driven/Event-Based — общая концепция коммуникации через события

    * Publish-Subscribe (Pub/Sub) — издатели → брокер → подписчики

    * Message Queue/Message Broker — сообщения в очередях для асинхронной обработки

Примеры: Уведомления, реальные обновления, микросервисная коммуникация.
Технологии: Kafka, RabbitMQ, AWS SNS/SQS, Redis Pub/Sub.

> Нужна гибкая реакция на события и масштабируемость -> Event-Driven.

![EventBasedEventDriven](/pictures/ComputerScience/EventBasedEventDriven.png?raw=true)

## Infrastructure Architecture

```
[Клиент (браузер)] 
    ↓ HTTP/HTTPS
[Web Server] (возвращает html)
    ↓ (проксирует/передаёт)
[Application Server] 
    ↓ (запрашивает данные)
[Database Server]
```

* Web Server (Веб-сервер) - статический сервер

Web server - программа, которая использует протокол **HTTP (Hypertext Transfer Protocol)** для предоставления пользователям **статических** HTML, CSS или JavaScript файлов в ответ на их запросы.

До 90х годов весь интернет был построен на архитектуре Web Server.

Примеры использования Web Server архитектуры:
* Сайты-визитки (лендинги);
* Брошюры, документация;
* Блоги, которые собираются в статические файлы (например, с помощью Jekyll, Hugo, Gatsby).

Но что происходит, если веб-сервер получает запрос, который необходимо обработать динамически?
Вот тут-то и вступает в дело web server softwares: Nginx и Apache.

* Web Application (Веб-приложение) Server - динамический сервер (бэкенд)

Состоит из двух частей: запрос от пользователя передается Web Server, а он уже проксирует на Application Server.

Это сервер, на котором фактически работает ваше приложение. Сервер приложений **не ограничивается протоколом HTTP** и способен выполнять множество других задач.

Это более сложная архитектура. Сервер запускает приложение (на Python, PHP, Node.js, Java, C# и т.д.), которое для каждого запроса может:

* Обращаться к базе данных (MySQL, PostgreSQL, MongoDB);

* Взаимодействовать с другими сервисами (API, очереди сообщений);

* Генерировать HTML "на лету" на основе шаблонов и данных.

Когда сервер приложений получает запрос от веб-сервера, он сообщает об этом вашему приложению, и ваше приложение выполняет указание.


* Database Server (Сервер приложений)

Сервер базы данных — это компьютерная система, которая предоставляет другим компьютерам услуги, связанные с доступом к данным и их извлечением из базы данных.

Сервер базы данных хранит Database Management System (DBMS)и databases. Он ищет в базе данных выбранные записи и передаёт их обратно по сети.

![WebServerWebApplicatinServer](/pictures/ComputerScience/WebServerWebApplicatinServer.png?raw=true)

--------

[2.4 Architecture Theme Folder](/2%20ComputerScience/2.4%20Architecture/) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [2.4.2 Client-Server Architecture Theme](./2.4.2%20Client-Server.md)

