日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springCloud负载均衡Ribbon和Feign的区别

發(fā)布時(shí)間:2024/9/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springCloud负载均衡Ribbon和Feign的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、什么是負(fù)載均衡:

? ?負(fù)載均衡(Load Balance)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,將請求/數(shù)據(jù)【均勻】分?jǐn)偟蕉鄠€(gè)操作單元上執(zhí)行,負(fù)載均衡的關(guān)鍵在于【均勻】。

2、常見的負(fù)載均衡方案:

?? ?1、正向代理:

? ?正向代理 是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端。客戶端必須要進(jìn)行一些特別的設(shè)置才能使用正向代理。

? ? ? ? ? 比如: 我是一個(gè)用戶,我訪問不了某網(wǎng)站,但是我能訪問一個(gè)代理服務(wù)器,這個(gè)代理服務(wù)器呢,他能訪問那個(gè)我不能訪問的網(wǎng)站,于是我先連上代理服務(wù)器,告訴他我需要那個(gè)無法訪問網(wǎng)站的內(nèi)容,代理服務(wù)器去取回來,然后返回給我。從網(wǎng)站的角度,只在代理服務(wù)器來取內(nèi)容的時(shí)候有一次記錄,有時(shí)候并不知道是用戶的請求,也隱藏了用戶的資料,這取決于代理告不告訴網(wǎng)站。

? 用途:

? ??(1)訪問原來無法訪問的資源,如google(VPN)

? ??(2) 可以做緩存,加速訪問資源

 (3)對客戶端訪問授權(quán),上網(wǎng)進(jìn)行認(rèn)證

 (4)代理可以記錄用戶訪問記錄(上網(wǎng)行為管理),對外隱藏用戶信息

? 2、反代理:

? ? ? 反向代理(Reverse Proxy)實(shí)際運(yùn)行方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時(shí)代理服務(wù)器對外就表現(xiàn)為一個(gè)服務(wù)器。

? ??比如:我要訪問localhost:8080/xxx/view這個(gè)頁面,但是xxx對應(yīng)的服務(wù)器并沒有view這個(gè)資源,它是從另一臺服務(wù)器上調(diào)用這個(gè)資源,這樣的vies對應(yīng)的那個(gè)服務(wù)器就使用了反向代理服務(wù)器,具體請求是由服務(wù)器統(tǒng)一處理的,用戶并不需要知道。

? 用途:

(1)保證內(nèi)網(wǎng)的安全,可以使用反向代理提供WAF功能,阻止web攻擊

? ? ? ? ?大型網(wǎng)站,通常將反向代理作為公網(wǎng)訪問地址,Web服務(wù)器是內(nèi)網(wǎng)。

(2)負(fù)載均衡,通過反向代理服務(wù)器來優(yōu)化網(wǎng)站的負(fù)載

3、spring cloud的 Netflix ribbon 和 feign 的區(qū)別:

? ? ??Ribbon:Ribbon?是一個(gè)基于 HTTP 和 TCP 客戶端的負(fù)載均衡器它可以在客戶端配置 ribbonServerList(服務(wù)端列表),然后輪詢請求以實(shí)現(xiàn)均衡負(fù)載它在聯(lián)合 Eureka 使用時(shí)ribbonServerList 會被 DiscoveryEnabledNIWSServerList 重寫,擴(kuò)展成從 Eureka 注冊中心獲取服務(wù)端列表同時(shí)它也會用 NIWSDiscoveryPing 來取代 IPing,它將職責(zé)委托給 Eureka 來確定服務(wù)端是否已經(jīng)啟動。?使用 HttpClient 或 RestTemplate 模擬http請求,步驟相當(dāng)繁瑣。

? ? ?用法:?

?RestTemplate注入到容器中,@LoadBalanced注解使用默認(rèn)負(fù)載均衡算法(可以使用自定義)

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate;@SpringBootApplication @EnableDiscoveryClient public class HelloworldApplication {public static void main(String[] args) {SpringApplication.run(HelloworldApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();} }

? ???用 REST_URL_PREFIX 指定請求地址 , 使用 restTemplate 模擬 http 請求。@RestController

public class DeptController_Consumer {//注冊中心請求的地址private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";@Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/consumer/dept/add")public boolean add(Dept dept) {return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);}@RequestMapping(value = "/consumer/dept/get/{id}")public Dept get(@PathVariable("id") Long id) {return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);} @RequestMapping(value = "/consumer/dept/list")public List<Dept> list() {return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);} }

? ? ?Feign:

Feign 是在 Ribbon的基礎(chǔ)上進(jìn)行了一次改進(jìn),是一個(gè)使用起來更加方便的 HTTP 客戶端。采用接口的方式, 只需要創(chuàng)建一個(gè)接口,面向接口;然后在上面添加注解即可 ,將需要調(diào)用的其他服務(wù)的方法定義成抽象方法即可, 不需要自己構(gòu)建http請求。然后就像是調(diào)用自身工程的方法調(diào)用,而感覺不到是調(diào)用遠(yuǎn)程方法,使得編寫 客戶端變得非常容易。類似于 mybatis 的 @Mapper注解 。

? ? ? 用法:

? ? ??在?api 工程?定義一個(gè)接口API,
? ? ?a) 添加@FeignClient?注解,指定微服務(wù)名稱?MICROSERVICECLOUD-DEPT
? ?
? b)?指定請求地址?@RequestMapping

@FeignClient(value = "MICROSERVICECLOUD-DEPT") public interface DeptClientService {@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)public Dept get(@PathVariable("id") long id);@RequestMapping(value = "/dept/list", method = RequestMethod.GET)public List<Dept> list();@RequestMapping(value = "/dept/add", method = RequestMethod.POST)public boolean add(Dept dept); }

在?客戶端的工程?引入 DeptClientService 接口,調(diào)用對應(yīng)的方法。DeptClientService 類似于 mybatis的@Mappper?注解

@RestController public class DeptController_Consumer {@Autowiredprivate DeptClientService service = null;@RequestMapping(value = "/consumer/dept/get/{id}")public Dept get(@PathVariable("id") Long id) {return this.service.get(id);}@RequestMapping(value = "/consumer/dept/list")public List<Dept> list() {return this.service.list();}@RequestMapping(value = "/consumer/dept/add")public Object add(Dept dept) {return this.service.add(dept);} }

application.yml

server:port: 80eureka:client:register-with-eureka: falseservice-url: defaultZone: http://eurekaHostIP1:7001/eureka/,http://eurekaHostIP2:7002/eureka/,http://eurekaHostIP3:7003/eureka/

總結(jié)

以上是生活随笔為你收集整理的springCloud负载均衡Ribbon和Feign的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。