# Архитектура и компоненты

## Структура

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FtKLO4pNoLHO5ubmsDIJp%2F%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BE%D0%B2.jpg?alt=media\&token=ac0537a1-d584-46f5-b149-2375652f16d9)

Бипиум состоит из 3 независимых приложений. Серверные приложения могут быть установлены на одном или разных серверах.

* **Bpium** — сервер приложения и логики
* **Bpium S3** — сервер файлового хранилища
* **Bpium BPM** — сервер исполнения процессов

Также для работы используются другие приложения

* **Postgre SQL** — сервер баз данных
* **Redis**— сервер хранилища состояния процессов и очереди заданий
* **Веб-сервер** (опционально) — веб-сервер для балансировки и HTTPS

Приложения для работы сотрудников:

* **Веб-приложение** — приложение для настройки системы и работы сотрудников
* **Мобильное приложение** — приложение для работы сотрудников

### Операционная система

Bpium — кроссплатформенное решение. Поддерживаются операционные системы Windows, на базе Linux, Alpine, Mac OS X.

Поддерживаются разные способы разворачивания системы: из файлов, через Docker-образы, в среде Kubernetres, PM2 и других.

## **Одиносерверная архитектура**

Все сервисы могут работать на одном выделенном или виртуальном сервере:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-LDg5jwoi9c6YNZenVzk%2F-LDg7L42HBiovLhTf1-P%2F1.%20Minimal-full.png?alt=media\&token=dcebf8a4-2f78-4994-a265-4d31763d50c3)

**Особенности:**

* Сервисы Bpium и Bpium S3 должны иметь публичные внешние адреса.

## **Многосервисность**

Возможно разделить сервисы по серверам для увеличения производительности и независимости:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-LDg5jwoi9c6YNZenVzk%2F-LDg9BmdWifDMmDmqJ5m%2F2.%20Separated%20servers.png?alt=media\&token=43377e18-c8bb-4205-9689-b56fc87d7fd8)

**Особенности:**

* Остальные сервисы могут не иметь внешних адресов, но должны быть досягаемы между собой
* Сервис Bpium BPM должен иметь доступ во вне и к сервису Bpium
* Сохранение состояния исполнения процессов реализуется за счет хранилища/очереди Redis

## Многосерверная архитектура

Сервисы могут находится на разных серверах и стоять за маршрутизаторами, внешними веб-серверами или балансировщиками нагрузки:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FaOkzRPnm8P2EXuRWziTh%2Fassets_-LACZmmM2xUWbZxyRr4s_-LACZnWTX_UP3XcilXPc_-LAC_1cBiS4Kh64pk-un_scheme_scalability.png?alt=media\&token=a8ddbbca-75ee-4027-b30a-eee1d515a93a)

**Особенности**

* Сервис Bpium должен иметь доступ к сервису Bpium S3 через интернет (по внешнему адресу)
* Сервис Bpium BPM должен иметь доступ к сервису Bpium через интернет (по внешнему адресу)

### **Каналы взаимодействия сервисов**

Все сервисы Bpium рассчитаны на многосерверную распределенную параллельную работу:

![](https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LACZmmM2xUWbZxyRr4s%2F-LDfv3KJRBMAl78dL10K%2F-LDg2_FvsXDreUWp9Oi_%2FMulti.png?alt=media\&token=565a46b3-01a7-4864-a397-52af06b11df3)

**Особенности:**

* Сервера Bpium S3 должны иметь общую папку для хранения файлов
* Синхронизация баз данных реализуется через репликацию на уровне PostgreSQL
* Синхронизация серверов Bpium BPM реализуется за счет хранилища/очереди Redis
