Deploy Java microservices on Kubernetes with polyglot support  

Deploy Java microservices on Kubernetes within a polyglot ecosystem

Last updated

No application is an island. Today, developers are adopting integrated microservices and cloud-native microservices architectures. But with current application architectures, microservices need to co-exist in polyglot environments. In this developer journey, you’ll learn how to deploy a Java microservices application that runs alongside other polyglot microservices, leveraging service discovery, registration, and routing.

By Animesh Singh, Anthony Amanse

Overview

In a polyglot world, microservices need to be deployed together and can’t simply rely on language native frameworks for service discovery, routing, and other tasks. This journey shows you how to deploy a Java-based microservices application called “GameOn!” within a polyglot ecosystem.

The application is a throwback text-based adventure game built to help you explore microservice architectures and related concepts. The app runs on a Kubernetes cluster and has two types of microservices: core and platform. The core microservices are written in Java and leverage polyglot services for support. With this kind of pattern, microservices either use sidecars as processes inside the same microservice container or use separate container sidecars to leverage platform services for service discovery, registration, and routing. All of the microservices run in Docker containers managed by a Kubernetes cluster.

Flow

  1. The user visits the GameOn! deployment on Kubernetes through a proxy, which is based on HAProxy and is responsible for surfacing the collection of APIs as a single facade for the entire application. WebApp is a simple NGINX process that provides the web front end to the client device.
  2. The user interacts with the Player microservice to play the game. The microservice provides a public API for CRUD operations, and for managing API tokens.
  3. The Player microservice uses the Auth Java microservice to authenticate the user with the selected social sign-on service and responds to the client with profile and progress data for the authenticated player.
  4. The front-end client establishes a WebSocket to the Mediator service to begin playing the game. The Mediator service is implemented in Java using WebSphere Liberty, and connects players to rooms over WebSockets.
  5. The user creates a new room by clicking a button in one of the sample walkthroughs.
  6. The developer uses the Map microservice within the room implementation to ensure the room is registered with the latest connection information. The Map service is a Java EE application running on WebSphere Liberty that provides a public REST API using JAX-RS.
  7. The Map service checks with the Player service to ensure that the developer is permitted to update information about the room based on an API token associated with the developer.
  8. The Mediator service establishes WebSocket connections to the live room service as users navigate to the room.

Components

IBM Bluemix Container Service

IBM Bluemix Container Service manages highly available apps inside Docker containers and Kubernetes clusters on the IBM Cloud.

Bluemix DevOps Toolchain Service

Enable tool integrations that support your development, deployment, and operation tasks.

HAProxy

Enable tool integrations that support your development, deployment, and operation tasks.

Kubernetes Cluster

Create and manage your own cloud infrastructure and use Kubernetes as your container orchestration engine.

Redis

An open-source, in-memory data structure store, used as a database, cache and message broker.

Apache Kafka

A distributed streaming platform for building pipelines and apps.

Apache CouchDB

An open-source database software that focuses on ease of use and having an architecture that “completely embraces the Web.”

NGINX

A free, open-source, high-performance HTTP server and reverse proxy.

WebSphere Liberty

A dynamic and easy-to-use Java EE application server, with fast startup times, no server restarts to pick up changes, and a simple XML configuration.

Featured technologies

Cloud

Accessing computer and information technology resources through the Internet.

Container Orchestration

Automating the deployment, scaling and management of containerized applications.

Containers

Containers are virtual software objects that include all the elements that an app needs to run.

Java

A secure, object-oriented programming language for creating applications.

Microservices

Collection of fine-grained, loosely coupled services using a lightweight protocol to provide building blocks in modern application composition in the cloud.

Related blogs

The next generation of applications: Reactive, cognitive, and real-time data-driven

The next generation of applications will be reactive and cognitive — but they’ll also need to process real-time data. There are three main characteristics that will form the base for any application design pattern over the next decade: Reactive: Applications are moving toward a microservices architecture, where scalability, resiliency, responsiveness, and being message-driven are key...

Continue reading The next generation of applications: Reactive, cognitive, and real-time data-driven

Related links