
Sistem microservices tidak hanya terdiri atas bahasa pemrograman dan database, melainkan sekumpulan toolset yang menangani komunikasi, infrastruktur, hingga pemantauan.
Ini adalah konfigurasi dan tech stack standar yang biasa digunakan pada infrastruktur microservices:
Pemilihan Bahasa Pemrograman (Service Level)
Keunggulan microservices adalah sifatnya yang polyglot (bebas menggunakan bahasa berbeda di setiap layanan sesuai kebutuhan):
- Go (Golang): Sangat populer untuk high-performance services dan lightweight API karena ukurannya kecil, waktu startup cepat, serta konsumsi memori yang minim.
- Java / Kotlin (via framework Spring Boot, Micronaut, Quarkus): Standar enterprise yang kokoh. Spring Boot memiliki ekosistem sangat matang untuk service discovery, config management, dan security.
- Node.js (Express, NestJS): Ideal untuk layanan I/O intensive, real-time processing, atau layanan yang butuh respon cepat berbasis event loop.
- Python (FastAPI, Flask): Pilihan utama untuk layanan yang melibatkan machine learning, data science, atau data processing.
Komunikasi & Messaging (Inter-service Communication) antar servis
Layanan mikro harus saling berkomunikasi dengan aman dan cepat:
- Synchronous (REST & gRPC):
- HTTP/REST (JSON): Standar untuk komunikasi dari luar (Klien ke API Gateway).
- gRPC (Protocol Buffers): Pilihan utama untuk komunikasi internal service-to-service. Menggunakan HTTP/2, lebih cepat, dan menggunakan format biner hemat bandwidth.
- Asynchronous (Event-Driven / Message Broker):
- Apache Kafka: Standar industri untuk high-throughput event streaming (misal: analisis log, pemrosesan transaksi berkecepatan tinggi).
- RabbitMQ: Pilihan fleksibel untuk task queues dan message routing yang kompleks antar-layanan.
Database & Penyimpanan Data
Mengikuti prinsip Database per Service:
- Relational DB (PostgreSQL, MySQL): Digunakan pada layanan yang membutuhkan kepastian transaksi ACID (PaymentService, OrderService).
- NoSQL DB (MongoDB, Cassandra, DynamoDB): Digunakan untuk data yang tidak terstruktur atau skema yang sering berubah (ProductCatalogService, UserActivity).
- In-Memory Cache (Redis): Menyimpan session, rate limiting, dan data yang sering diakses agar tidak membebani database utama.
API Gateway & Service Mesh
Mengelola lalu lintas masuk dari pengguna dan lalu lintas internal antar-layanan:
- API Gateway:
- Kong / Apigee: Mengelola otentikasi (JWT/OAuth2), rate limiting, SSL termination, dan routing.
- Spring Cloud Gateway: Sering digunakan di ekosistem Java.
- Service Mesh:
- Istio / Linkerd: Mengatur komunikasi internal, mTLS (enkripsi antar-layanan), circuit breaking, dan traffic splitting secara otomatis tanpa mengubah kode aplikasi.
Containerization & Orchestration (Infrastruktur)
Kontainer tempat microservices dijalankan:
- Docker: Membungkus setiap layanan menjadi container terisolasi.
- Kubernetes (K8s): Mengatur deployment, auto-scaling (HPA), load balancing, dan self-healing untuk puluhan hingga ribuan container.
- Managed K8s: Google Kubernetes Engine (GKE), Amazon EKS, atau Azure AKS untuk menghemat beban operasional infrastruktur.
Observability & Pemantauan (Monitoring & Logging)
Karena sistem terdistribusi, pemantauan menjadi sangat krusial:
- Centralized Logging: ELK Stack (Elasticsearch, Logstash, Kibana) atau Grafana Loki untuk mengumpulkan log dari semua layanan ke satu tempat.
- Metrics & Dashboard: Prometheus untuk mengumpulkan metrik sistem (CPU, RAM, latency) dan Grafana untuk visualisasi dashboard.
Distributed Tracing: Jaeger atau Zipkin (memanfaatkan Correlation ID) untuk melacak satu request pengguna yang mengalir melewati beberapa microservices.