Modernizing Enterprise Software Applications: Modern Architecture Concerns (part 2 of 7)
Software development continues to learn lessons from successive trends and resulting outcomes in the industry. Businesses are increasingly drawn to the operational and financial benefits that exist in cloud hosting. Combined with the well-established simplification which multi-tenancy can offer, bringing new customers onto your solution is often becoming faster and more streamlined. For reasons of scalability, engineering complexity or complex business domains, architects are increasingly opting into microservices in place of traditional tiered monolithic solutions.
Definitions
Containerization: Application containerization is an OS-level virtualization method used to deploy and run distributed applications without launching an entire virtual machine (VM) for each app. Multiple isolated applications or services run on a single host and access the same OS kernel. Containers work on bare-metal systems, cloud instances and virtual machines, across Linux and select Windows and Mac OSes (TechTarget).
Microservices: A microservices architecture consists of a collection of small, autonomous services. Each service is self-contained and should implement a single business capability (Microsoft).
Multi-tenancy: Multi-tenancy is a reference to the mode of operation of software where multiple independent instances of one or multiple applications operate in a shared environment. The instances (tenants) are logically isolated, but physically integrated (Garner).
Considerations for Your Technical Architecture Planning
Modern Java or .NET Core stacks are both viable technical directions forward to ensure modernization without compromising on enterprise grade library support and a culture of strongly organized code. The evolution of your architecture should be informed by the skill set of your tech team and the ease with which evolution can be effected using agile methodologies.
Containerization consumes fewer resources than virtualization, and where applicable it requires less OS licenses than a virtualized setup. When implemented, it can be helpful for developers also, especially in a microservice architecture where each developer needs to be running many different moving parts.
Microservices do not need to share the same technology stack, libraries, or frameworks. There are proponents of deliberate polyglot approaches where the organization gains the benefits of multiple approaches. However, in all but the largest of organizations, we recommend retaining the benefits of a manageable portfolio of technologies.
Some microservice solutions are geared towards deliberately limiting re-use of code or data structures between elements. Weigh the benefits of this strict boundary approach against the learned dangers of duplicative solutions representing multiple entry points for maintenance and extensibility.
Multi-tenancy allows one instance of software to run on a server and serve multiple tenants; multi-tenancy contrasts with multi-instance architectures, where separate software instances operate on behalf of different tenants. Consider safeguards needed for security in ensuring multi-tenancy at all levels. If APIs and messaging follow disciplined (and documented) naming structures, it becomes easier to ensure expectations are followed at all levels.