Java is still the pervasive development language among enterprise developers, even though it is not developers' preferred cloud-native runtime and is falling behind other languages, according to GitHub's Octoverse.
Because of Java and Enterprise Java's history, an application built on a traditional Java stack, even if it is optimized for cloud-native environments, requires more memory and takes longer to start than applications built on other popular languages. With modern platforms like Kubernetes, Istio, and Knative, the need to have smaller runtimes that can scale up, down, and even down to zero is becoming more and more important.
So, what should cloud-native Java look like in order to enable people to develop, build, run, debug, and deploy in an immutable infrastructure without a steep learning curve? How easily can developers evolve cloud-native Java for serverless applications on demand?
New cloud-native Java runtimes need to provide the following four major benefits for developers to build cloud-native, microservices, and serverless Java applications:
- Increase development productivity: Developers want zero-configuration, live coding, and easy injection of extensions for implementing cloud-native applications.
- Enable reactive programming: Developers must be able to use EventBus or Vert.x to implement reactive applications as well as traditional imperative applications.
- Optimize serverless: Developers will evolve existing microservices to serverless applications when the cloud-native Java runtimes provide super-fast starting times and very small memory footprints.
- Adopt common open source projects and tools: Developers need to integrate with standard open source projects and tools such as Kubernetes, Vert.x, RESTEasy, Kafka, Jaeger, Prometheus, Infinispan, and more.
Keeping these criteria in mind, the cloud-native architecture considerations for Java are clear. We need to design for running containerized applications on DevOps and cloud-native platforms at scale and speed. This will enable developers to build cloud-native Java applications based on architectures such as high-performing cache, event-driven/reactive, and serverless on immutable infrastructures like Kubernetes with all of the expected benefits. The outcome will be effective in enabling developers to use the power and history of Java in a very new environment.