Cloud Native Java Microservices - Reference implementation based on Kubernetes
Table of Contents
Introduction
This project provides a reference implementation for running a Cloud Native Application which leverages the Java MicroProfile and Spring Boot technologies for its microservices. The target cloud environment for the application is a Kubernetes-based platform which might be Minikube / Docker Edge for development stages and IBM Cloud or IBM Cloud Private for production stages. Our project also supports Istio as our service mesh, with our guide here for further Istio details.
Architecture
Application Overview
The application is a simple store front shopping application that displays a catalog of antique computing devices, where users can search and buy products. It has a Web interface, and it relies on BFF (Backend for Frontend) services to interact with the backend data.
There are several components of this architecture.
- This OmniChannel application contains an AngularJS based web application. The diagram depicts it as a Browser.
- The Web app invoke its own backend Microservices to fetch data, we call these components BFFs, following the Backend for Frontends pattern. The Web BFF is implemented using the Node.js Express Framework. These Microservices are packaged as Docker containers and managed by the Kubernetes cluster.
- These BFFs invoke another layer of reusable Java Microservices. They run inside a Kubernetes cluster, for example the IBM Cloud Container Service or IBM Cloud Private, using Docker.
- The Java Microservices retrieve their data from the following databases:
- The Catalog service retrieves items from a searchable JSON datasource using ElasticSearch.
- The Customer service stores and retrieves Customer data from a searchable JSON datasource using IBM Cloudant
- The Inventory and Orders Services use separate instances of MySQL.
Implementation
This application has been implemented using two of the most popular technologies used for Java microservices development.
References