Markus Eisele, Middleware Developer Advocate, Red Hat
The IT world as we see it today has changed dramatically over the last five years. Five years ago, we lived in a world where generations of developers spent months and years of work on centralized enterprise applications based on Java Enterprise technologies. With the advent of DevOps and Platform-as-a- Service (PaaS) offerings, and emerging requirements from connected devices in an Internet of Things (IoT) world, new developments hold tremendous potential to change the way we develop distributed systems composed of countless numbers of consumers and lightweight services. One thing that has not changed is enterprise-grade Java's place as a centerpiece in application development.
"Container technologies help encapsulate more complex services into single deployments"
The number of intelligent and personal devices in our lives is growing quickly, from fitness trackers and Internet-enabled smart scales to smartwatches. Across industries, we've seen companies enhance key products and services to enable new use cases by facilitating large amounts of information. For example, some newer cars now deliver coordinates and technical health data which manufacturers can use to deliver personalized services to their customers. The possibilities to enhance both products and services with new approaches to data seem practically limitless.
These possibilities are resulting in new and increasing needs for computing power and application responsiveness and the volume of data being 'in motion” instead of just stored in centralized databases is quickly changing requirements for today's IT infrastructures towards highly distributed systems.
Today’s IT landscapes are becoming increasingly distributed in comparison to the architectures established a few years ago, many of which were built on highly centralized architectures based on Java middleware platforms and integration solutions known as Enterprise Service Bus (ESB).
In many organizations, a new architectural approach using existing middleware components may be needed to prepare for new challenges and changing customer expectations.
The rise of complex, distributed system landscapes with a large number of users and a high level of networking, in combination with middleware platforms, ERP systems, and the increasing influence of microservices, can present a challenge for IT organizations.
Services have Different Requirements
With microservices top of mind for many IT leaders, many organizations find that they need to manage growing requests for additional services of various sizes. To support a growing number of client devices and consumers, the need to refactor existing applications emerges.
To help you understand the increasing variety of solution building blocks in modern middleware, let's consider the example of a banking application for mobile phones. Instead of simply making an app that can be deployed on mobile phones, new mobile applications may also want to use the device’s GPS information to present an ATM finder. This new feature no longer relies on a classical relational database but rather wants to use a geospatial data source.
Now, with individual services having a larger user base, the underlying platform should be able to scale these services as needed, quickly adapting to changing user behavior. Thinking about the banking app example, rent payments or other transfers commonly occurs at the beginning of a month, while fewer transactions may be expected in the middle of the month. These changing workloads need to be accommodated. Instead of using physical boxes, many organizations are moving their IT infrastructure to virtualization and PaaS to help adapt to these requirements. But, the need to scale services on a more fine-grained level has further shifted requirements towards immutable runtimes which can be orchestrated more easily.
Use the Best Tool for the Job
But, what are immutable runtimes and what advantages do they offer? Smaller services do not necessarily need heavyweight application servers. They have a clear scope and can contain the relevant configuration and resources needed to run them.
Container technologies help encapsulate more complex services into single deployments. And they offer another key advantage. Because they do not depend on a single application platform, they enable users to operate various technologies and platforms, putting developers back in charge with the ability to select the best tools for the job. This enables users to bring new technologies that may be a better fit for message-driven and reactive systems into the enterprise stack (e.g. Node.js or JVMbased applications).
Services can Evolve Much Faster
Individual services can evolve more quickly than a large monolithic application. They can be easier to test, have defined dependencies, and can deliver faster return on investment (ROI) if the organization is able to implement new methodologies and practices, like DevOps, which represents a new corporate culture that emphasizes the collaboration and communication of both software developers and other IT professionals while also automating the process of software delivery. These DevOps practices lead to agile projects which are able to quickly respond to changing requirements while still delivering working software at a high speed. And, because the individual teams are responsible for their parts of the individual applications, communication and coordination overhead can shrink.
Modern applications generally do not rely on a single technology, but they need to be enterprise-ready and able to run on a sustainable foundation to be considered mission critical, recoverable, and scalable, and to offer the security features enterprises seek. Bringing many different technologies and frameworks together on a holistic stack is a key requirement of today’s enterprise middleware.
And, Java is still a key language and technology for modern enterprises. With the amount of available best practices and know-how and the ease with which users can create complex enterprise applications using it, I expect it will continue to be a top ecosystem on which to run applications. Packaging may change by adopting the JVM as a runtime for immutable applications, and the switch to more reactive programming models may follow for some frameworks, but I believe the core requirements for enterprise-grade systems and client integration will not change.
Pyramid of Modern Application Development
Putting the above mentioned pieces together in one diagram reveals a pyramid of modern enterprise application development. In the future, I expect modern applications to be based on private, hybrid or public clouds where individual services run in containerized environments which map to user demand. Instead of complex and monolithic applications, microservices can help with quicker time to market while embracing the changes DevOps and agile methodologies bring to it. Containers also enable organizations to run a variety of different and new technologies alongside existing applications. Having the ability to control the fine-grained and heterogeneous services and bind them into applications that support both the business and customers in the best way possible is key for the success of tomorrow's enterprise Java middleware.