Bayangkan Anda sedang makan di sebuah restoran yang cukup besar dan ramai. Ketika Anda memesan makanan, ternyata prosesnya tidak dilakukan oleh satu orang saja. Pesanan Anda pertama kali diterima oleh kasir, lalu dikirim ke dapur untuk dimasak. Jika Anda memesan minuman, ada bagian khusus yang menanganinya. Setelah semuanya siap, pelayan akan mengantarkan pesanan tersebut ke meja Anda.

Menariknya, semua proses ini berjalan secara terpisah, tetapi tetap saling terhubung. Kasir tidak perlu menunggu dapur selesai memasak untuk menerima pesanan berikutnya. Dapur juga bisa fokus memasak tanpa harus memikirkan pembayaran. Setiap bagian memiliki tugasnya masing-masing, bekerja secara mandiri, namun tetap berkolaborasi agar pelayanan tetap cepat dan efisien.

Nah, konsep inilah yang sebenarnya digunakan dalam dunia sistem komputer modern melalui Microservices Architecture. Sebuah aplikasi tidak lagi dibangun sebagai satu sistem besar yang mengerjakan semuanya sekaligus, tetapi dipecah menjadi layanan-layanan kecil seperti User Service, Order Service, dan Payment Service. Masing-masing service bekerja seperti bagian di restoran—memiliki peran khusus, berjalan sendiri, dan saling berkomunikasi untuk menghasilkan satu layanan yang utuh.

Dengan pendekatan ini, sistem menjadi lebih fleksibel, mudah dikembangkan, dan mampu menangani banyak pengguna secara bersamaan tanpa saling mengganggu.

1. Pengertian Microservices Architecture

Microservices Architecture adalah pendekatan arsitektur sistem di mana aplikasi dibangun sebagai kumpulan layanan-layanan kecil (services) yang saling terhubung dan bekerja sama melalui jaringan.

Setiap service dalam arsitektur ini memiliki karakteristik sebagai berikut:

  • Berdiri sendiri (independent) → dapat dijalankan dan dikembangkan tanpa bergantung pada service lain
  • Memiliki fungsi spesifik (single responsibility) → setiap service hanya menangani satu jenis proses
  • Berkomunikasi melalui jaringan → menggunakan API, event, atau message queue

Pendekatan ini bertujuan untuk meningkatkan fleksibilitas, skalabilitas, dan kemudahan pengembangan sistem.

Contoh Sederhana

Sebagai ilustrasi, sebuah sistem e-commerce dapat dipecah menjadi beberapa service berikut:

  1. User Service → menangani autentikasi dan data pengguna
  2. Order Service → mengelola proses pemesanan
  3. Payment Service → memproses pembayaran
  4. Notification Service → mengirim notifikasi kepada pengguna

Setiap service memiliki tugas masing-masing dan dapat berjalan secara terpisah, namun tetap saling berkomunikasi untuk membentuk satu sistem yang utuh.

Inti Konsep

Satu aplikasi besar → dipecah menjadi banyak service kecil yang saling terhubung.

Dengan demikian, microservices memungkinkan sistem menjadi lebih modular, mudah dikembangkan, dan siap untuk kebutuhan skala besar.

2. Perbandingan dengan Monolithic Architecture

Monolithic

Monolithic Architecture adalah pendekatan di mana seluruh fitur aplikasi dibuat dalam satu sistem besar (satu codebase dan satu deploy).

Ciri utama:

  • Semua modul jadi satu (login, order, payment, dll)
  • Satu database
  • Deploy harus sekaligus

Contoh sederhana:

Aplikasi Toko Online
→ Login
→ Produk
→ Order
→ Pembayaran
(Semua dalam 1 aplikasi)

Kelebihan:

  • Mudah dibuat untuk pemula
  • Struktur sederhana
  • Debugging lebih mudah

Kekurangan:

  • Sulit dikembangkan jika sudah besar
  • Sulit scaling (harus seluruh aplikasi)
  • Jika error → bisa ganggu semua fitur

Microservices

Microservices Architecture adalah pendekatan di mana aplikasi dibagi menjadi beberapa layanan kecil (services) yang masing-masing memiliki fungsi tertentu dan saling berkomunikasi melalui jaringan (API, queue, atau event).

Ciri utama:

  • Setiap fitur dipisah menjadi service
  • Service berjalan di server/port berbeda
  • Komunikasi melalui HTTP, API, atau event
  • Bisa dikembangkan dan di-deploy sendiri

Contoh sederhana:

Sistem Toko Online
→ User Service (login)
→ Product Service (produk)
→ Order Service (order)
→ Payment Service (pembayaran)

Semua berjalan terpisah, tidak dalam satu aplikasi besar.

Kelebihan:

  • Mudah dikembangkan (modular)
  • Bisa scaling per service
  • Lebih fleksibel teknologi
  • Error tidak menyebar ke seluruh sistem

Kekurangan:

  • Lebih kompleks
  • Perlu manajemen antar service
  • Debugging lebih sulit
  • Butuh jaringan yang stabil

3. Karakteristik Microservices

a. Single Responsibility

Single Responsibility adalah prinsip dalam arsitektur (terutama pada microservices) di mana setiap service hanya memiliki satu tugas utama dan fokus pada satu fungsi saja.

Artinya, satu service tidak boleh mengerjakan banyak hal sekaligus agar:

  • Lebih mudah dikembangkan
  • Lebih mudah diperbaiki
  • Tidak saling mengganggu antar sistem

Contoh:

  • Order Service → hanya mengelola data dan proses pesanan
  • Payment Service → hanya menangani proses pembayaran
Jadi intinya: satu service = satu tanggung jawab (fokus)

b. Loose Coupling

Loose Coupling adalah prinsip di mana antar service tidak saling bergantung secara kuat, sehingga masing-masing bisa berjalan sendiri tanpa harus menunggu atau bergantung penuh pada service lain.

Artinya, jika satu service mengalami masalah, service lain tetap bisa berfungsi.

Contoh:

  • Payment Service mati → Order Service tetap bisa menerima dan menyimpan pesanan
  • Pembayaran bisa diproses nanti saat service kembali normal
Jadi intinya: service tetap mandiri meskipun service lain bermasalah

c. Independently Deployable

Independently Deployable adalah prinsip di mana setiap service dapat di-deploy (di-update/di-install) secara terpisah tanpa harus mengganggu service lain.

Artinya, perubahan pada satu service tidak perlu membuat seluruh sistem ikut di-deploy ulang.

Contoh:

  • Update fitur di Payment Service → cukup deploy service tersebut saja
  • Order Service tetap berjalan normal tanpa perlu diubah
Jadi intinya: setiap service bisa dikembangkan dan dirilis secara mandiri.

d. Decentralized Data

Decentralized Data adalah prinsip di mana setiap service memiliki dan mengelola database-nya sendiri, tidak berbagi database langsung dengan service lain.

Artinya, data tidak disatukan dalam satu database besar, tetapi dipisah sesuai fungsi masing-masing service.

Contoh:

  • Order Service → punya database khusus data pesanan
  • Payment Service → punya database khusus data transaksi pembayaran

Jika butuh data dari service lain, dilakukan melalui API, bukan langsung akses database.

Jadi intinya: setiap service mengelola datanya sendiri secara mandiri

e. Scalable

Scalable adalah prinsip di mana setiap service dapat ditingkatkan kapasitasnya (scale) sesuai kebutuhan, tanpa harus menaikkan seluruh sistem.

Artinya, hanya service yang sibuk saja yang ditambah resource (server, RAM, instance).

Contoh:

  • Saat banyak transaksi → Payment Service di-scale up (ditambah server)
  • Order Service tetap seperti biasa jika tidak terlalu sibuk
Jadi intinya: scale hanya bagian yang dibutuhkan, lebih efisien dan hemat resource

4. Komponen Utama Microservices

Contoh pada sistem pembayaran terdapat:

1. Frontend (Client)

Frontend (Client) adalah bagian sistem yang berinteraksi langsung dengan pengguna (user), biasanya berupa tampilan website atau aplikasi.

Berfungsi:

  • Input data dari user (form, klik tombol, dll)
  • Mengirim request ke backend (API/server)
  • Menampilkan hasil dari server ke user

Contoh:

  • Form checkout (isi alamat, pilih produk, bayar)
  • Halaman login, dashboard, dll
Jadi intinya: frontend adalah jembatan antara user dan sistem backend

2. Order Service

Order Service adalah service yang bertanggung jawab mengelola seluruh proses pesanan (order) dari user.

Tugas:

  • Validasi input (cek data pesanan valid atau tidak)
  • Menyimpan data order ke database
  • Memasukkan order ke queue untuk diproses lebih lanjut
Jadi intinya: Order Service mengatur alur awal pesanan dari masuk hingga siap diproses

3. Database Queue

Database Queue adalah komponen yang digunakan untuk menyimpan antrian (queue) dari proses yang akan dijalankan secara bertahap.

Berfungsi:

  • Menyimpan antrian proses (misalnya order yang belum diproses)
  • Mengatur urutan eksekusi tugas (first in, first out / FIFO)
  • Menjaga sistem tetap stabil saat terjadi lonjakan request

Contoh:

  • Data order masuk ke queue → diproses satu per satu oleh worker
Jadi intinya: Database Queue menjadi “penampung antrean” agar proses berjalan rapi dan tidak membebani sistem

4. Worker

Worker adalah komponen yang bertugas menjalankan proses di belakang layar (background process) berdasarkan antrian dari queue.

Tugas:

  • Mengambil data dari queue
  • Memproses data sesuai kebutuhan (misalnya kirim ke service lain, hitung, update status)

Contoh:

  • Worker mengambil data order dari queue → lalu mengirim ke Payment Service untuk diproses
Jadi intinya: Worker adalah “eksekutor” yang menjalankan tugas dari antrian secara otomatis

5. Payment Service

Payment Service adalah service yang bertanggung jawab menangani seluruh proses pembayaran dalam sistem.

Tugas:

  • Memproses pembayaran (validasi, transaksi, konfirmasi)
  • Mengupdate status order (misalnya: pending → paid)

Contoh:

  • Data order dikirim dari worker → Payment Service memproses pembayaran → status order diperbarui
Jadi intinya: Payment Service memastikan transaksi berjalan dan status pesanan diperbarui dengan benar

6. Event / Notification

Event / Notification adalah komponen yang bertugas mengirimkan informasi atau pemberitahuan ke frontend (user) setelah suatu proses selesai.

Berfungsi:

  • Mengirim notifikasi ke frontend
  • Memberi update status secara real-time (atau mendekati real-time)
  • Menginformasikan hasil proses (berhasil/gagal)

Contoh:

  • Setelah pembayaran berhasil → user mendapat notifikasi “Pembayaran berhasil”
  • Status order di frontend otomatis berubah menjadi paid
Jadi intinya: Event/Notification adalah penghubung hasil proses backend ke user secara langsung

5. Pola Komunikasi dalam Microservices

1. Synchronous Communication

Synchronous Communication adalah metode komunikasi di mana request dikirim dan harus menunggu respon secara langsung (real-time) sebelum melanjutkan proses berikutnya.

Contoh:

  • Frontend → Order Service (menggunakan HTTP request)

Karakteristik:

  • Cepat untuk proses sederhana
  • Client harus menunggu respon (blocking)
  • Cocok untuk validasi atau input data langsung
Jadi intinya: request dikirim → tunggu respon → baru lanjut

2. Asynchronous Communication

Asynchronous Communication adalah metode komunikasi di mana proses tidak harus menunggu respon langsung, melainkan dikirim ke sistem antrian (queue) untuk diproses di belakang layar.

Contoh:

  • Order → Queue → Worker

Karakteristik:

  • Tidak blocking (tidak perlu menunggu)
  • Diproses di background oleh worker
  • Lebih stabil saat trafik tinggi
Jadi intinya: request dikirim → masuk antrian → diproses nanti tanpa mengganggu user

3. Event-Driven Communication

Event-Driven Communication adalah metode komunikasi di mana service saling berinteraksi berdasarkan kejadian (event) yang terjadi dalam sistem.

Contoh:

  • Payment selesai → kirim event → frontend menerima update

Karakteristik:

  • Berdasarkan event (kejadian tertentu)
  • Tidak harus komunikasi langsung antar service
  • Cocok untuk notifikasi dan update real-time
Jadi intinya: ketika suatu kejadian terjadi, sistem langsung memberi tahu bagian lain yang membutuhkan

6. Alur Sistem Microservices

7. Contoh Implementasi (Sesuai Praktikum Anda)

Contoh Synchronous

fetch('http://localhost:8001/order.php', {
    method: 'POST',
    body: formData
});

Frontend mengirim data ke Order Service

Contoh Asynchronous (Queue)

INSERT INTO payment_queue (order_id, status)
VALUES (1, 'waiting');

Order dimasukkan ke antrean

Contoh Worker

while (true) {
    ambil queue;
    kirim ke payment service;
}

Contoh Event (SSE)

echo "data: Pembayaran berhasil\n\n";

Notifikasi muncul di browser

8. Prinsip Desain Microservices

a. API-Based

Service saling berkomunikasi menggunakan API (Application Programming Interface), biasanya melalui HTTP/REST atau message API.

Intinya: interaksi antar service lewat “jalur resmi” (API), bukan langsung akses internal.

b. Service Isolation

Setiap service terpisah dan berdiri sendiri, baik dari sisi kode, proses, maupun data.

Intinya: service tidak saling mengganggu dan bisa berjalan mandiri.

c. Fault Tolerance

Sistem dirancang agar tetap berjalan meskipun ada service yang gagal.

Contoh: Payment Service error → Order tetap tersimpan

Intinya: sistem tahan terhadap kegagalan (tidak langsung down semua).

d. Observability

Sistem harus bisa dipantau dan dianalisis dengan mudah untuk mengetahui kondisi dan masalah.

Meliputi:

  • Log → catatan aktivitas sistem
  • Monitoring → pemantauan performa (CPU, request, dll)
  • Tracing → melacak alur request antar service
Intinya: developer bisa melihat, memahami, dan memperbaiki sistem dengan cepat

Keuntungan Microservices

  • Skalabilitas Tinggi → Service bisa di-scale sesuai kebutuhan
  • Fleksibel Teknologi → Tiap service bisa pakai teknologi berbeda
  • Deployment Cepat → Update bisa per service tanpa ganggu sistem lain
  • Fault Isolation → Error tidak menyebar ke seluruh sistem

Kekurangan Microservices

  • Kompleksitas Tinggi → Banyak service, lebih sulit dikelola
  • Debugging Sulit → Error tersebar di banyak service
  • Latency → Komunikasi via jaringan lebih lambat
  • Konsistensi Data → Sulit sinkron antar database

Tantangan Microservices

  • Distributed Data → Data tersebar, perlu sinkronisasi
  • Network Failure → Risiko gagal komunikasi antar service
  • Service Dependency → Ketergantungan bisa jadi bottleneck
  • Security → Banyak API, risiko keamanan lebih besar

Studi Kasus Nyata (Real World)

a. E-Commerce

Alur: User → Order → Payment → Shipping → Notification

User melakukan pemesanan → diproses oleh Order Service → dibayar melalui Payment Service → dikirim oleh Shipping Service → user menerima notifikasi

Intinya: setiap proses dipisah menjadi service yang saling terhubung

b. Ride-Hailing (Transportasi Online)

Alur: User → Booking → Driver → Payment → Notification

User memesan perjalanan → sistem mencari driver → perjalanan berlangsung → pembayaran diproses → notifikasi dikirim

Intinya: layanan real-time dengan banyak service yang bekerja bersama

c. Streaming (Video/Music)

Alur: User → Auth → Content → Recommendation → Streaming

User login → akses konten → sistem memberi rekomendasi → konten diputar (streaming)

Intinya: pengalaman personalisasi dengan service yang berbeda-beda
Kesimpulan:
Semua sistem besar menggunakan microservices karena membagi proses menjadi bagian kecil agar lebih fleksibel, scalable, dan mudah dikembangkan