Scaling

There are many scenarios in which a single computer is not sufficient to accomplish its task. The reason for this is usually a large number of users who access the program or website in a given period of time.

The solution in this case is often the distribution of the load on many computers. In addition, it is often cheaper to use a large number of cheap components than a mega-expensive machine - assuming a distribution can be realized from the existing software.

The design of the software should be tailored to a later distribution at an early stage. The later you start this work, the more expensive the conversion will be.

devel.one offers a consistent method of dividing the software into smaller pieces that communicate with each other. In the beginning, these parts still work on a single machine. When the time has come and the load increases, it is sufficient to distribute the individual components to different computers and connect them by configuration. If the subdivision of the software has been sufficiently detailed, there is no need for reprogramming.

This is made possible by the loose coupling of the software parts through the use of messages as well as by the PlugIn system.

Example:

Verteilen

Component A requires components B and C. A, B and C are implemented as PlugIn. Technically, they are stored in a separate JAR file. At the startup, A reads the addresses of its sub-components from the configuration and then initiates the communication.

At a later date, the load on the computer has risen to such an degree that two additional computers must be purchased. The components B and C are copied to the PlugIn directory of these computers, the addresses for reaching the components on the first computer are updated, and the program continues. When using Network Services, even the step of changing the configuration is not necessary.

But what if an existing software has to be split up?
Usually you have an idea where the fracture should be done. This is of course combined with some programming. But also here you can use devel.one easily, because the library can be integrated by any JAVA™-program. Small targets with message handlers then take over the communication between the fragments. Direct method calls from A to B and C and vice versa are then replaced by messages.

Generally speaking, the subdivision of the software into microservices is very helpful for the maximum utilization of resources. The services are cleverly distributed to different namespaces/threads so that all cores of a machine can be utilized to capacity. At the same time, care is taken to ensure that services that have to communicate a lot with each other are preferably located in the same thread. Services that generate a lot of workload are separated into their own plug-ins at an early stage so that they can be outsourced in due course.