In the end the main task is to identify technologies that minimize the overhead per nanoservice and at the same time preserve as many advantages of microservices as possible.
In detail the following points need to be achieved:
- • The expenditure for infrastructure such as monitoring and deployment has to be kept low. It has to be possible to bring a new nanoservice into production without much effort and to have it immediately displayed in monitoring.
- • Resource utilization, for instance in regard to memory, should be as low as possible to enable a large number of nanoservices with little hardware. This does not only make the production environment cheaper but also facilitates the generation of test environments.
- • Communication should be possible without the network. This does not only improve latency and performance but increases the reliability of the communication between nanoservices because it is not influenced by network failures.
- • Concerning isolation, a compromise has to be found. The nanoservices should be isolated from each other so that one nanoservice cannot cause another nanoservice to fail. Otherwise, a single nanoservice might cause the entire system to break down. However, achieving a perfect isolation might be less important than having a lower expenditure for infrastructure, a low resource utilization, and the other advantages of nanoservices.
- • Using nanoservices can limit the choice of programming languages, platforms, and frameworks. Microservices, on the other hand, enable, in principle, a free choice of technology.
Nanoservices enable the use of microservice approaches in areas in which microservices themselves are hardly useable. One example is the possibility of dividing a desktop application in nanoservices. OSGi (section 14.4) is, for instance, used for desktop and even for embedded applications. A desktop application consisting of microservices is, on the other hand, probably too difficult to deploy to really use it for desktop applications. Each microservice has to be deployed by itself, and that is hardly possible for a large number of desktop clients—some of which might even be located in other companies. Moreover, the integration of several microservices into a coherent desktop application is hard—in particular if they are implemented as completely separated processes.