Recent trends and progress with programming languages, software design architectures, such as, micro-services, protocols like OData, and the diversity of multi-tiered and distributed deployment platforms have accelerated the trend towards applications constructed out of smaller, decoupled, and diverse modules.
Today, business applications are composed of multiple parts that are developed using different languages and technologies and deployed to a variety of target runtime environments.
This diversity introduces many lifecycle challenges. Developing, deploying, and configuring all the separate parts of complex applications involves many steps, typically target-platform or application-server specific. Required services must be pre-configured and provisioned, the different modules must be connected together, configured, and deployed across multiple platforms in a strictly specific order, often using different tools, repeated for testing, staging, and production environments. Zero-downtime upgrades is another complexity.
The term Multi-Target Application (MTA) Is used to express this diversity of lifecycle management requirements, and because other terms, such as, distributed, polyglot, multi-module, multi-tier, or multi-headed application, do not capture this diversity. However, in essence, MTAs are just a natural evolution of existing multi-part applications.
Platform as a service (PaaS), such as, Cloud Foundry offers improvements over traditional application servers in the flexible way they support diverse application runtime technologies through containerization. This introduces much more freedom to choose implementation technologies (Java, Node.js, Python, and so on). Applications can be decomposed into multiple modules, which can be scaled independently and technologies can be chosen to best fit each module's concern. For instance, a scalable request pre-processing proxy implemented in Node.js might façade a Java module implementing business logic. While this is favorable from a runtime aspect, development and lifecycle management of such distributed applications gets harder.