Learn how to create enterprise and production ready Microservices with Spring, Spring Cloud, Docker and Kubernetes.
- Section 1 - Introduction to Microservices Architecture
- Section 2- Building microservices using Spring Boot
- Section 3 - How do we right size our microservices & identify boundaries
- Section 4 - Handle deployment, portability & scalability of microservices using Docker
- Section 5 - Deep Dive on Cloud Native Apps & 15-Factor methodology
- Section 6 - Configurations Management in Microservices
- Section 7 - Using MySQL DBs inside microservices
- Section 8 - Service Discovery & Service Registration in microservices
- Section 9 - Gateway, Routing & Cross cutting concerns in Microservices
- Section 10 - Making Microservices Resilient
- Section 11 - Observability and monitoring of microservices
- Section 12 - Microservices Security
- Section 13 - Event Driven microservices using RabbitMQ,Spring Cloud Functions & Stream
- Section 14 - Event Driven microservices using Kafka,Spring Cloud Functions & Stream
- Section 15 - Container Orchestration using Kubernetes
- Section 16 - Deep dive on Helm
- Section 17 - Server-side service discovery and load balancing using Kubernetes
- Section 18 - Deploying microservices into cloud K8s cluster
- Section 19 - Introduction to K8s Ingress, Service Mesh (Istio) & mTLS
- Section 20 - Congratulations & Thank You
- Good understanding on Java and Spring concepts
- Basic understanding on SpringBoot & REST services is a bonus but not mandatory
- Interest to learn and explore about Microservices
- Spring Boot - https://spring.io/projects/spring-boot
- Create SpringBoot project - https://start.spring.io
- DTO pattern blog - https://martinfowler.com/eaaCatalog/dataTransferObject.html
- Model Mapper - http://modelmapper.org/
- Map Struct - https://mapstruct.org/
- Spring Doc - https://springdoc.org/
- Open API - https://www.openapis.org/
- Lucidchart Blog - https://www.lucidchart.com/blog/ddd-event-storming
- Docker website - https://www.docker.com
- Docker hub website - https://hub.docker.com
- Buildpacks website - https://buildpacks.io
- Google Jib website - https://github.com/GoogleContainerTools/jib
- Docker compose website - https://docs.docker.com/compose/
- Twelve-Factor methodology - https://12factor.net
- Beyond the Twelve-Factor App book - https://www.oreilly.com/library/view/beyond-the-twelve-factor/9781492042631/
- Spring Cloud website - https://spring.io/projects/spring-cloud
- Spring Cloud Config website - https://spring.io/projects/spring-cloud-config
- Spring Cloud Bus website - https://spring.io/projects/spring-cloud-bus
- RabbitMQ website - https://www.rabbitmq.com
- Hookdeck website- https://hookdeck.com
- Spring Cloud Netflix website - https://spring.io/projects/spring-cloud-netflix
- Spring Cloud OpenFeign - https://spring.io/projects/spring-cloud-openfeign
- Netflix Blog - https://netflixtechblog.com/netflix-oss-and-spring-boot-coming-full-circle-4855947713a0
- Resilience4j website - https://resilience4j.readme.io
- Spring Cloud Gateway website - https://spring.io/projects/spring-cloud-gateway
- Stripe RateLimitter pattern blog - https://stripe.com/blog/rate-limiters
- Apache Benchmark website - https://httpd.apache.org
- Grafana website - https://grafana.com
- Grafana Loki setup - https://grafana.com/docs/loki/latest/get-started/quick-start/
- Micrometer website - https://micrometer.io
- Prometheus website - https://prometheus.io/
- Grafana Dashboards - https://grafana.com/grafana/dashboards/
- OpenTelemetry website - https://opentelemetry.io/
- OpenTelemetry automatic instrumentation - https://opentelemetry.io/docs/instrumentation/java/automatic/
- Keycloak website - https://www.keycloak.org/
- Apache Kafka website - https://kafka.apache.org
- Docker compose file for Kafka - https://github.com/bitnami/containers/blob/main/bitnami/kafka/docker-compose.yml
- Local Kubernetes Cluster with Docker Desktop - https://docs.docker.com/desktop/kubernetes/
- Kubernetes Dashboard - https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
- Helm website - https://helm.sh
- Chocolatey website - https://chocolatey.org/
- Bitnami Helm charts GitHub repo - https://github.com/bitnami/charts
- Spring Cloud Kubernetes website - https://spring.io/projects/spring-cloud-kubernetes
- Spring Cloud Kubernetes Blog - https://spring.io/blog/2021/10/26/new-features-for-spring-cloud-kubernetes-in-spring-cloud-2021-0-0-m3
- GCP website - https://cloud.google.com
- GCP SDK installation - https://cloud.google.com/sdk/docs/install
- Kubernetes Ingress - https://kubernetes.io/docs/concepts/services-networking/ingress/
- Ingress Controllers - https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
- Istio (Service mesh) - https://istio.io
| Maven Command | Description |
|---|---|
| mvn clean install -Dmaven.test.skip=true | To generate a JAR file inside the target folder, skipping tests. |
| mvn spring-boot:run | To start a Spring Boot Maven project. |
| mvn spring-boot:build-image | To generate a Docker image using Buildpacks (no Dockerfile needed). |
| mvn compile jib:dockerBuild | To generate a Docker image using Google Jib (no Dockerfile needed). |
| Docker Command | Description |
|---|---|
| docker build . -t eazybytes/accounts:s4 | To generate a Docker image based on a Dockerfile. |
| docker run -p 8080:8080 eazybytes/accounts:s4 | To start a Docker container based on a given image. |
| docker images | To list all the Docker images present in the Docker server. |
| docker image inspect image-id | To display detailed image information for a given image ID. |
| docker image rm image-id | To remove one or more images for given image IDs. |
| docker image push docker.io/eazybytes/accounts:s4 | To push an image or a repository to a registry. |
| docker image pull docker.io/eazybytes/accounts:s4 | To pull an image or a repository from a registry. |
| docker ps | To show all running containers. |
| docker ps -a | To show all containers, including running and stopped. |
| docker container start container-id | To start one or more stopped containers. |
| docker container pause container-id | To pause all processes within one or more containers. |
| docker container unpause container-id | To unpause all processes within one or more containers. |
| docker container stop container-id | To stop one or more running containers. |
| docker container kill container-id | To kill one or more running containers instantly. |
| docker container restart container-id | To restart one or more containers. |
| docker container inspect container-id | To inspect all the details for a given container ID. |
| docker container logs container-id | To fetch the logs of a given container ID. |
| docker container logs -f container-id | To follow log output of a given container ID. |
| docker container rm container-id | To remove one or more containers based on container IDs. |
| docker container prune | To remove all stopped containers. |
| docker compose up | To create and start containers based on a given Docker Compose file. |
| docker compose down | To stop and remove containers. |
| docker compose start | To start containers based on a given Docker Compose file. |
| docker compose down | To stop the running containers. |
| docker run -p 3306:3306 --name accountsdb -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=accountsdb -d mysql | To create a MySQL DB container. |
| docker run -p 6379:6379 --name eazyredis -d redis | To create a Redis container. |
| docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.3 start-dev | To create a Keycloak container. |
| Apache Benchmark Command | Description |
|---|---|
| ab -n 10 -c 2 -v 3 http://localhost:8072/eazybank/cards/api/contact-info | To perform load testing on an API by sending 10 requests. |
| Kubernetes Command | Description |
|---|---|
| kubectl apply -f filename | To create a deployment/service/configmap based on a given YAML file. |
| kubectl get all | To get all the components inside your cluster. |
| kubectl get pods | To get all the pod details inside your cluster. |
| kubectl get pod pod-id | To get the details of a given pod ID. |
| kubectl describe pod pod-id | To get more details of a given pod ID. |
| kubectl delete pod pod-id | To delete a given pod from the cluster. |
| kubectl get services | To get all the service details inside your cluster. |
| kubectl get service service-id | To get the details of a given service ID. |
| kubectl describe service service-id | To get more details of a given service ID. |
| kubectl get nodes | To get all the node details inside your cluster. |
| kubectl get node node-id | To get the details of a given node. |
| kubectl get replicasets | To get all the replica set details inside your cluster. |
| kubectl get replicaset replicaset-id | To get the details of a given replica set. |
| kubectl get deployments | To get all the deployment details inside your cluster. |
| kubectl get deployment deployment-id | To get the details of a given deployment. |
| kubectl get configmaps | To get all the configmap details inside your cluster. |
| kubectl get configmap configmap-id | To get the details of a given configmap. |
| kubectl get events --sort-by=.metadata.creationTimestamp | To get all the events that occurred inside your cluster. |
| kubectl scale deployment accounts-deployment --replicas=1 | To set the number of replicas for a deployment inside your cluster. |
| kubectl set image deployment gatewayserver-deployment gatewayserver=eazybytes/gatewayserver:s11 --record | To set a new image for a deployment inside your cluster. |
| kubectl rollout history deployment gatewayserver-deployment | To know the rollout history for a deployment inside your cluster. |
| kubectl rollout undo deployment gatewayserver-deployment --to-revision=1 | To roll back to a given revision for a deployment inside your cluster. |
| kubectl get pvc | To list the PVCs inside your cluster. |
| kubectl delete pvc data-happy-panda-mariadb-0 | To delete a PVC inside your cluster. |
| Helm Command | Description |
|---|---|
| helm create [NAME] | Create a default chart with the given name. |
| helm dependencies build | To recompile the given Helm chart. |
| helm install [NAME] [CHART] | Install the given Helm chart into a Kubernetes cluster. |
| helm upgrade [NAME] [CHART] | Upgrade a specified release to a new version of a chart. |
| helm history [NAME] | Display historical revisions for a given release. |
| helm rollback [NAME] [REVISION] | Roll back a release to a previous revision. |
| helm uninstall [NAME] | Uninstall all of the resources associated with a given release. |
| helm template [NAME] [CHART] | Render chart templates locally along with the values. |
| helm list | List all of the Helm releases inside a Kubernetes cluster. |
