diff --git a/README.md b/README.md index 62907886..99739c73 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,16 @@ [![Go Version](https://img.shields.io/badge/go-%3E%3D1.25.5-blue.svg)](https://golang.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -This application is primarily intended for exploring technical concepts. My goal is to experiment with different technologies, software architecture designs, and all the essential components involved in building distributed systems in Golang. +This application is primarily intended for exploring technical concepts. My goal is to experiment with different technologies, software architecture designs, and all the essential components involved in building distributed systems in Golang, simulating. ## Features :sparkles: -- `Event-driven architecture` using `Kafka` for event streaming, `Redis PubSub` for real-time message broadcasting, and `Asynq` for distributed task scheduling (order and cart services) +- Hybrid communication model utilizing `gRPC` for high-performance, synchronous inter-service calls alongside an `Event-Driven Architecture (EDA)` with `Apache Kafka` for persistent event streaming, `Redis Pub/Sub` for real-time broadcasting, and `Asynq` for distributed task scheduling - `Clean Architecture` (entity, repository, service, handler) with `Domain-Driven Design (DDD)` principles across all services - Each microservice has its own dedicated `PostgreSQL` database instance - 3-node `Kafka Cluster` running on `KRaft mode` (ZooKeeper-free) - 6-node `Redis Cluster` (3 masters + 3 replicas) -- Central instrumentation using `OpenTelemetry` combined with LGTM stack (`Loki, Grafana, Tempo, Prometheus`) and `Alloy` as telemetry collector +- Unified observability pipeline using `OpenTelemetry` combined with LGTM stack (`Loki, Grafana, Tempo, Prometheus`) and `Alloy` as telemetry collector - Two local development options: - `Docker Compose` setup for rapid development (infrastructure + 7 core services) - `Kubernetes Cluster` with `Tilt + (Kind or MicroK8s)` for hot reload in a production-like environment with all 11 services @@ -21,8 +21,8 @@ This application is primarily intended for exploring technical concepts. My goal - Infrastructure as Code with `Terraform` for GKE cluster provisioning on GCP - `Kubernetes` for robust, scalable container orchestration in production environments - Secure authentication implemented via `JWT` with `RS256` asymmetric algorithm and refresh token rotation -- Unified REST `API Gateway` and `GraphQL Federation` for type-safe client-server communication -- Internal communication via synchronous `gRPC calls` for microservices to interact with each other. +- Implemented `GraphQL Federation` and `REST Gateways` to provide a type-safe, unified interface for complex microservices +- Implemented API-first development standards using `OpenAPI 3` to automate documentation and client generation - Database Management with schema migrations handled by `golang-migrate` - Validation using `go-playground/validator` for input sanitization - Order creation is implemented using two saga orchestration options: @@ -663,7 +663,7 @@ terraform/ **Key Features**: -- 5-tier node pool architecture (stateful, stateless, monitoring, control-plane, gateway) +- 5-tier node pool architecture (stateful, stateless, monitoring, infra, gateway) - Spot VMs for stateless workloads (~60% cost savings) - Automated TLS with cert-manager and Let's Encrypt - External Secrets Operator for GCP Secret Manager integration diff --git a/deployments/helm/operators/README.md b/deployments/helm/operators/README.md index d0b99615..e55a5811 100644 --- a/deployments/helm/operators/README.md +++ b/deployments/helm/operators/README.md @@ -4,7 +4,7 @@ Operators extend Kubernetes functionality by managing custom resources. ## Operators vs Custom Resources -### Operator (Control Plane) - The Manager +### Operator (Infra Pool) - The Manager The operator is **controller software** that watches and manages resources. @@ -40,20 +40,20 @@ operators/ ``` ┌─────────────────────────────────────┐ -│ Operator (Control Plane) │ -│ Installed once via Helm │ -│ Location: operators/*/values.yaml │ +│ Operator │ +│ Installed once via Helm │ +│ Location: operators/*/values.yaml │ └─────────────────────────────────────┘ ↓ Watches & Manages ↓ ┌─────────────────────────────────────┐ -│ Custom Resources (Data Plane) │ -│ Deployed via Kustomize │ -│ Location: {postgres,kafka,redis}/ │ +│ Custom Resources (Data Plane) │ +│ Deployed via Kustomize │ +│ Location: {postgres,kafka,redis}/ │ └─────────────────────────────────────┘ ↓ Creates & Manages ↓ ┌─────────────────────────────────────┐ -│ Actual Workloads │ -│ PostgreSQL pods, Kafka brokers, etc│ +│ Actual Workloads │ +│ PostgreSQL pods, Kafka brokers, etc │ └─────────────────────────────────────┘ ``` diff --git a/deployments/k8s/README.md b/deployments/k8s/README.md index 008641a5..3cee707a 100644 --- a/deployments/k8s/README.md +++ b/deployments/k8s/README.md @@ -1,6 +1,6 @@ # Kubernetes Deployments - GitOps -This directory contains Kubernetes manifests for deploying the go-micro-commerce platform using **ArgoCD GitOps** with an industry-standard hybrid pattern. +This directory contains Kubernetes manifests for deploying the go-micro-commerce platform using **ArgoCD GitOps**. ## Architecture Overview @@ -121,7 +121,7 @@ deployments/k8s/ Contains **ApplicationSet** manifests that define auto-discovery patterns: - **Purpose**: Meta-layer that generates ArgoCD Applications -- **Pattern**: Industry-standard GitOps control plane +- **Pattern**: Industry-standard GitOps structure - **Managed by**: Terraform bootstrap ApplicationSet ### `/infrastructure/` - Platform Services diff --git a/scripts/k8s-kind-setup.sh b/scripts/k8s-kind-setup.sh index a81e48aa..a7ad1be2 100755 --- a/scripts/k8s-kind-setup.sh +++ b/scripts/k8s-kind-setup.sh @@ -65,7 +65,7 @@ cat </dev/null | grep -c " Ready " || echo "0")