什麼是負載平衡以及如何在客戶端進行負載平衡
「負載平衡」可以解釋為維持任何工作負載。例如,如果您早上必須提供 1000 份早餐,您可以將工作分配給 2-3 個或更多的餐飲服務商,以縮短交貨/準備時間。
在電腦世界中,同樣的邏輯也適用,如果你想快速交付,你可以分工,例如一個網站我們可以有5-10個網絡伺服器,這樣網站會交付得更快(尤其是在高流量的情況下) ),這是伺服器端。
我想談談客戶端負載平衡及其工作原理,例如您正在查詢每個請求的後端,並且您有多個伺服器執行後端工作,為此我將使用 WHOIS 服務
whois1.service.com whois2.service.com
我們可以對這兩台伺服器中的每個請求進行負載平衡,最常用的演算法和預設循環意味著每個請求都會依次發送到一個而不是另一個,例如who1、who2 who1 等,這可以在客戶端透過「 Spring Cloud 負載平衡器」。我們需要配置3個類別
- ServiceInstanceListSupplier 用來定義後端位址和連接埠
- Bean ServiceInstanceListSupplier 用來提供端點清單
- @LoadBalancerClient,即網路客戶端,將用於後端呼叫
現在,我們已經完成了後端的全部設定
public class RestCaller implements ServiceInstanceListSupplier { private final String serviceId; public RestCaller(String serviceId) { this.serviceId = serviceId; } @Override public String getServiceId() { return serviceId; } @Override public Flux<List<ServiceInstance>> get() { return Flux.just(Arrays.asList( new DefaultServiceInstance(serviceId, serviceId, "abc.cyclic.app", 443, true), new DefaultServiceInstance(serviceId, serviceId, "someting.koyeb.app", 443, true), new DefaultServiceInstance(serviceId, serviceId, "127.0.0.1", 8080, false) )); } } @Configuration public class RestCallerConfiguration { @Autowired @Qualifier("webClientBuilder") WebClient.Builder webClientBuilder; @Bean @Primary ServiceInstanceListSupplier serviceInstanceListSupplier(ConfigurableApplicationContext ctx) { return ServiceInstanceListSupplier .builder() .withRetryAwareness() .withHealthChecks(webClientBuilder.build()) .withBase(new RestCaller("whoisService")) .build(ctx); } } @Configuration @LoadBalancerClient(name = "whoisService", configuration = RestCallerConfiguration.class) public class WebClientConfig { @LoadBalanced @Bean @Qualifier("loadBalancedWebClientBuilder") WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } @Bean @Qualifier("webClientBuilder") WebClient.Builder webClientBuilder() { return WebClient.builder(); } }
現在可以在任何 @Component 或 @Service 中使用。
@Component public class WhoisCaller { @Autowired @Qualifier("loadBalancedWebClientBuilder") WebClient.Builder webClientBuilder; public String getWhois(String ip, String source) { String url = "http://whoisService/whois?ip=" + ip + "&source=" + source; return webClientBuilder.build() .get() .uri(url) .retrieve() .bodyToMono(String.class) .timeout(Duration.ofMinutes(1)) .doOnError(e -> { WebClientResponseException e1 = (WebClientResponseException) e; log.error(e1.getRequest().getURI().getHost()); }) .block(); } }
參考資料:
- 我在SO中的問題是為了解決如何使用spring實現客戶端負載平衡
- Spring Cloud LoadBalancer
以上是什麼是負載平衡以及如何在客戶端進行負載平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
