SpringCloud學習文檔筆記

1.SpringCloud服務調用方式有幾種?
  1.Feight聲明式客戶端工具調用調用  
  2.RestTemplate調用  
    注意:需要@bean初始化RestTemplate對象 ,默認爲負載均衡,故初始化需要加@LoadBalanced
    初始化RestTemplate對象示例:
        @Bean @LoadBalanced
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    調用方式示例: String memberUrl="http://app-itmayi-member/getMember";  //http"//+服務名/+請求地址
                  restTemplate.getForObject(memberUrl,String.class); //請求地址 , 返回類型
                  
2.什麼是Eureka自我保護機制? 什麼環境下開啓自我保護機制?    如何開啓禁止?
      1.自我保護機制:默認情況下EurekaClient定時向EurekaServer端發送心跳包,如果EurekaServer在一定時間內沒有收到
                     EurekaClient發送的心跳包,便會從註冊列表剔除該服務(默認90秒)    
                     但是在短時間丟失大量的服務實例心跳,這時候EurekaSever會開啓自我保護機制,不會去剔除該服務.
      2.作用:爲了防止EurekaClient可以正常運行,但是與EurekaServer網絡不通的情況下
               ,EurekaServer將EurekaClient服務進行剔除,開啓後便不會剔除.
      3.建議在本地環境禁止自我保護機制(防止測試關閉Client,但是依然在註冊列表,測試出現錯誤),在生產環境開啓自我保護機制.
      4.開啓禁止 Application.yml配置如下: false->關閉 true->開啓  eureka.server.enable-self-preservation=false
      
3.EurekaServer服務端常見配置 application.properties文件配置信息
        #指定運行端口
        server.port=8001
        #指定服務名稱
        spring.application.name=eureka-server
        #指定主機地址
        eureka.instance.hostname=localhost
        #指定是否要從註冊中心獲取服務(單個註冊中心不需要開啓,集羣需要開啓)
        eureka.client.fetch-registry=false
        #指定是否要註冊到註冊中心(單個註冊中心不需要開啓,集羣需要開啓)
        eureka.client.register-with-eureka=false
        #關閉保護模式
        eureka.server.enable-self-preservation=false
        #註冊到另一個Eureka註冊中心(搭建集羣使用,多個,逗號分開)  
        eureka.client.service-url.defaultZone=http://127.0.0.1:8100/eureka/,http://localhost:9100/eureka/
        #註冊中心添加認證,需要SpringSecurity依賴包 配置SpringSecurity登錄用戶名和密碼
        spring.security.user.name=root
        spring.security.user.password=123456

3.EurekaClient客戶端常見配置 application.properties文件配置信息    
        #指定運行端口
        server.port=8101
        #服務名稱
        spring.application.name=eureka-client
        #獲取註冊實例列表
        eureka.client.fetch-registry=true
        #註冊到Eureka的註冊中心
        eureka.client.register-with-eureka=true
        #配置註冊中心地址
        #連接單個 eureka.client.service-url.defaultZone=http://localhost:8001/eureka/
        #心跳檢測和續約時間
        #Eureka服務刪除實例之前等待的時間(秒)  如90秒沒有收到心跳檢測,則剔除服務
        eureka.instance.lease-expiration-duration-in-seconds=90
        #Eureka客戶端需要發送心跳的間隔(秒) 30秒發送一次
        eureka.instance.lease-renewal-interval-in-seconds=30
        #連接到Eureka集羣 eureka.client.service-url.defaultZone=http://localhost:8100/eureka/,http://localhost:9100/eureka/
        #連接帶有認證的註冊中心  連接格式 http://${username}:${password}@${hostname}:${port}/eureka/
        #eureka.client.service-url.defaultZone=http://root:123456@localhost:8004/eureka/
        #feign客戶端建立連接超時時間
        feign.client.config.default.connect-timeout=10000
        #feign客戶端建立連接後讀取資源超時時間
        feign.client.config.default.read-timeout=10000
        #開啓Hystrix斷路器
        feign.hystrix.enabled=true
        
4.獲取註冊中心服務列表信息方法
        1.引入接口    @Autowired   private DiscoveryClient discoveryClient;
        2.discoveryClient調getInstances()方法,參數爲服務名稱. 例: discoveryClient.getInstances("consul-member");
        
5.Ribbon本地負載均衡客戶端與Nginx服務器端負載均衡的區別?應用場景?
        Ribbon本地負載均衡,原理:在調用接口的時候,會在Eureka註冊中心上獲取註冊信息服務列表,獲取到之後,緩存在JVM本地
              然後使用本地實現RPC遠程調用技術進行調用,既是客戶端實現負載均衡.
        Nginx 是服務器負載均衡,客戶端所有請求都會交給Nginx,然後再由Nginx實現轉發請求,既負載均衡是有服務器端實現.
        應用場景:
        Ribbon本地負載均衡適合在微服務RPC遠程調用,比如dubbo ,springcloud
        Nginx服務器負載均衡 適合於針對與服務器端 比如tomcat ,jetty

6.服務雪崩效應?
        解釋:默認情況下tomcat只有一個線程池去處理客戶端發送的所有服務請求,這樣的話在高併發的情況下,如果客戶端
        所有的請求堆積到同一個服務接口上,就會產生tomcat的所有線程去處理該服務接口,可能會導致其他服務接口無法訪問,
        就會導致其他服務接口訪問的時候,產生延遲和等待.
        
7.Hystrix服務保護框架,在微服務中Hystrix能夠爲我們解決哪些問題?
        1.斷路器
        2.服務降級
        3.服務熔斷
        4.服務隔離機制
        5.服務雪崩效應 連環雪崩效應 如果嚴重的話,可能會導致整個微服務接口無法訪問,所有服務器都會癱瘓.

8.基於Hystrix解決服務雪崩效應原理:
        服務降級
            1.在高併發的情況下,防止用戶一直等待.使用服務降級方式(返回一個友好的提示直接給客戶端,不會去處理請求,調用fallBack)
                  目的是爲了用戶體驗.
            2.秒殺-----當前請求人數過多,請稍後嘗試. (在tomcat中沒有線程進行處理客戶端請求的時候,不應該讓用戶一直轉圈等待)
            3.如果調用其他接口超時的時候(默認是1秒時間),如果在一秒鐘沒有及時響應返回的話,(默認情況下業務邏輯是可以執行的)
                  ,則直接執行服務降級.
        服務隔離機制
            服務熔斷目的是爲了保護服務,在高併發情況下,如果請求達到了一定的極限(可以自己設置閾值).如果流量
            超出了設置的閾值,自動開啓保護服務功能,使用服務降級方式返回友好提示.熔斷機制和服務降級一起使用.
        服務熔斷
            隔離方式線程池和信號量隔離.
            線程池隔離:每個服務接口都有自己獨立的線程池,每個線程池互不影響,缺點:CPU佔用率非常高.不是所有
                       的接口都去採用線程池隔離,核心關鍵接口.

9.SpringCloud Config 分佈式配置文件中心
     1.爲什麼要使用分佈式配置中心?
          產生的背景:在微服務如果使用傳統的方式管理配置文件,配置文件管理器非常複雜,如果生產環境配置文件,可能
                     需要發生改變的時候,重新打war包,重新讀取配置信息在jvm內存中
     2.什麼是分佈式配置中心?
          在微服務當中使用同一個服務器管理所有服務配置文件信息,能夠實現後臺可管理,當服務器正在運行的時候,
          如果配置文件需要發生改變,可以實現不需要重啓服務器實時更改配置文件信息.
     3.有哪些分佈式配置中心框架?
          1.阿波羅攜程寫分佈式配置中心,有圖形界面可管理配置文件信息.配置文件信息存放在數據庫裏面.
          2.SpringCloud Config沒有後臺可管理分佈式配置中心,配置文件信息存放在版本控制器裏面.
          3.使用Zookeeper實現分佈式配置中心,持久節點+事件通知          
     4.分佈式配置中心需要哪些組件?
          1.Web管理系統--後臺可以使用圖形界面管理配置文件SpringCloud Config沒有圖像化管理配置文件
          2.存放分佈式配置文件服務器(持久存儲服務器)--使用版本控制器存放配置文件信息,使用git環境
          3.ConfigServer緩存配置文件服務器(臨時緩存存放)
          4.ConfigClient 讀取ConfigServer配置文件信息.

10.搭建分佈式配置中心 SpringCloud Config
    1.搭建git環境, 目的:持久化存儲配置文件信息 採用碼雲
       git環境上文件夾以項目進行區分
       member_config會員服務配置文件
       order_config訂單服務配置文件
    2.公司項目中環境是如何區分?
       dev   開發環境
       sit   測試環境
       pre   預發佈環境
       prd   準生產環境
       uat   驗收環境
    3.在Git環境上創建配置文件命名規範
      會員服務---服務名稱---member:  服務名稱-環境.properties    member-dev.properties
    4.默認情況下不能及時的獲取實時變更的配置文件信息
      springcloud分佈式配置中心,可以採用手動刷新或者自動刷新
            手動刷新--需要人工調用接口,讀取最新配置文件(監控中心) 人工調用/actuator/refresh進行刷新(post請求)
            自動刷新--消息總線進行實時通知---springbus
        
11.網關API(接口) Gateway(網關) ---接口網關注意: 接口沒有界面
   1.網關概念:相當於客戶端請求統一先請求到網關服務器上,在由網關服務器進行轉發到實際服務地址上,類似Nginx
   2.網關作用:網關可以攔截客戶端所有請求,對該請求進行權限控制,負載均衡,日誌管理,接口調用監控等
   3.網關和過濾器區別是什麼?
        網關是攔截整個微服務所有請求,過濾器是攔截單個tomcat服務器請求
   4.Nginx與Zuul區別?
        相同點: Nginx和Zuul都可以實現負載均衡,反向代理,過濾請求,實現網關效果.
        不同點: Nginx採用C語言編寫,Zuul採用java語言編寫. Zuul負載均衡實現:採用ribbon+eureka實現本地負載均衡
                Nginx負載均衡實現:採用服務器端實現負載均衡.Nginx比Zuul功能會更加強大,因爲Nginx整合一些腳本語言(Nginx+Lua)可以實現一些其他功能.
                Nginx適合於服務器負載均衡 + 也可以實現網關. Zuul適合微服務中實現網關,而且使用技術是java語言
                Nginx作用實現反向代理,Zuul對微服務實現網關攔截. 標配最好Nginx+Zuul實現網關.
                
   4.接口什麼背景下產生?  在面向服務架構和微服務背景下產生,目的都是爲了解耦,RPC遠程調用中產生
   5.接口如何分類?
       開放接口:其他機構合作伙伴進行調用(必須在外網訪問) 螞蟻開放平臺 ,微信公衆號開發
                需要通過appid+appsocet生成accessToken進行通訊.對接支付開發,微信開發,目的可以
                授權一些接口權限OAuth2.0協議方式 如:第三方聯合登錄
       內部接口:一般只能在局域網中進行訪問,服務與服務調用之間關係都在同一個微服務系統中,目的是爲了
                保證安全問題
    
12.設計一套公司項目的接口,你會如何設計?
    接口權限(開放接口(遵循OAuth2.0協議)|內部接口),考慮冪等性,安全性(Https) 防止篡改數據(驗證簽名),
    使用網關攔截接口實現黑名單和白名單 , 接口使用http協議+json格式restful風格目的爲了跨平臺.
    考慮高併發 對接口服務實現保護.服務降級熔斷隔離等.最後使用API統一管理平臺 Swagger UI


        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章