posted on 2022-08-01, 00:00authored byAndrea Cappelletti
Creating and deploying distributed applications require significant domain-specific knowledge and effort. The overall process is complex: scalability, concurrency, and transparency must be considered. Moreover, testing and monitoring the health of a distributed application can be challenging and makes the development process error-prone, be- cause potentially, we have a lot of processes going on at different times and on different machines. Finally, it is costly. Software engineers with these specific sets of skills demand higher salaries.
The actor model was introduced more than 50 years ago specifically to make it easier to design and develop distributed applications by introducing the concept of the actor. Each computing unit is an actor that communicates with other actors by sending messages. This model simplifies the creation process of distributed applications by burying the complexity of writing synchronization mechanisms from scratch. Specific frameworks based on the actor model, like Akka, still require noteworthy expertise to translate the high-level design of the system to the low-level implementation. Many solutions, such as Tosca [1], attempted to find an approach to simplify the underlying complexity of building distributed applications. Still, none of them can address this problem from a single comprehensive perspective. Most of the solutions, in the current state of the art, have a high learning curve and still require remarkable knowledge to be used. Our approach, called Nebula, automates the development effort to produce actor-based applications by burying the complexity of the specifics of the Akka libraries in the underlying framework that exposes high-level declarative constructs for configuration. More in detail, it allows the business analysts to describe the high-level design of the system using a general declarative language such as Yaml or JSON. Specific business logic algorithms can be implemented using low-level code by developers, or they can be deployed as separate packaged services. Nebula translates the system description created by business analysts and automatically generates the application code at run-time based on the Akka framework created using the actor model.
Moreover, Nebula integrates an external monitoring mechanism to enable stakeholders to detect performance problems with the deployed code. The generated code is deployed on the fly using the Scala Reflection module based on the distributed actor model implemented in the Akka framework. We created the system, and the results of our experiments showed that it is effective and efficient.