Software Architectures


Modern software architectures consists of features such as elasticity and scalability. Elasticity describes the possibility to grow and shrink resources based on the current load. Scalability descibes the availability of the required infrastructure to provide the mentioned elasticity. In cloud environments, this functionality is provided by a given scaling controller, which can be configured, while custom software might need an individual implementation. The same is required for monitoring functionality. From application side in both cases a facade is recommended to provide additional monitoring functionality, where external tools can dock. The facade can also be leverage via a separate microservice for accessing the data:

For testing and go-lives this setup can be easily re-used. For having a staging environment, which is close to production, data can be re-routed from the productive to a staging environment. Therefore a second application is processing the same data as the production environment due to its architectural setup: 

Another testing approach is by going for a canary environment, which can be used in parallel to production. Data is send to both environments for updates, to stay consistent. At the same time a new version can be tested with a few users: