Orchestrate implements a microservices architecture composed of APIs and workers. Workers communicate using a publish-subscribe pattern with Apache Kafka as a message broker. All messages are standardized using Protobuf and gRPC.
The abstraction of components, communicating between microservices through a central message broker, and a defined protocol for message exchanges, makes Orchestrate highly maintainable, loosely coupled with other services, and easy to test.
Each API and worker can be configured using its own set of environment variables, and global environment variables. The Docker Compose file in the Orchestrate Quickstart provides an example of how to configure and execute the services.
Command line options are also available, and take precedence over environment variables.
- Identity Manager manages user accounts, or smart contracts deployed on a chain.
- Transaction Scheduler acts as an orchestrator between other transaction workers to create and send transactions.
- Tx-Crafter crafts transaction payloads. Crafting transaction payloads includes setting the gas price and gas limit of the transaction, and requesting faucet crediting.
- Tx-Signer signs transactions.
- Tx-Sender sends transactions to the blockchain.
- Tx-Listener listens for transaction receipts.
Internal Orchestrate APIs
- Contract Registry API stores the contract ABI, bytecode, and deployed bytecode.
- Chain Registry API stores chain configurations including the chain URL, chain name, listener configuration, and block information.
- Kafka message broker service enables communication between workers following a publish-subscribe pattern.
- Redis database service is used as distributed cache to store nonce values.
- Postgres database service stores transaction execution contexts.
- HashiCorp Vault for key management.