Microservice architecture

A microservice architecture has many advantages over a more traditional monolithic architecture. By breaking up a complex application into a set of loosely coupled services, software becomes highly maintainable and easily verifiable while providing a great degree of deployment flexibility. Improving or replacing microservices become a trivial task - this allows for low-risk upgrade paths. An additional benefit that should not be underestimated is the ability to choose the programming language best fit for the microservice at hand.

With a microservice architecture, onboarding engineers becomes a more feasible task as engineers can more easily master one or more services without having to understand the details of the larger complicated system. This will lead to more productive hires and higher quality contributions.

Koinos cluster

The Koinos cluster implements the Koinos protocol leveraging the benefits of microservice architectures. The microservices provided by Koinos Group facilitates all the necessary functions to power the Koinos blockchain (see Table 1 below for a complete list).

Table 1. A table containing information about the core microservices of a Koinos cluster.

Microservice

Language

Responsibilities

Koinos Chain

C++

Processing blocks and maintaining the state of the chain

Koinos Block Store

Golang

Storing block information

Koinos P2P

Golang

P2P communication between node clusters

Koinos Mempool

C++

Storing transactions that have yet to be included in blocks

Koinos Transaction Store

Golang

Storing transaction information

Koinos Block Producer

C++

The production of blocks

Koinos JSON-RPC

Golang

Providing API access from outside the cluster

Communication between microservices is accomplished by taking advantage of the battle hardened Advanced Message Queue Protocol (AMQP 0.9.1) as implemented by RabbitMQ. Each microservice maintains a connection to RabbitMQ which it uses to send and receive Remote Procedure Calls (RPC) as well as broadcast messages. Microservices avoid the need for polling by utilizing broadcast messages in order to implement an event driven paradigm.

flowchart B[Koinos Chain] <--> A(("RabbitMQ\n(AMQP 0.9.1)")) C[Koinos Block Store] <--> A D[Koinos Mempool] <--> A E[Koinos P2P] <--> A A <--> F[Koinos Block Producer] A <--> G[Koinos JSONRPC] A <--> H[Koinos Transaction Store]

Figure 1. A diagram demonstrating the interprocess communication data flow within a Koinos cluster.

Because of the extensibility of the Koinos cluster, users can develop custom microservices that provide additional functionality. User-created microservices have first class citizenship - in other words, they have the same capabilities of any core microservice provided by Koinos Group. This enables engineers and entrepreneurs to provide unique business propositions that would otherwise be difficult to implement - no longer is polling and parallel data storage required when you have access to the core event driven system.