Microsoft Orleans-based Distributed System Architecture with Microkernel Pattern









The objective of this research is to tackle the drawbacks of Microservice Architecture. One common reason for using Microservice is if in case a service is down, some services are still available for use. The problem is, perhaps other services will have dependencies on the down services, as a result, some functions of the system will not be available for use. The more dependencies inter-services, the more similar to the Monolithic architecture. On the other hand, the other benefit of Microservice is the scalability between multiple services. However, Distributed Architecture offers more easy and more flexible scalability.


Instead of splitting the functional source code into separate services, we split the functional source code into individual units. The units themselves have similar behaviour to microservices, like each unit will have access to a particular database or services only. The output of these units will be library files that will be copied to the running instance service on the servers. Furthermore, each unit library file will be put together in the same folder on the service instance and not separated into multiple services.


Each server instance will be a node of the cluster, and it can be configured in the appsettings.json file. Therefore, instead of splitting services by functionality, we group all functionality into one instance and then run multiple instances with the same functionality to form a cluster.


To be able dynamically to consume existing objects in the libraries, we create a Handler Grain that will create new grain for each client request, then this grain will execute the object methods through the reflection technique.



Distributed Architecture, Microkernel, Microsoft Orleans.