Contoh Pengimbangan Beban dengan Zuul dan Eureka

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat bagaimana pengimbangan beban berfungsi dengan Zuul dan Eureka.

Kami akan menghantar permintaan ke REST Service yang ditemui oleh Spring Cloud Eureka melalui Zuul Proxy .

2. Persediaan Awal

Kita perlu menyediakan pelayan / klien Eureka seperti yang ditunjukkan dalam artikel Spring Cloud Netflix-Eureka.

3. Mengkonfigurasi Zuul

Zuul, antara lain, mengambil dari lokasi perkhidmatan Eureka dan melakukan pengimbangan beban dari pelayan.

3.1. Konfigurasi Maven

Pertama, kami akan menambahkan ketergantungan Pelayan Zuul dan Eureka ke pom.xml kami :

 org.springframework.cloud spring-cloud-starter-netflix-zuul   org.springframework.cloud spring-cloud-starter-netflix-eureka-client 

3.2. Komunikasi Dengan Eureka

Kedua, kami akan menambahkan sifat yang diperlukan dalam fail aplikasi.properties Zuul :

server.port=8762 spring.application.name=zuul-server eureka.instance.preferIpAddress=true eureka.client.registerWithEureka=true eureka.client.fetchRegistry=true eureka.client.serviceUrl.defaultZone=${EUREKA_URI://localhost:8761/eureka} 

Di sini kami memberitahu Zuul untuk mendaftarkan dirinya sebagai perkhidmatan di Eureka dan beroperasi di port 8762.

Seterusnya, kami akan melaksanakan kelas utama dengan @EnableZuulProxy dan @EnableDiscoveryClient. @EnableZuulProxy menunjukkan ini sebagai Zuul Server dan @EnableDiscoveryClient menunjukkan ini sebagai Eureka Client:

@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulConfig { public static void main(String[] args) { SpringApplication.run(ZuulConfig.class, args); } }

Kami akan mengarahkan penyemak imbas kami ke // localhost: 8762 / route . Ini harus menunjukkan semua laluan yang tersedia untuk Zuul yang ditemui oleh Eureka:

{"/spring-cloud-eureka-client/**":"spring-cloud-eureka-client"}

Sekarang, kami akan berkomunikasi dengan pelanggan Eureka menggunakan laluan Zuul Proxy yang diperoleh. Mengarahkan penyemak imbas kami ke // localhost: 8762 / spring-cloud-eureka-client / ucapan seharusnya menghasilkan respons seperti:

Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!

4. Load Balancing dengan Zuul

Ketika Zuul menerima permintaan, ia mengambil salah satu lokasi fizikal yang tersedia dan meneruskan permintaan ke contoh layanan yang sebenarnya. Seluruh proses mencache lokasi instansi perkhidmatan dan meneruskan permintaan ke lokasi sebenarnya disediakan di luar kotak tanpa memerlukan konfigurasi tambahan.

Di sini, kita dapat melihat bagaimana Zuul merangkumi tiga contoh perkhidmatan yang sama:

Secara dalaman, Zuul menggunakan Netflix Ribbon untuk mencari semua kejadian perkhidmatan dari penemuan perkhidmatan (Eureka Server).

Mari kita perhatikan tingkah laku ini apabila terdapat banyak kejadian.

4.1. Mendaftar Pelbagai Contoh

Kita akan mulakan dengan menjalankan dua contoh (port 8081 dan 8082).

Setelah semua keadaan habis, kita dapat melihat dalam log bahawa lokasi fizikal kejadian didaftarkan di DynamicServerListLoadBalancer dan laluan dipetakan ke Zuul Controller yang menguruskan permintaan permintaan ke keadaan sebenar:

Mapped URL path [/spring-cloud-eureka-client/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController] Client:spring-cloud-eureka-client instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=spring-cloud-eureka-client, current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null Using serverListUpdater PollingServerListUpdater DynamicServerListLoadBalancer for client spring-cloud-eureka-client initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=spring-cloud-eureka-client, current list of Servers=[0.0.0.0:8081, 0.0.0.0:8082], Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:2; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]}, Server stats: [[Server:0.0.0.0:8080; Zone:defaultZone;......], [Server:0.0.0.0:8081; Zone:defaultZone; ......],

Catatan: log diformat untuk dibaca dengan lebih baik.

4.2. Contoh Pengimbangan Beban

Mari menavigasi penyemak imbas kami ke // localhost: 8762 / spring-cloud-eureka-client / salam beberapa kali.

Setiap kali, kita akan melihat hasil yang sedikit berbeza:

Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!
Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8082'!
Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!

Setiap permintaan yang diterima oleh Zuul diteruskan ke contoh yang berbeza dengan cara round robin.

Sekiranya kita memulakan contoh lain dan mendaftarkannya di Eureka, Zuul akan mendaftarkannya secara automatik dan mula meneruskan permintaan kepadanya:

Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8083'!

Kami juga boleh mengubah strategi pengimbangan beban Zuul ke strategi Ribbon Netflix yang lain - lebih lanjut mengenai ini boleh didapati dalam artikel Ribbon kami.

5. Kesimpulan

Seperti yang telah kita lihat, Zuul menyediakan satu URL untuk semua keadaan Perkhidmatan Rehat dan melakukan load balancing untuk meneruskan permintaan ke salah satu contoh dengan cara round robin.

Seperti biasa, kod lengkap untuk artikel ini boleh didapati di GitHub.