High-Level architecture
The microservices that make up the Sunbird RC registry, and what each one does.


The microservices built as part of Sunbird RC, and their purpose, are explained below.
At a glance
Registry (core)
Always — the core service
Claim ms
If attestation or workflows are required
Notification ms
To send SMS or email (invites, OTPs)
Metrics service + ClickHouse
To capture and query registry events
DB
Always — the main data store
Elasticsearch
To enable discovery of public data
Keycloak
For authentication and authorization (replaceable)
Kafka
For asynchronous entity creation under high load
Encryption
To store private fields encrypted
ID Gen
To generate formatted IDs for schema fields
Core service
Registry (core)
The core service that enables the major functionality of Sunbird RC. It exposes APIs to configure schemas and manage entities and workflows, and can create entities synchronously or asynchronously. The registry supports several database providers:
Graph database (Neo4j)
Relational databases (PostgreSQL, HSQLDB, H2, MariaDB, MySQL, MSSQLServer)
NoSQL databases (Cassandra)
The registry dynamically generates REST APIs for the schemas you create, and applies authentication and authorization to those APIs based on the schema configuration. It also provides a discovery API for searching the public data of a particular schema.
Supporting services
Claim ms
Needs to be enabled if attestation or workflows are required. This service handles all the claims of an attestation.
Notification ms
Sends SMS or emails to users. The registry uses it to send invite notifications, and Keycloak uses it to send OTP messages. It can be configured with third-party plugins to send notifications.
Metrics service
Handles all the events emitted by the registry through Kafka and stores them in ClickHouse, though the service can also connect to other databases. It exposes an API that returns all the emitted events.
Encryption
Stores private fields configured in a schema in encrypted form in the database; they can only be decrypted by the encryption service. Enable it through the appropriate environment variables.
ID Gen
Generates IDs in a given format for any fields in the schema. Provide the format configuration in the schema configuration, and enable the service through environment variables.
Infrastructure
DB
The registry requires a main database to store all data. Any of the database providers listed under Registry (core) can be used.
ClickHouse
An open-source database used to store all the events emitted by the registry.
Elasticsearch
Stores all public data and enables its discovery.
Keycloak
Enables authentication and authorization of users on the APIs. It can be replaced by any OpenID Connect identity provider and OAuth2-compliant resource server.
Kafka
Required to create entities asynchronously. If the system needs to handle high load and high availability, entity creation (with credential generation) can be processed asynchronously using Kafka.
Video walkthrough
This video was recorded on Dec 22 for v0.0.13, so some details may differ from the current release.