The latest trend is trying to decrease the SDK dependencies of Spring cloud as more as possible, and utilize the non-intrusive services(functions) provided by kubernetes and istio(service mesh). so in this demo, we have the following design considerations:
Istio provides non-intrusive traffic management, security, and observability. In this demo, we use helm to show you some how-tos:
Also, security is the core of any system, in this demo, I will show you 3 options:
We have different architectures for local env and dev/test/prod envs:
-
In this demo, product-composite, product, review, recommendation are our sample business services, to improve the overall performance, we adopt non-blocking synchronous reactive programming and distributed message -driven asynchronous model.
They are all spring boot based projects, the spring boot version is 2.7.0, spring cloud version is 2021.0.3, resilience4j version is 1.7.1, Java OpenJDK version is 17.0.4
-
The mongodb(NoSQL), mariadb(DB), rabbit/kafka(MQ), redis(Cache), elastic search(EFK) are all infrastructure services, we can set up them by ourselves, however, most of cloud providers provide cost-effective and high available corresponding services -- cloud native services, they are good choices for us too, especially in prod env.
-
Kiali, jaeger, prometheus, and grafana are all management service which help us monitor and maintain our micro services.