We wrap up our patterns focus with the space-based pattern. This is also known as cloud architecture. We will see how this approach allows us to break out the solution into components suited for scaling. We solve the problem of scalability in architecture instead of tools.
The Space-Based Pattern DefinedWe have often seen layers in our architecture discussions. Similarly, this pattern breaks out each layer into many workers. Therefore, it is described as a collection of grids. First, we have processing units that do the bulk of the work. We then have a virtual middleware composed of messaging, data, processing grids, and a deployment manager.
Applying The PatternWe see in the above list of components that each step of functionality in an application is broken out. However, the critical piece is the processing unit. There is often a bottleneck somewhere among the layers. We avoid that by replicating the entire solution across processing units in this approach. Then we can laterally scale out the solution by adding more units.
This solution may seem obvious and straightforward. However, keeping those processing units in sync requires overhead. We are replicating data and code. Thus, breaking the reliance on a single database or store. That often is the limiting factor that we are now getting away from.
Challenges Synchronizing the components is the hardest part of the space-based pattern. Each piece needs to fulfill the requirements for the solution and "know" the current state. Of course, a stateless solution makes this a breeze. However, that would essentially be a microservices architecture. This approach needs more information to provide the necessary services. Nevertheless, this also is a solution that tends to be perfect for high availability. When you have units shut down, you launch more to recover from those downed components.