100% Asynchronous Design for Maximum Performance and Resource Use

nyssr.net is composed of a mesh of Java nodes. Each node can load hundreds of services as plugins. Services communicate asynchronously via messages, making almost all processes in nyssr.net asynchronous.

nyssr.net does not waste resources on waiting. Sending messages is asynchronous, the response will come back at a later time. Since everything happens in parallel, CPUs and cores are also completely utilized. Or the other way around: Even small computers with several cores perform as much as otherwise much larger and more expensive units. In addition, distributed working on small nodes scales much better than monoliths on large machines.

CPU
nyssr.net nodes use many threads. Microservices and applications are usually executed in their own namespaces and therefore have their own thread. The use of CPUs with multiple cores is therefore ideal. These can be fully utilized under high load.
However, this does not mean that this is a prerequisite for using nyssr.net. Nodes also run on cloud processors with only one core. The smallest nyssr.net installation therefore consists of one node on a processor with one core.
Stack depth
The stack depth of nyssr.net applications and services is very small. This is due to the fact that we are usually in a message handler that is fed with a message by the system. As a result, the memory consumption is also quite small, despite the heavy use of threads.
Resources
nyssr.net requires very little memory. Even a node with hundreds of services can manage with a standard VM. This is because services require neither parsers nor their own web servers. Everything is handled - asynchronously - by the system.
Our services are usually only a few KBytes in size. And so are instances of applications and factories. Instances are usually individual targets, i.e. Java classes that can receive messages. These communicate with various other services until a complex task has been completed and are then terminated again. Most instances therefore consist of a single Java class.
Code
All the user code is just a reaction to some message.
The Java code therefore looks similar everywhere. It largely consists of message handlers. This makes the code easy to read and also easy to understand.
Training
We realize that most developers are used to writing synchronous code. Therefore, we have made sure that nyssr.net developers do not have to deal with the technical aspects of being asynchronous. It's always about sending messages and reacting to messages. This makes familiarization very easy. It works like talking: One person says something, another person responds.
New employees learn to code very quickly and become productive immediately.
Teams
Small teams work independently of other teams - i.e. also asynchronously. You do not need build pipelines for microservices of nyssr.net. Microservices can be deployed independently. That leaves more time for actual creativity.