Архитектура телефонной платформы

Более подробно можно прочить в справочной документации платформы: 

https://рабочий.домен/docs/era/latest/architecture/

 

Архитектура платформы определяет архитектуру всего стека. Базовые категории вводятся в результате анализа нескольких входных требований, упомянутых в начале документа.

Система должна быть масштабируемой. Значит она многосерверная. Понятие сервера.

Система должна быть распределенной, обеспечивая полноценное функционирование отдельных частей при сетевой недоступности. Выделенная группа серверов на каждой площадке. Понятие сайта.

Система должна поддерживать разделение на несколько независимых компаний с независимым управлением данными. Понятие домена и сущности в домене.

Ключевыми атрибутами качества являются доступность и модифицируемость. Ориентация на мини-приложения – с четко очерченным назначением и функционалом – ролью. Понятие приложения и роли.

На каждом сервере работает одна или несколько ролей. Отсутствие паразитной взаимной зависимости от ресурсов было бы полезным в достижении надежности. Понятие ноды.

Таким образом ключевым для понимания является три слоя рассмотрения системы:

Слой инфраструктуры. Сайты, серверы, ноды.

Слой данных. Домены, сущности.

Слой логики. Роли, приложения.

 

Сайт - слой инфраструктуры

Группа серверов высокой доступности друг для друга, предоставляющая полный функционал системы в рамках кворума (50% + 1). За счет кворума обеспечивается целостность данных при потере связи между серверами сайта, поскольку функциональность поддерживается лишь в одной из групп, и только при условии большинства. Случай четного количества серверов решается с привлечением арбитра - внешнего сервера. Подробнее в xref:achitecture: Каждый сайт является независимым и может производить обмен информацией с другими сайтами. В том числе, возможно подключаться к любым сайтам, авторизовывать, регистрировать и работать с данными любых доменов. На каждом сайте должен обслуживаться хотя бы один домен, использование сайта без домена бессмысленно и невозможно. Определяется текстовым именем, которое начинается с латинской буквы в нижнем регистре, и может состоять из латинских букв и цифр.

Сервер - слой инфраструктуры

Площадка, позволяющая запускать программные приложения. Как правило одна физическая или виртуальная машина, имеющая уникальный IP-адрес. Каждый сервер должен принадлежать только одному сайту, использование сервера без прикрепления к сайту невозможно. Определяется текстовым именем, которое начинается с латинской буквы в нижнем регистре, и может состоять из латинских букв и цифр.

Нода - слой инфраструктуры

Процесс операционной системы. В нем работает экземпляр среды исполнения Erlang (англ. Erlang runtime system), которому дано уникальное имя. На одном физическом или виртуальном сервере (адресе) могут быть активны несколько нод. Распределение нод по серверам происходит автоматически на основании настроенной конфигурации.

Домен - слой данных

Сущность, определяющая границы группы объектов системы, предоставляющих доступ к функционалу системы. Логика работы системы использует домены и принадлежащие им объекты при реализации функционала и определении доступа для отдельных пользователей. Все данные внутри домена по умолчанию замкнуты. Относится к слою данных. Каждый домен обслуживается на конкретном сайте, использует собственные хранилища данных.

Сущность - слой данных

Любой объект в домене, созданный администратором и используемый системой в каких-либо протекающих процессах.

Приложение - слой логики

Условно независимый компонент программной части платформы, имеющий закрепленную ответственность и определенный интерфейс. Роли платформы реализуются в виде приложений уровня или их совокупностей. При сборке версии производится сборка приложений более высокого уровня, где платформа сама выступает в качестве приложения.

Роль (микросервис) - слой логики

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

Используемые технологии:

- Erlang OTP

- C++

- PostgreSQL

- Apache.Kafka

- Yandex.ClickHouse

- JS/TS + React

- Docker