Service Discovery

January 28, 2021 by

 Service Discovery

Misal kita ada toko online :
Shopping cart service : untuk menghandle data shopping cartnya.
Order Service : untuk layanan pemesanan
Payment Service : utk mengurus data pembayaran

Biasanya di toko online kita ada request ecommerce kita ke shopping cart, kita lakukan ke order baru dari order service, utk melakukan pembayaran kita dari order service kita request ke payment service. Awalnya tidak ada problem, sampai ada kendala order service lemot, sehingga orang membuat pemesanan itu lama sekali.
Cara agar aplikasi tidak lemot kita menggunkaan aplikasi yg sama contoh order service dibuat lebih bnyak.
Kita menginstall sebuah aplikasi proxy server untuk mengirim data dari shopping cart service ke order service. contoh proxy server : nginx, apache httpd, HaProxy.
Proxy server akan secara pintar mendistribusikan ke order service.
Kendala lain tiba2 payment service jadi lemot, maka kita install beberapa node payment service, atau beberapa aplikasi yg sama dengan payment service dan menggunakan proxy server juga utk pengiriman secara otomatis dari order service ke payment service.
Kendala lain tiba2 aplikasi ecommerce kita lemot banget, akhirnya kita check semua service, jika tidak ada masalah dan dimonitoring tidak masalah.

Secara tidak sadar semua service kita melewati proxy server yang dibuat. Akhirnya membebani proxy server, krn kita tergantung dengan proxy server, hal ini bahaya.
Solusinya jadi dibuat proxy server utk kirim data dari shopping cart ke order service dan proxy server dari order service ke payment service
Tiba2 proxy server antara order service dan payment service mati maka semua request ke payment service tidak ada yg berjalan dan jadi bottle neck.
Jadi dibuat 2 atau lebih proxy server nya utk masing2 service.
Misal kita punya 10 service dibelakang kita perlu menginstall 2x 10 proxy server. sehingga cost makin mahal. Tiap nambah node tim infra akan mengalami kewalahan krn manual mengoknfigurasi proxy server.
cara yang lebih mudah yaitu Service discovery.
Service discovery itu adalah mencari service secara otomatis dijaringan komputer kita, caranya gimna tanpa load balancer ?
Tinggal kita simpan saja daftar lokasi service yg kita butuhkan di aplikasi kita, contoh simpan di config file yg dibutuhkan.
contoh shopping cart akan menyimpan config file utk lokasi 3 order service dan di order service disimpan lokasi utk payment servicenya.
Tetapi gimna kejadiannya payment service nambah 1 node atau 1 node mati. Otomatis di order service dalam 2 request nya ada gagal 1 request krn menembak 1 node yg mati. Belum lgi ketika kita menambah 1 payment service kita tidak tahu service mana aja yg butuh menembak payment service. solusinya tidak scallable.

Kita menginstall service registry yaitu consul, eureka,
Sederhananya dia akan menyimpan list of service dan juga endpoint2 servicenya, jadi seblumnya tiap aplikasi yg menembak service dia menyimpan data service di aplikasinya.
semua list lokasi servicenya, disimpan di service resgistry dan selain itu ketika shopping cart ingin menembak order service atau order service ke payment service, mereka akan bertanya dulu ke aplikasi service registry. Service registry akan memberitahu service yg akan menembak service lain. Dibanding menyimpan semua config di dlm aplikasi maka kesulitan, semua di centralize di service registry.
Idealnya nanya ke service registry dan memberitahu lokasi yg ingin ditembak dan service yg ingin menembak menyimpan lokasinya beberapa waktu diaplikasi kita dimemory saja, contoh selama 10 detik, setelah bebearapa waktu kemudian nany lagi utk validasi seuatu perubahan, delay perubahan data 5-10 detik. jika real time itu data akan lambat krn 2 kali menembak service.
Bukan masalah simpan config, tpi ketika kita nambah node atau 1 node yg mati, maka fitur service registry ini dimiliki. Jadi biasanya kita aplikasi nyala secara otomatis akan memberitahu ke service registry jika nyala, jika service mati maka service registry ada health check secara berkala, mka jika respon yg tidak sesuai maka service registry menandai node bermasalah.
Data node yg sehat itu yg dikembalikan oleh service registry. Dengan seperti ini ketika error atau bermasalah dia tidak akan menerima traffic. Bayangkan jika disimpan di aplikasi, error tidak eror mati dan tidak mati itu akan ditembak oleh si service lain, dengan service registry akan di tangani dan tidak diberi request.

Tantangan adalah
Sekarang cara mendistribusi requestnya dilakukan di proxy servernya 1 1. Service dan service langsung maka service registry harus bisa mendistribusi ke node2 yg terkoneksi, jika salah mendistribusikan maka service yg lain tidak akan dapat traffic. Client side load balancer lebih menguntungkan, dan tadinya server side load balancer (proxy server). ini adalah tantangan dari service registry.
Pro dan contra, jika kita menggunakan proxy server kita tdak perlu mengurus load balancer lagi. Jika menggunakan client side maka kita harus memindahkan kompleksitas di server ke client.

0 comments:

Post a Comment