/advanced-microservices

Deep dive in some advanced concepts of microservices architecture based on my previous repo "demo-microservices"

Primary LanguageJavaMIT LicenseMIT

๐Ÿงบ Sample Store App With Microservice Architecture ๐Ÿงบ

A practical sample store, built with spring frameworks, kubernetes and deployed on AWS. This is an advanced part based on my previous project demo-microservices in which I'm focusing on security concerns, resiliency, observability and deployment improvements.

๐Ÿ’ก This application is not business oriented and my focus is mostly on technical part, I just want to implement a sample app from scratch with microservice architecture using different technologies, principles and patterns.

๐ŸŒ€ This Application is in-progress and I will add new features over time. ๐ŸŒ€

Guide & Documentation

๐Ÿ”œ Coming soon ... ๐Ÿ”œ

Support

If you like my work, feel free to:

  • โญ this repository. And we will be happy together :)

Thanks a bunch for supporting me!

Features

  • โœ… Using Postgres and PgAdmin for database and database management system.
  • โœ… Using docker and docker-compose for running the application on local machine, docker, kubernetes and AWS environment.
  • โœ… Using Event Driven Architecture on top of RabbitMQ Message Broker.
  • โœ… Using Prometheus and Grafana for monitoring and metrics.
  • โœ… Using Sleuth and Zipkin for distributed tracing and logging.
  • โœ… Using Service Discovery with Eureka server for local development and Kubernetes service discovery for production environment.
  • โœ… Using API Gateway with Spring Cloud Gateway for local development and Kubernetes load balancer for production environment.
  • โœ… Using AWS SES service for sending emails.

Roadmap

  • ๐Ÿšง Add Api Key Management with Keycloak for security and authentication.
  • ๐Ÿšง Using Helm or Kustomize for deploying the application on Kubernetes cluster.
  • ๐Ÿšง Add Resilience4j for circuit breaker and fallback.
  • ๐Ÿšง Add log aggregation with ELK stack.
  • ๐Ÿšง Create frontend application with React / Angular.
  • ๐Ÿšง Add Istio for service mesh.

Technologies - Libraries

  • โœ”๏ธ eureka-server-discovery - Eureka is a service registry for resilient spring microservices.
  • โœ”๏ธ spring-cloud-gateway - Spring Cloud Gateway is a non-blocking, reactive, based on Spring 5, web server gateway.
  • โœ”๏ธ spring-cloud-loadbalancer - Spring Cloud LoadBalancer is a library that provides a common abstraction over client-side load balancing.
  • โœ”๏ธ sleuth-zipkin - Distributed tracing with Zipkin and Spring Cloud Sleuth.
  • โœ”๏ธ open-feign - Declarative REST Client for spring.
  • โœ”๏ธ spring-boot-starter-data-jpa - Spring Data JPA is a layer on top of the JPA API.
  • โœ”๏ธ lombok - Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
  • โœ”๏ธ amqp-starter - Spring AMQP provides an abstraction layer for sending and receiving messages with a message broker.
  • โœ”๏ธ rabbitmq - RabbitMQ is an open source message broker software that implements the Advanced Message Queuing Protocol (AMQP).
  • โœ”๏ธ mapstruct - MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach.
  • โœ”๏ธ Junit5 - For unit testing and integration testing.
  • โœ”๏ธ Mockito - For mocking objects in unit tests.
  • โœ”๏ธ jib-plugin - Container image builder that facilitates building container images for your Java applications.
  • โœ”๏ธ docker-compose - Compose is a tool for defining and running multi-container Docker applications.
  • โœ”๏ธ kubernetes - Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
  • โœ”๏ธ prometheus - Prometheus is an open-source systems monitoring and alerting toolkit.
  • โœ”๏ธ grafana - Grafana is an open source, feature rich metrics dashboard and graph editor for Graphite, Elasticsearch, OpenTSDB, Prometheus and InfluxDB.
  • โœ”๏ธ AWS SES - Amazon Simple Email Service (Amazon SES) is a cloud-based email sending service.
  • โœ”๏ธ AWS EKS - Amazon Elastic Kubernetes Service (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to install, operate, and maintain your own Kubernetes control plane.

System Architecture

License

This project is made available under the MIT license. See LICENSE for details.