An enterprise application is a kind of software that is commonly characterised by its complexity and largeness.
Enterprise applications usually have a large number of layers and require a good up-front design to meet requirements regarding quality, scalability, performance, maintainability and many others. The requirements are rising rapidly, just like the needs of businesses to stay competitive.
Software architecture paradigms are constantly evolving to address those requirements. The following are the trends in modern enterprise application development.
Microservice architectures have evolved from the idea of SOA (Service Oriented Architecture). While service oriented architecture is aimed at decomposing a system into components and enhancing it with the benefits of loose coupling and reusability, microservices extend this idea by converting the system components into flexible and independently deployable units. This way a much more modular structure is enforced to get rid of the complexities of monolith-like applications, which were still present in the original concept of SOA. The following are the benefits of microservice architectures:
- Fault tolerance - It’s avoided to have a single point of failure. The system is designed in a way that, if a component “misbehaves”, it can easily be left out and replaced. Load balancing between several instances of a service can be employed to ensure high availability of the service, and this way it’s avoided that a single failure affects the whole system.
- Independent upgrading - To upgrade a part of the system, it is not necessary to redeploy the entire system each time, only the updated component needs to be replaced, which leads to better maintainability.
- Polyglotism - It’s not necessary to develop the entire system in a single programming language or technology stack. This way it is possible to use a technology stack which is best suited for each part of the system. Services communicate together through well defined, language agnostic interfaces (e.g. RESTful API’s).
The main drawback of microservice architectures is the increased network communication between services which leads to slower performances, but since the network speeds have improved a lot through the evolution of computer networks, this is slowly becoming an ignorable problem.
Containerisation is a concept which became popular just recently thanks to the Docker container platform. Unlike virtual machines, containers don’t require having a separate OS instance per machine. Containers run on a shared instance of the operating system and improve system performance and efficiency by removing the additional memory, storage and bandwidth consumption which arises by duplicating the OS. Containers go hand in hand with microservices and can be used to deploy a component of the system in an isolated environment with all the required dependencies of the component, undisturbed from other components and their environments.
Unikernels are a bleeding edge virtualization technique which is aimed at providing self-contained environments that contain only those low-level features that an application needs by bundling them together with the application, which makes them faster to boot and run and enables running more of them on the same physical machine.
Single-page applications (SPA)