HOTLINE

(0275) 2974 127

CHAT WA 24/7
0859-60000-390 (Sales)
0852-8969-9009 (Support)
cloud

Mengenal Service Discovery: Teknologi yang Membuat Microservices Lebih Fleksibel

Dalam aplikasi modern, terutama yang menggunakan microservices, sebuah aplikasi biasanya tidak hanya terdiri dari satu server atau satu komponen. Sebaliknya, aplikasi dapat dibangun dari banyak service yang saling berkomunikasi untuk menjalankan fungsi tertentu.

Masalahnya, lokasi setiap service tidak selalu tetap. Sebuah service dapat berpindah server, memiliki beberapa instance, menggunakan alamat IP yang berbeda, atau mengalami perubahan jumlah instance karena proses scaling.

Service Discovery membantu aplikasi menemukan lokasi service lain secara otomatis tanpa harus menyimpan alamat IP dan port setiap service secara manual. Dengan mekanisme ini, komunikasi antarservice dapat menjadi lebih fleksibel, terutama pada lingkungan cloud, container, dan microservices.

Lalu, apa itu Service Discovery, bagaimana cara kerjanya, dan mengapa teknologi ini penting dalam arsitektur aplikasi modern?

Apa Itu Service Discovery?

Service Discovery adalah mekanisme yang memungkinkan aplikasi menemukan lokasi service lain secara otomatis dalam sebuah jaringan. Informasi yang ditemukan dapat berupa alamat IP, hostname, port, nama service, dan status instance.

Pada aplikasi sederhana, alamat service biasanya ditentukan secara langsung melalui konfigurasi. Namun, cara ini menjadi kurang praktis pada arsitektur microservices karena satu service dapat memiliki banyak instance dengan alamat yang berbeda dan dapat berubah sewaktu-waktu.

Service Discovery membantu mengatasi masalah tersebut dengan menyediakan informasi mengenai endpoint yang tersedia. Dengan begitu, service dapat saling berkomunikasi tanpa harus bergantung pada alamat IP tertentu dan tanpa melakukan konfigurasi secara manual setiap kali terjadi perubahan infrastruktur.

Mengapa Service Discovery Dibutuhkan?

Dalam sistem tradisional, aplikasi biasanya berkomunikasi dengan server yang memiliki alamat relatif tetap.

Misalnya: Aplikasi → 192.168.1.10:8080

Masalah mulai muncul ketika aplikasi berkembang dan menggunakan banyak service. Contohnya:

Frontend
   ↓
API Service
   ↓
User Service
   ↓
Payment Service
   ↓
Notification Service

Masing-masing service dapat berjalan pada server atau container yang berbeda. Jika setiap service harus mengetahui alamat IP service lainnya secara manual, pengelolaan sistem akan menjadi semakin sulit.

Service Discovery memberikan pendekatan yang lebih dinamis. Alih-alih aplikasi mengetahui alamat IP secara langsung, aplikasi cukup mengetahui nama service: payment-service
, Kemudian Service Discovery membantu menemukan endpoint yang tersedia untuk service tersebut.

Bagaimana Cara Kerja Service Discovery?

Secara sederhana, Service Discovery bekerja dengan menyimpan informasi mengenai service yang tersedia dan lokasi instance-nya. Alur dasarnya dapat digambarkan seperti berikut:

Service A
   │
   │ mencari "Service B"
   ▼
Service Discovery
   │
   │ memberikan endpoint
   ▼
Service B

Prosesnya biasanya melibatkan beberapa tahap.

1. Service Mendaftarkan Diri

Ketika sebuah service dijalankan, service tersebut mendaftarkan informasi dirinya ke sistem Service Discovery. Misalnya:

Nama: payment-service
IP: 10.0.0.15
Port: 8080
Status: healthy

Informasi ini kemudian disimpan dalam registry.

2. Service Discovery Menyimpan Informasi

Service Discovery menyimpan daftar service beserta endpoint yang tersedia. Contohnya:

user-service → 10.0.0.10:8080
payment-service → 10.0.0.15:8080
notification-service → 10.0.0.20:8080

Jika sebuah service memiliki beberapa instance, semuanya dapat dicatat.

payment-service
├── 10.0.0.15:8080
├── 10.0.0.16:8080
└── 10.0.0.17:8080

3. Service Lain Mencari Service yang Dibutuhkan

Ketika order-service ingin berkomunikasi dengan payment-service, order-service tidak perlu mengetahui IP address setiap instance. Service tersebut cukup mencari: payment-service, Service Discovery kemudian memberikan informasi mengenai instance yang tersedia.

4. Request Dikirim ke Instance yang Tersedia

Setelah mendapatkan endpoint, request dapat dikirim ke instance yang sesuai. Jika terdapat beberapa instance, sistem dapat memilih salah satu berdasarkan mekanisme tertentu, misalnya load balancing.

5. Instance yang Tidak Sehat Dapat Dikeluarkan

Service Discovery biasanya dapat dikombinasikan dengan mekanisme health check. Jika sebuah instance tidak lagi sehat atau tidak dapat diakses, endpoint tersebut dapat ditandai tidak tersedia sehingga request berikutnya tidak diarahkan ke instance tersebut.

Apa Itu Service Registry?

Service Registry adalah tempat penyimpanan informasi mengenai service dan endpoint yang tersedia dalam sebuah sistem. Service Registry menjadi salah satu komponen penting dalam Service Discovery. Contohnya:

Service Endpoint Status
User Service 10.0.0.10:8080 Healthy
Payment Service 10.0.0.11:8080 Healthy
Payment Service 10.0.0.12:8080 Healthy
Notification Service 10.0.0.13:8080 Unhealthy

Registry memungkinkan sistem mengetahui service apa saja yang tersedia dan ke mana request dapat diarahkan. Informasi tersebut dapat berubah secara dinamis ketika instance ditambahkan, dihapus, atau mengalami gangguan.

Apa Itu Service Registration?

Service Registration adalah proses ketika sebuah service mendaftarkan dirinya ke Service Registry. Misalnya ketika container baru menjalankan payment-service, service tersebut dapat melakukan registrasi:

Nama Service: payment-service

Endpoint: 10.0.0.15:8080

Setelah terdaftar, service lain dapat menemukan endpoint tersebut melalui Service Discovery. Registrasi dapat dilakukan secara otomatis ketika service mulai berjalan.

Apa Itu Service Deregistration?

Selain mendaftarkan service, sistem juga perlu mengetahui ketika sebuah instance sudah tidak tersedia. Proses menghapus atau menandai instance dari registry disebut service deregistration. Misalnya:

payment-service
├── 10.0.0.15:8080
├── 10.0.0.16:8080
└── 10.0.0.17:8080

Kemudian instance 10.0.0.16 dihentikan. Registry perlu memperbarui informasi menjadi:

payment-service
├── 10.0.0.15:8080
└── 10.0.0.17:8080

Dengan demikian, request tidak lagi diarahkan ke instance yang sudah tidak tersedia.

Apa Itu Health Check dalam Service Discovery?

Health check adalah mekanisme untuk memeriksa apakah sebuah service atau instance masih dapat menerima request dengan baik. Health check sangat penting karena service yang masih tercatat di registry belum tentu benar-benar dapat digunakan. Contohnya:

payment-service
10.0.0.15:8080 → Healthy
10.0.0.16:8080 → Unhealthy
10.0.0.17:8080 → Healthy

Ketika request datang, sistem dapat menghindari instance yang berstatus Unhealthy. Health check dapat dilakukan melalui beberapa metode, tergantung platform dan arsitektur yang digunakan.

Jenis Service Discovery

Secara umum, Service Discovery sering dibagi menjadi dua pendekatan utama, yaitu client-side discovery dan server-side discovery.

1. Client-Side Service Discovery

Pada client-side discovery, client bertanggung jawab mencari service yang ingin digunakan. Alurnya:

Client
  ↓
Service Registry
  ↓
Mendapatkan endpoint
  ↓
Service

Misalnya order-service ingin mengakses payment-service. order-service terlebih dahulu meminta informasi endpoint kepada Service Registry. Setelah mendapatkan endpoint, order-service mengirimkan request langsung ke instance yang dipilih.

Kelebihan pendekatan ini adalah client memiliki kontrol lebih besar terhadap proses pemilihan instance. Namun, client membutuhkan mekanisme atau library untuk berinteraksi dengan Service Registry dan melakukan pemilihan endpoint.

2. Server-Side Service Discovery

Pada server-side discovery, client tidak perlu mencari endpoint secara langsung. Request dikirim terlebih dahulu ke komponen yang bertanggung jawab menemukan service. Alurnya:

Client
  ↓
Load Balancer / Proxy
  ↓
Service Discovery
  ↓
Service Instance

Komponen seperti load balancer, proxy, atau gateway dapat membantu menentukan instance yang akan menerima request. Pendekatan ini membuat client lebih sederhana karena logika discovery tidak perlu diimplementasikan pada setiap service. Namun, infrastruktur tambahan perlu dikelola untuk menangani proses tersebut.

Perbedaan Client-Side dan Server-Side Discovery

Aspek Client-Side Server-Side
Pencarian service Dilakukan client Dilakukan komponen server/proxy
Client Lebih kompleks Relatif lebih sederhana
Registry Diakses client Dapat diakses proxy atau komponen infrastruktur
Pemilihan instance Client Load balancer/proxy
Fleksibilitas Tinggi Bergantung pada infrastruktur
Pengelolaan Logika discovery berada di aplikasi Lebih banyak ditangani infrastruktur

Tidak ada pendekatan yang selalu paling baik. Pemilihannya bergantung pada arsitektur, platform, kebutuhan operasional, dan teknologi yang digunakan.

Service Discovery dalam Arsitektur Microservices

Service Discovery sangat erat kaitannya dengan microservices. Dalam arsitektur microservices, aplikasi besar dipecah menjadi beberapa service yang memiliki tanggung jawab berbeda. Contohnya:

                    ┌─ User Service
                    │
API Gateway ─────────┼─ Order Service
                    │
                    ├─ Payment Service
                    │
                    └─ Notification Service

Setiap service dapat berjalan secara independen dan memiliki instance yang berbeda. Misalnya ketika traffic meningkat, order-service dapat diperbanyak:

order-service
├── Instance 1
├── Instance 2
├── Instance 3
└── Instance 4

Service Discovery membantu service lain mengetahui instance mana yang tersedia. Tanpa mekanisme discovery, pengelolaan alamat endpoint dalam lingkungan yang dinamis dapat menjadi lebih sulit.

Service Discovery pada Cloud dan Container

Service Discovery semakin penting ketika aplikasi dijalankan pada lingkungan cloud dan container. Pada lingkungan tersebut, instance dapat dibuat dan dihentikan secara dinamis. Contohnya:

Traffic meningkat
      ↓
Instance baru dibuat
      ↓
Service mendaftarkan endpoint
      ↓
Service Discovery memperbarui registry
      ↓
Request dapat diarahkan ke instance baru

Ketika traffic menurun, beberapa instance dapat dihentikan kembali. Service Discovery membantu mengikuti perubahan tersebut tanpa mengharuskan developer memperbarui alamat IP secara manual.

Service Discovery dan Docker

Dalam lingkungan container, alamat IP container dapat berubah ketika container dibuat ulang. Karena itu, menggunakan alamat IP container secara langsung bukan pendekatan yang ideal untuk komunikasi antarservice dalam sistem yang dinamis.

Service discovery berbasis nama service dapat membuat komunikasi lebih sederhana. Misalnya: order-service → payment-service
dibandingkan: order-service → 172.18.0.5:8080

Dengan menggunakan nama service, aplikasi tidak terlalu bergantung pada alamat IP instance tertentu. Platform container modern juga menyediakan mekanisme discovery atau DNS service yang dapat digunakan sesuai kebutuhan arsitektur.

Service Discovery pada Kubernetes

Kubernetes memiliki mekanisme Service yang memungkinkan workload berkomunikasi menggunakan nama service daripada bergantung pada alamat IP Pod secara langsung. Misalnya terdapat: payment-service

Service lain dapat menggunakan nama tersebut untuk menemukan endpoint yang tersedia. Kubernetes kemudian membantu mengarahkan traffic ke Pod yang sesuai berdasarkan konfigurasi Service. Hal ini membuat komunikasi antarworkload lebih dinamis karena Pod dapat dibuat ulang atau berpindah tanpa membuat aplikasi harus mengetahui alamat IP Pod secara manual.

Dalam konteks Kubernetes, istilah Service Discovery dapat berkaitan dengan DNS internal, Kubernetes Service, endpoint, dan mekanisme jaringan lain yang digunakan untuk menemukan workload.

Service Discovery dan DNS

DNS juga dapat digunakan sebagai bagian dari mekanisme Service Discovery. Daripada aplikasi menyimpan alamat IP secara langsung, aplikasi dapat menggunakan nama host tertentu.

Contohnya: payment-service.example.internal

Nama tersebut kemudian dapat dipetakan ke endpoint yang sesuai. Pendekatan berbasis DNS cukup populer karena banyak aplikasi sudah mendukung resolusi nama host tanpa memerlukan implementasi discovery khusus di dalam kode aplikasi.

Namun, kemampuan dan perilaku discovery tetap bergantung pada bagaimana DNS dan infrastruktur di belakangnya dikonfigurasi.

Service Discovery vs Load Balancing

Service Discovery dan load balancing memiliki fungsi yang berbeda meskipun keduanya sering digunakan bersama. Service Discovery bertugas membantu menemukan service atau instance yang tersedia. Sementara itu, load balancing bertugas mendistribusikan traffic ke beberapa instance yang tersedia. Contohnya:

                Service Discovery
                       ↓
              Menemukan instance
                       ↓
          ┌────────────┼────────────┐
          ↓            ↓            ↓
      Instance 1   Instance 2   Instance 3
          ↑            ↑            ↑
          └──── Load Balancer ──────┘

Dalam implementasi tertentu, komponen yang sama atau platform yang sama dapat menangani sebagian fungsi tersebut. Namun secara konsep, discovery dan load balancing merupakan tanggung jawab yang berbeda.

Service Discovery Load Balancing
Menemukan service Mendistribusikan traffic
Mengetahui endpoint Memilih atau mengarahkan traffic
Memantau keberadaan instance Membagi beban antarinstance
Membantu service saling menemukan Membantu mencegah satu instance menerima seluruh beban

Service Discovery vs API Gateway

Service Discovery juga berbeda dengan API Gateway. API Gateway biasanya menjadi pintu masuk bagi client menuju beberapa backend service. Contohnya:

Client
   ↓
API Gateway
   ├── User Service
   ├── Order Service
   └── Payment Service

Sementara Service Discovery membantu gateway atau service lain menemukan lokasi backend service tersebut. Dengan demikian, API Gateway dan Service Discovery dapat digunakan secara bersamaan.

Manfaat Service Discovery

Service Discovery memberikan beberapa manfaat bagi aplikasi modern.

1. Mengurangi Ketergantungan pada IP Address

Aplikasi tidak perlu menyimpan alamat IP setiap instance secara permanen. Hal ini membuat sistem lebih fleksibel ketika infrastruktur berubah.

2. Mendukung Scaling

Ketika instance baru ditambahkan, endpoint tersebut dapat didaftarkan ke registry sehingga dapat ditemukan oleh service lain. Hal ini sangat berguna pada sistem yang menggunakan horizontal scaling.

3. Mempermudah Arsitektur Microservices

Dalam microservices, jumlah service dapat cukup banyak. Service Discovery membantu masing-masing service menemukan dependency yang dibutuhkan tanpa konfigurasi alamat secara manual.

4. Mendukung Infrastruktur Dinamis

Server, container, dan instance cloud dapat dibuat atau dihentikan sesuai kebutuhan. Service Discovery membantu aplikasi mengikuti perubahan tersebut.

5. Membantu Menangani Instance yang Bermasalah

Dengan health check, instance yang tidak sehat dapat dikeluarkan dari daftar endpoint yang digunakan.

6. Mengurangi Konfigurasi Manual

Developer tidak perlu memperbarui alamat IP setiap kali lokasi service berubah. Hal ini dapat mengurangi pekerjaan operasional dan risiko kesalahan konfigurasi.

7. Mendukung High Availability

Ketika sebuah service memiliki beberapa instance, Service Discovery dapat membantu menyediakan daftar endpoint yang tersedia. Jika satu instance mengalami masalah, sistem dapat menggunakan instance lainnya sesuai mekanisme yang diterapkan.

Apa Kekurangan Service Discovery?

Meskipun memiliki banyak manfaat, Service Discovery juga menambah komponen dan kompleksitas dalam sistem.

1. Menambah Kompleksitas Infrastruktur

Sistem perlu mengelola registry atau mekanisme discovery. Semakin banyak komponen yang digunakan, semakin besar pula kebutuhan monitoring dan maintenance.

2. Registry Menjadi Komponen Penting

Jika mekanisme Service Discovery mengalami masalah, proses menemukan service dapat terganggu. Karena itu, komponen discovery biasanya perlu dirancang dengan tingkat ketersediaan yang baik.

3. Membutuhkan Monitoring

Perubahan status service, health check, registration, dan deregistration perlu dipantau agar masalah dapat diketahui lebih cepat.

4. Masalah Konsistensi Data

Pada sistem terdistribusi, informasi mengenai instance dapat mengalami keterlambatan pembaruan. Karena itu, desain Service Discovery perlu mempertimbangkan bagaimana registry menangani perubahan data dan kegagalan jaringan.

Contoh Sederhana Service Discovery

Bayangkan sebuah aplikasi toko online memiliki tiga service:

User Service
Order Service
Payment Service

Order Service membutuhkan Payment Service.

Tanpa Service Discovery, konfigurasi mungkin seperti:

PAYMENT_SERVICE_HOST=10.0.0.15
PAYMENT_SERVICE_PORT=8080

Jika server payment berpindah ke alamat lain, konfigurasi perlu diperbarui. Dengan Service Discovery, Order Service dapat mencari: payment-service

Registry kemudian memberikan endpoint yang tersedia:

10.0.0.15:8080
10.0.0.16:8080

Jika 10.0.0.15 mengalami gangguan dan statusnya menjadi tidak sehat, sistem dapat menghindari endpoint tersebut. Dengan demikian, komunikasi antarservice menjadi lebih dinamis.

Contoh Alur Service Discovery pada Microservices

Secara keseluruhan, prosesnya dapat digambarkan seperti berikut:

             Service Registry
                    ▲
                    │
             Registration
                    │
              Payment Service
                    │
                    │
Order Service ──────┘
       │
       │ Discovery
       ▼
Service Registry
       │
       │ Endpoint
       ▼
Payment Service Instance

Jika terdapat beberapa instance, registry dapat menyimpan semuanya:

Payment Service
│
├── Instance A → Healthy
├── Instance B → Healthy
└── Instance C → Unhealthy

Instance yang tidak sehat dapat dikeluarkan dari endpoint yang dipilih untuk request.

Teknologi yang Dapat Digunakan untuk Service Discovery

Terdapat berbagai teknologi dan platform yang menyediakan mekanisme Service Discovery atau fitur yang mendukungnya. Beberapa contoh yang umum ditemui dalam ekosistem cloud dan distributed systems antara lain:

  • Consul
  • etcd
  • Apache ZooKeeper
  • Kubernetes Service dan DNS
  • Mekanisme discovery berbasis DNS
  • Service discovery yang disediakan oleh platform cloud tertentu

Masing-masing memiliki pendekatan, fitur, dan lingkungan penggunaan yang berbeda. Pemilihannya sebaiknya disesuaikan dengan arsitektur aplikasi dan infrastruktur yang digunakan.

Kapan Service Discovery Dibutuhkan?

Service Discovery semakin bermanfaat ketika sistem memiliki karakteristik seperti:

  • Menggunakan microservices
  • Memiliki banyak service
  • Menjalankan banyak instance
  • Menggunakan container
  • Menggunakan Kubernetes
  • Berjalan pada cloud
  • Membutuhkan auto scaling
  • Memiliki infrastruktur yang dinamis
  • Membutuhkan high availability

Sebaliknya, website sederhana dengan satu server dan satu aplikasi mungkin belum membutuhkan Service Discovery khusus. Misalnya:

Website
   ↓
1 Server
   ↓
1 Application

Dalam kondisi seperti itu, konfigurasi endpoint sederhana biasanya sudah cukup.

Praktik yang Baik dalam Menggunakan Service Discovery

Agar Service Discovery dapat berjalan dengan baik, ada beberapa hal yang perlu diperhatikan.

1. Gunakan Nama Service

Sebisa mungkin aplikasi menggunakan nama service daripada alamat IP instance secara langsung.

2. Terapkan Health Check

Pastikan endpoint yang tidak sehat tidak terus digunakan untuk menerima traffic.

3. Siapkan Redundansi

Service Registry sebaiknya tidak menjadi single point of failure.

4. Pantau Perubahan Instance

Monitoring diperlukan untuk mengetahui service yang sering gagal melakukan registration atau mengalami perubahan status.

5. Perhatikan TTL dan Deregistration

Jika menggunakan mekanisme lease atau TTL, pastikan service melakukan pembaruan status sesuai kebutuhan.

6. Jangan Mengandalkan Discovery untuk Semua Hal

Service Discovery membantu menemukan service, tetapi tidak menggantikan mekanisme keamanan, autentikasi, authorization, observability, maupun load balancing.

Kesimpulan

Service Discovery adalah mekanisme yang memungkinkan service dalam sebuah sistem menemukan lokasi service lain secara otomatis tanpa harus mengetahui alamat IP dan port setiap instance secara manual.

Teknologi ini sangat berguna dalam arsitektur microservices, cloud, container, dan sistem terdistribusi yang memiliki infrastruktur dinamis. Ketika sebuah service memiliki banyak instance, Service Discovery dapat membantu mengetahui endpoint yang tersedia dan menghindari instance yang tidak sehat melalui mekanisme seperti health check.

Service Discovery dapat diterapkan menggunakan pendekatan client-side maupun server-side discovery. Dalam implementasinya, teknologi seperti DNS, Kubernetes Service, Consul, etcd, dan berbagai platform lainnya dapat digunakan sesuai kebutuhan.

Pada sistem sederhana, Service Discovery mungkin belum diperlukan. Namun, ketika aplikasi berkembang menjadi lebih kompleks, memiliki banyak service, menggunakan auto scaling, atau berjalan pada lingkungan cloud dan container, mekanisme ini dapat membantu membuat komunikasi antarservice menjadi lebih fleksibel, dinamis, dan mudah dikelola.

Untuk mendapatkan informasi lainnya mengenai teknologi, cloud computing, hosting, website, dan perkembangan digital, Blog Hosteko dapat menjadi sumber referensi yang informatif. Untuk kebutuhan domain dan hosting, Hosteko Hosting Indonesia juga menyediakan layanan yang dapat mendukung kebutuhan website dan infrastruktur digital.

5/5 - (1 vote)
Fitri Ana

Recent Posts

Apa Itu Shift-Left Security? Pengertian dan Penerapannya

Keamanan menjadi salah satu aspek penting dalam pengembangan aplikasi dan software. Kerentanan yang tidak ditemukan…

22 minutes ago

Apa Itu SSL/TLS? Jangan Anggap Website Aman Tanpa Memahami Ini

Ketika mengakses sebuah website, terutama website yang digunakan untuk login, transaksi, atau mengirimkan data pribadi,…

4 hours ago

Mengenal Region pada Cloud Computing: Faktor Penting yang Sering Diabaikan

Region pada Cloud computing memungkinkan perusahaan dan pengguna menjalankan aplikasi, menyimpan data, serta menggunakan berbagai…

2 days ago

Windows Belum Aktif: Apakah Berbahaya? Ini Penjelasannya

Windows Belum Aktif: Apakah Berbahaya dan Apa yang Perlu Dilakukan? Ketika Windows menampilkan pesan "Activate…

2 days ago

Prompt Chaining: Teknik AI Bikin Tugas Rumit Jadi Lebih Mudah

Perkembangan Artificial Intelligence (AI) membuat penggunaan model bahasa seperti Large Language Model (LLM) semakin luas.…

2 days ago

Risiko Aktivasi Windows Pakai Crack atau Activator, Ini Bahayanya

Ketika Windows belum aktif, sebagian pengguna mungkin mencari cara untuk mengaktifkannya tanpa membeli lisensi. Salah…

2 days ago