Microservices in Java: Yay or nay?
© Shutterstock /Medina
Is Java ideal for microservices development? Should companies continue to invest resources in this direction? We invited seven JAX DevOps speakers to weigh in on the microservices hype, Java’s place in all this and what’s happening in the container world.
Is there an ideal language for microservices?
It depends who you ask. Some of our interviewees strongly believe that Java is the ideal language for microservices while others simply claim that there’s no such thing as an ideal language for microservices. Which side are you on?
Before you make up your mind, you should know that according to a recent survey from Red Hat, DevOps developers have little loyalty to a particular technology, runtime, or framework. Instead, 45% of respondents believe in using the “right tool for the task”. In short, they’re gathering a series of very specific tools within their toolkit to make sure their approach is a success.
In the first part of this interview series, we asked seven JAX DevOps speakers to share their predictions for 2018 and pinpoint the characteristics that every good DevOps practitioner should have. Then we invited them to talk about DevSecOps, companies’ move to the cloud and how/if this trend will continue to grow in 2018.
Now it’s time to talk about containers, microservices and everything in between.
Will containers-as-a-service become a thing in 2018?
The DevOps actors
Daniel Bryant: I like to call this Container-Infrastructure-as-a-Service (CIaaS) — which I believe I borrowed from Adrian Cockcroft — and yes, this is a thing already! With the announcement of Amazon EKS at the AWS re:invent conference late last year, all of the major cloud vendors now offer a hosted Kubernetes offering.
Amazon have taken it one stage further with the announcement of AWS Fargate, where engineers can run containers without the need to manage a cluster, and this is an area of interest for me!
I don’t think there’s anybody that doubts the validity of Kubernetes.
Michiel Rook: I think containers-as-a-service has already become a thing in 2017, to be honest.
Obviously, Kubernetes is the platform to watch (and the platform I’m most excited about). Especially now that Azure (AKS) and even Amazon (EKS) have jumped onto the Kubernetes train, I don’t think there’s anybody that doubts the validity of that platform.
Philipp Krenn: It is kind of the next logical step. And I would say it’s another step into the Platform as a Service (PaaS) direction that we were promised 10 years ago that didn’t really happen back then.
I find AWS Fargate an interesting approach to move further away from infrastructure worries. Let’s see if that will fulfill its promise.
Is Java ideal for microservices development? Should companies continue to invest resources in this direction?
Daniel Bryant: My background is heavily influenced by Java and the JVM, and so I’m probably a little biased here, but I believe that Java is a good choice of language for microservice — particularly if this is the only language your development team knows!
Both the Java language and JVM have been battle-tested in production for 20+ years, and in general I also find Java code easy to read and maintain (in comparison with say, Scala or Ruby). Java microservices frameworks like Spring Boot, DropWizard and Spark Java also add a lot of value to the development experience.
Some of the microservice use cases where Java doesn’t shine is where a service is very simplistic — here a language like Ruby with the Sinatra framework, or Node.js can be very useful — or when you have infrastructure/platform resource constraints — here a (statically) compiled language like Golang can be useful.
Tommy Tynjä: Java and the JVM is a mature platform with a rich ecosystem. I believe you should select the right tool for the job. The JVM provides a stable platform but it does not require you to run Java. I’ve written microservices in Groovy and Scala as well where it made more sense than opting for Java, but we could still leverage from our knowledge running software on the JVM.
The beauty of a microservice style architecture is that it makes it easy for you to experiment with other languages or frameworks without making a heavy investment. Key is to have services that are small enough so that they can easily be replaced if necessary.
There no one ideal language for microservices development.
Pierre Vincent: Microservices are powerful in the way they allow to take the approach of “the right tool for the job”. In my opinion, it means that there no one ideal language for microservices development.
However, spreading the expertise over too many technologies comes with risks. When using different stacks, teams will have a harder time collaborating and coming to a roughly aligned way of doing things. Similarly, the lack of consistency can make it harder from a hiring perspective.
I can say from our point of view at Poppulo, we have been using Java for 10+ years and it remains our core language of choice for Product development (alongside with Go as the Ops/SRE language). Java may not be the trendy language in 2018, but it is where our engineers have the best expertise: it allows us to work fast and with confidence.
Michiel Rook: Java definitely works. Frameworks like Spring Boot and Play! are well established and offer great functionality. It all depends on the use case though: use what works and is applicable to your particular problem.
Antonio Cobo: I think Java will continue to be the most popular choice of language for microservices developments.
Philipp Krenn: I’m pretty sure the microservice hype will be over before Java. Highly distributed applications avoid some problems of the much-hated monolith, but there are no silver bullets. While Java is not the right solution for every problem, I wouldn’t disqualify its stability, mature tooling, availability of talent,… especially since it’s also moving into the space of leaner applications and frameworks.
Alexander Schwartz: Java gives you a wide range of possibilities:
- “fat” Microservices with Spring and the full Netflix stack,
- “medium” Microservices with Spring or Dropwizard that delegate resilience to a service mesh, and
- “small” reactive Microservices with i.e. Vert.x that have a minimal footprint and are fast to start up.
You can even choose the cloud you want to run them on – no cloud vendor lock-in! It is definitely a “yes” from me.
Containers are all the rage right now. Will general interest in containers grow this year?
Daniel Bryant: I think container technology is at the peak (or maybe just past the peak) of “inflated expectations” on the Gartner Hype Curve, and so I would container adoption will continue steadily.
Docker are doing a lot of work with their “Modernize Traditional Apps Program” in this space, and then a bunch of use from the community are writing blogs and articles on how to package and continuously deliver all types of application too — such as my “Containerizing Continuous Delivery in Java and Docker”, Arun Gupta’s Java and Kubernetes tutorials, Viktor Farcic’s DevOps 2.0 series, and Christian Posta’s great blog posts.
Tommy Tynjä: When I started working with containers many years ago, there were none of these orchestration tools available that we have today so we wrote our own in Bash. Today, the threshold to get started is much lower and people are getting more aware of the benefits that containers bring which makes it a natural choice. Today, container technology is easy to adopt and benefit from.
I’m not convinced there is value in migrating very old applications to running in containers or on a container platform, mostly because they haven’t been developed with those considerations in mind. The value in such an effort would need to be calculated in order to motivate it.
Michiel Rook: In general, I think that, technically, pretty much every legacy application can be containerized. The benefits of container technology are clear, so I guess we’ll see more of that happening.
Philipp Krenn: Containers will mature and keep growing, but that doesn’t mean they will replace other deployment models. They are a useful tool, but not the only one. We as an industry should stop pretending that there is only one right solution, which everybody has to follow. There are and will be plenty of businesses who are perfectly successful without using containers as their core technology.
In the last part of the interview series, our interviewees weigh in on the serverless boom and the challenges Kubernetes and Docker should address this year. Stay tuned!
Take a look at our interview series with last year’s DevOps influencers:
Are your calendars marked for JAX DevOps 2018? If you’d like to know more about the latest trends in DevOps and meet the top movers and shakers in the global DevOps scene, join us in London between April 9-12, 2018.