Basic Platform Settings#


Platform Architecture#

The platform is built on a microservice architecture that provides modularity, scalability, and flexibility. The key features of the architecture include:

  • Microservice Architecture: The system is divided into separate microservices, each of which performs a specific function and operates independently.

  • Distributed Processing: Microservices can be distributed across different nodes, providing load balancing and increased system resiliency.

  • Containerization and Orchestration: Using Docker to containerize microservices and Kubernetes to orchestrate them makes it easier to deploy, scale, and manage the application.

  • Modularity and interoperability of microservices: Modularity is achieved by clearly delineating functions between microservices, and communication between them takes place via specific APIs and interoperability protocols.

The system comes in eleven Docker container images:

Service

Purpose

catalogs

Storage and processing of user data, RLS support

data-flow

Processing and storing custom data scripts

file-storage

Binary data storage

identity

User management and authentication

notification

Sending notifications

scheduler

Event scheduler in the system; all events are called via the bus

template-service

Working with templates

view-service

Storage of system metadata, orchestration of metadata update processes

workflow

Scripting via the State Machine

web-studio

Application development web part

web-workplace

Web part for running applications


Technology Stack#

  • Foundation: The platform is built on Net Core 8.0, a modular open-source software development platform.

  • Development Language: C# is used as the primary programming language.

Additional Infrastructure#

  • PostgreSQL (version ≥13.0): Object-relational database management system for primary data storage.

  • Redis (version ≥5.0): A non-relational database used for data caching.

  • RabbitMQ (version ≥3.0): A software message broker for handling system events and queues.

Web Parts#

  • Uses the Blazor front-end web framework, part of Net Core, to create web components.

  • Web Parts are run as a client-side WebAssembly (WASM).

Installation Requirements#

  • Kubernetes: Kubernetes cluster is required for the clustered version of the product to work.

    • Minimum Configuration:

      • 1 x Master (2 vCPU, 4GB RAM, 20GB SSD) - 3 nodes with the Master role are recommended.

      • 1 x Ingress (4 vCPU, 8GB RAM, 20GB SSD)

      • 3 x Worker (16 vCPU, 32GB RAM, 60GB SSD)

  • Operating System: Ubuntu Server 22.04 LTS

Networking and Ports#

  • All network traffic uses the TCP/IP protocol.

  • By default, each microservice (except web-studio) provides two ports:

    • 80: Public API (HTTP/1.1).

    • 5001: Private API (HTTP/2).

  • Web-studio: Provides only port 80 for serving static resources.

  • All microservices, with the exception of web-studio, must have access to PostgreSql, Redis, and RabbitMQ.

Protocols Used#

  • HTTP/1.1: For public API.

  • GRPC: For private API.

  • WebSocket: For the Notification service.

  • SIP over WebSocket: Optional, for integration with SIP in a web-workplace.

  • RTC/RTCP: Optional, for integration with SIP in a web-workplace.

Storing Data#

Each microservice manages its own scheme in the database, without overlapping with the others.

Service

Scheme

catalogs

catalogs

data-flow

dataflow

file-storage

file_storage

identity

identity

notification

notification

scheduler

scheduler

template-service

template

view-service

view_service, maintenance

workflow

workflow, wfc_persistence

web-workplace

workplace-host


Each microservice is responsible for creating and migrating the metadata of its schemes.

The catalogs service, which is responsible for storing user data, creates an additional partition in its scheme for each data type, inherited from the primary table, as well as additional partitions to implement RLS if necessary. When these partitions are formed, all additional indexes and external keys are generated.

The composition of indexes and external keys depends on the configuration of the application you are building in the platform.

Authorization & Permissions Management#

  • Local authorization using JWT tokens.

  • Ability to connect external authorization systems (oAuth, OpenId Connect, Windows authorization, SAML).

  • RBAC (Role-Based Access Control) for access control.

Collecting metrics and traces#

All services, except web-studio, provide metrics in the ‘Prometheus’ format. Metrics are available by the relative path /metrics. To check the availability of the service, two paths are provided /hc and /liveness:

  • hc - detailed information on all checks;

  • liveness - a short response about the availability of the service.

Logs are collected by the system itself, all logs are written to the maintenance scheme, and log viewing is available in the web-studio. The logging level for each service is configured separately through the web-studio, the “Maintenance” section. Two Zipkin or Jaeger systems can be connected to collect traces. Trace collection is configured at the service parameter level. If you want to export traces to Jaeger, you need at least version 1.35.