• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SpringCloud學習筆記2

    零.復習

    其實,SpringCloud有點與之前學過的WebService相似。
    SpringCloud構建項目的微服務框架,就是一個工具集,集Netfilx的開源組件進一步封裝。
    Eureka-Server、Eureka-Client、Ribbon

    一.Eureka Client的高可用

    1. 啟動eureka server注冊中心
    2. 搭建服務的高可用
      ①準備服務提供者
      ②注意:同一個服務提供者的集群,服務的名字必須一致。
      ③同時向euraka注冊
    3. 啟動eureka server 啟動多個服務實例即可

    二.基于ribbon的負載均衡

    Springcloud 中的默認的負載均衡策略是 輪詢策略
    restTemplate(類似httpClient協議的通信框架)+ ribbon組件(負載均衡)

    		<!--引入ribbon-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
                <version>1.3.0.RELEASE</version>
            </dependency>
    
    • rebbon組件如何進行負載均衡的呢?
      當我們發起一個請求,這個請求調用服務,先去注冊中心拿服務類表;區別于Dubbo,dubbo是在注冊中心中,在服務提供方,設計了一系列負載均衡策略,當然消費方是可以覆蓋服務方的負載均衡策略。(服務方提供負載均衡策略,消費方可覆蓋服務方
      Springcloud則不同,其所有的負載均衡均屬”軟負載均衡“。軟負載均衡 — 基于客戶端的負載均衡,與服務端無關。(ribbon是一個基于客戶端的軟負載均衡
      當我們調用某個服務時,客戶端向eureka server請求該服務實例,然后它會把這個服務的服務列表,全部返回給客戶端,并緩存起來。(其中,客戶端緩存列表會與服務器進行心跳檢測,遇宕機會高效剔除 )即在客戶端進行負載均衡,與服務提供者和注冊中心沒有關系。
      所以可以使用@LoadBalanced注解,根據默認負載均衡策略拿到列表中的服務節點。

    • 那么如何修改策略呢?
      ribbon中輪詢策略,是基于三大組件

    1. ServerList ”用來獲取服務列表“
      根據指定的服務名,去拿取注冊中心中的服務列表

    2. ServerListFilter ”通過心跳機制,進行服務過濾“
      為了保證服務的高可用,對拿到列表中的服務 與 eureka始終做”心跳機制“,去檢測可用服務

    3. IRule ”指定負載均衡規則“(修改處
      拿到可用服務列表后,具體使用哪種負載均衡策略

    • RibbonLoadBalancerClient.class 詳情見 Ribbon負載均衡策略
    public class RibbonLoadBalancerClient implements LoadBalancerClient {
      
    //serviceId 服務唯一標識,通過get拿到真正的server
        public ServiceInstance choose(String serviceId) {
            Server server = this.getServer(serviceId);
            return server == null ? null : new RibbonLoadBalancerClient.RibbonServer(serviceId, server, this.isSecure(server, serviceId), this.serverIntrospector(serviceId).getMetadata(server));
        }
        
    //chooseServer 取到ILoadBalancer組件
        protected Server getServer(ILoadBalancer loadBalancer) {
            return loadBalancer == null ? null : loadBalancer.chooseServer("default");
        }
    
    • ILoadBalancer
    public interface ILoadBalancer {
    
    //再從這去到BaseLoadBalancer實現類
        Server chooseServer(Object var1);
    
    • BaseLoadBalancer.class
    public class BaseLoadBalancer extends AbstractLoadBalancer implements PrimeConnectionListener, IClientConfigAware {
     
    //rule 默認RoundRobinRule() 輪詢
        private static final IRule DEFAULT_RULE = new RoundRobinRule();
    
    //IRule 的實現類,就是哪些策略
        protected IRule rule;
        
        private final Counter createCounter() {
            return Monitors.newCounter("LoadBalancer_ChooseServer");
        }
    
        public Server chooseServer(Object key) {
            if (this.counter == null) {
     //輪詢需要計數,好知道哪臺機器是否訪問過
                this.counter = this.createCounter();
            }
    //計的數,自增長
            this.counter.increment();
    //基于rule規則進行選擇
            if (this.rule == null) {
                return null;
            } else {
                try {
                    return this.rule.choose(key);
                } catch (Exception var3) {
                    logger.warn("LoadBalancer [{}]:  Error choosing server for key {}", new Object[]{this.name, key, var3});
                    return null;
                }
            }
        }
    

    在這里插入圖片描述

    三.使用屬性自定義ribbon客戶端

    在application.yml中

    HELLO-SERVICE: #服務名,注意要與大小寫一致。(restTemplate.getForObject的url)
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #規則要寫全限定名
    

    四.ribbon的負載均衡

    在這里插入圖片描述
    參考資料: https://www.jianshu.com/p/e89c693f19d2

    版權聲明:本文為weixin_30631587原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_30631587/article/details/97671383

    智能推薦

    SpringCloud學習筆記3

    服務的消費的兩種方式:一種使用:rest+ribbon,一種是Feign 一.第二種客戶端調用方式 — 服務消費者(Feign) Feign簡介 Feign是一個聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡單。 使用Feign,只需要創建一個接口并注解。 它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解。Feign支持可插拔的編碼器和解碼器。 Feign默認集...

    SpringCloud學習筆記01

    1.什么是微服務? 從官方博文了解(馬丁·福勒) 通常而言,微服務架構是一種架構模式或者說是一種架構風格,它提倡將單一應用程序劃分成一組小的服務,每個服務運行在其獨立的進程中,服務之間相互協調,互相配合,為用戶提供最終價值。服務之間采用輕量級的通信機制互相溝通(通常是基于HTTP的RESTfull API)。每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境,類生產環境...

    SpringCloud學習 -筆記

    SpringCloud學習 -筆記 前提 架構要求 微服務 Spring Cloud主要模塊 源碼地址 搭建開發環境 微服務發布與調用-Eureka Eureka 介紹 Eureka Demo項目實踐 Eureka 集群搭建 實踐 Eureka 健康 負載均衡-Ribbon Ribbon介紹 Ribbon Demo項目實踐 Ribbon 負載均衡規則 ping機制 使RestTemplate具備負...

    springcloud bus學習筆記

    1 環境 系統環境:win10 編輯器:IDEA springcloud:H版 rabbitmq 2 簡介 springcloud bus通過輕量級消息代理連接各個微服務 可用廣播配置文件來更改/或管理服務監控 安裝rabbitmq文章參考 3 全部刷新 1 添加bus依賴 config-server和config-client pom都要添加 2 rabbitmq yml配置 config-se...

    SpringCloud學習筆記

    目錄 1.SpringCloud 簡介 1.1.什么是 SpringCloud 1.2.SpringCloud 與 SpringBoot 的關系 1.3.SpringCloud 主要框架 1.4.SpringCloud 與 Dubbo 對比 1.5.說說 SpringCloud 的版本 2.服務發現組件 Eureka 2.1.Eureka簡介 2.2.Eureka服務端開發 1)搭建Eureka服...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡