一竞端、Eureka注冊中心架構圖原理
? ? Register(服務注冊):把自己的IP和端口注冊給Eureka
? ? Renew(服務續(xù)約):發(fā)送心跳包,每30秒發(fā)送一次庙睡,告訴Eureka自己還活著
? ? Cancel(服務下線):當provider關閉時會向Eureka發(fā)送消息事富,把自己從服務列表中刪除技俐。防止consumer調用到不存在的服務
? ? Get? ? Registry(獲取服務注冊列表):獲取其他服務列表
? ? Replicate(集群中數據同步):eureka集群中的數據復制與同步
? ? Make? ? Remote? ? Call(遠程調用):完成服務的遠程調用
二渊胸、CAP原則與兩大主流服務框架ZK潘明、Eureka的對比
? ? 1.CAP原則:CAP原則又稱CAP定理,指的是在一個分布式系統(tǒng)中锨侯,
????????Consistency(一致性)饺谬、
????????Availability(可用性)捂刺、
????????Partition tolerance(分區(qū)容錯性),三者不可兼得
????CAP由Eric? Brewer在2000年PODC會議上提出募寨。該猜想在提出兩年后被證明成立族展,成為我們熟知的CAP定理
? ? 2.分別表示的含義
????????C:數據一致性(Consistency),也叫做數據原子性,系統(tǒng)在執(zhí)行某項操作后仍然處于一致的狀態(tài)拔鹰。在分布式系統(tǒng)中仪缸,更新操作執(zhí)行成功后所有的用戶都應該讀到最新的值,這樣的系統(tǒng)被認為是具有強一致性的列肢。等同于所有節(jié)點訪問同一份最新的數據副本
????????A:服務可用性(Availablity)恰画,每一個操作總是能夠在一定的時間內返回結果,這里需要注意的是“一定時間內”和“返回結果”瓷马。一定時間內指的是拴还,在可以容忍的范圍內返回結果,結果可以是成功或者是失敗
????????P:分區(qū)容錯性(Partition-torlerance)欧聘,在網絡分區(qū)的情況下片林,被分割的節(jié)點仍能對外提供服務(分布式集群,數據被分布存儲在不同的服務器上怀骤,無論什么情況费封,服務器都能正常被訪問)
? ? 3.不同組合的含義
????????CA,放棄P:如果想避免分區(qū)容錯性問題的發(fā)生蒋伦,一種做法是將所有的數據(與事務關的)都放在一臺機器上弓摘。雖然無法100%保證系統(tǒng)不會出錯,但不會碰到由分區(qū)帶來的負面效果凉敲,當然這個選擇會嚴重影響系統(tǒng)的擴展性
????????CP衣盾,放棄A:相對于放棄“分區(qū)容錯性”來說,其反面就是放棄可用性爷抓。一旦遇到分區(qū)容錯故障势决,那么受影響的服務需要等待一定時間,因此在等待時間內系統(tǒng)無法對外提供服務
????????AP蓝撇,放棄C:這里所說的放棄一致性果复,并不是完全放棄數據一致性,而是放棄數據的強一致性渤昌,而保留數據的最終一致性虽抄。以網絡購物為例走搁,對只剩下一件庫存的商品,如果同時接受了兩個訂單迈窟,那么較晚的訂單將被告知商品告罄
? ? ? ? 重要定律:任何分布式系統(tǒng)只可同時滿足其中兩點私植,無法三者兼顧
? ? 4.Zookeeper與Eureka的區(qū)別
三、Eureka的服務自我保護
????1.自我保護的條件:一般情況下车酣,微服務在Eureka上注冊后曲稼,每30秒會發(fā)送心跳包,Eureka通過心跳來判斷服務是否健康湖员,同時會定期刪除超過90秒沒有發(fā)送心跳的服務
????2.有兩種情況會導致Eureka Server收不到微服務的心跳
????????a.是微服務自身的原因
????????b.是微服務于Eureka之間的網絡故障
????????通常(微服務的自身的故障關閉)只會導致個別服務出現故障贫悄,一般不會出現大面積故障,而(網絡故障)通常會導致Eureka??? Server在短時間內無法收到大批心跳
????????考慮到這個區(qū)別娘摔,Eureka設置了一個閾(yu)值窄坦,當判斷掛掉的服務的數量超過閾(yu)值時,Eureka??????? Server認為很大程度上出現了網絡故障凳寺,將不再刪除心跳過期的服務
????3.那么這個閾(yu)值是多少呢鸭津?
????????15分鐘之內是否低于85%;
????????Eureka? Server在運行期間肠缨,會統(tǒng)計心跳失敗的比例在15分鐘內是否低于85%曙博,這種算法叫Eureka??? Server的自我保護模式
? ? 4.為什么要啟動自我保護?
????????a.因為同時保留“好數據”與“壞數據”總比丟掉任何數據要更好怜瞒,當網絡故障恢復后,這個Eureka節(jié)點會退出“自我保護模式”般哼。
????????b.Eureka還有客戶端緩存功能(也就是微服務的緩存功能)吴汪。即便Eureka集群中所有節(jié)點都宕機失效,微服務的Provider和Consumer都能正常通信
????????c.微服務的負載均衡策略會自動剔除死亡的微服務節(jié)點
? ? 5.關閉自我保護的方式
? ??????修改application.properties/yml全局配置文件
四蒸眠、Eureka服務的優(yōu)雅停服
????1.修改pom.xml配置文件漾橙,添加Eureka-Server的依賴
????2.修改application.properties/yml全局配置文件
????????添加:
? ? 3.測試
????????http://Eureka服務所在的IP+端口/shutdown,而且URL必須要使用dopost方式發(fā)送
????????我們可以借助HttpClient工具類來實現
五楞卡、開啟Eureka安全中心的安全認證
????舊版本配置方式
????1.在Eureka? Server中添加security依賴
????2.修改application.properties/yml全局配置文件
????????開啟htpp basic的安全認證
????3.修改訪問集群節(jié)點的url,添加配置的用戶名和密碼(必然彼此之間會訪問失敗蒋腮,集群注冊失斕约瘛)
? ? 新版本(高版本)配置方式
? ? 1.添加依賴,groupId有所差異
? ? 2.修改eureka服務全局配置文件(有幾個服務配置幾個)
? ? 3.新建類添加@Configuration變成SpringBoot配置類池摧,繼承WebSecurityConfigurationAdapter類焦除,重寫configure方法,禁用csrf
? ? ? ? 注意作彤,一旦開啟安全認證膘魄,需要配置傳遞用戶名和密碼
? ??????修改微服務的配置文件添加訪問注冊中心的用戶名與密碼(每個注冊節(jié)點都要配置)
六乌逐、負載均衡Ribbon
? ? 負載均衡在微服務中的作用
? ? 1.Ribbon的概念
????????a.Ribbon是一個基于Http和TCP的客戶端負載均衡工具,他是語句Netflix Ribbon實現的
????????b.它不像spring? cloud服務注冊中心创葡、配置中心浙踢、API網關那樣獨立部署,但是它幾乎存在于每個spring cloud微服務中灿渴。包括feign提供的聲明式服務調用也是基于該Ribbon實現的
????????c.ribbon默認提供很多種負載均衡算法洛波,例如輪詢、隨機等等逻杖,甚至包括自定義的負載均衡算法
????????????????Ribbon解決并提供了微服務的負載均衡的問題
? ? 2.負載均衡方案的分類
????????目前業(yè)界主流的負載均衡方案可分成兩類:
????????第一類:集中式負載均衡奋岁,即在consumer和provider之間使用獨立的負載均衡設施(可以是硬件,如F5荸百,也可以是軟件闻伶,如nginx),由該設置負責把訪問請求通過某種策略轉發(fā)至provider够话;
????????第二類:進程內負載均衡蓝翰,將負載均衡邏輯集成到consumer,consuerm從服務注冊中心獲知由哪些地址可用女嘲,然后自己再從這些地址中選擇出一個合適的provider畜份;
????????Ribbon就屬于后者,它只是一個類庫欣尼,集成于consumer進程爆雹,consumer通過它來獲取到provider的地址。
? ? 3.Ribbon的負載均衡策略
? ? ? ? A.策略名稱:輪詢策略(默認)
????????????對應的類名: RoundRobinRule
? ? ? ? ? ? ? ? 實現原理:輪詢策略表示每次都順序取下一個 provider愕鼓,比如一共有 5 個provider钙态,第 1 次取第 1 個,第 2
次取第 2 個菇晃,第 3 次取第 3 個册倒,以此類推
? ? ? ? B.策略名稱:權重輪詢策略
????????????對應的類名:WeightedResponseTimeRule
? ? ? ? ? ? ? ? 實現原理:
????????????1.根據每個 provider 的響應時間分配一個權重,響應時間越長磺送,權重越小驻子,被選中的可能性越低。
????????????2.原理:一開始為輪詢策略估灿,并開啟一個計時器崇呵,每 30 秒收集一次每個 provider 的平均響應時間,當信息
足夠時甲捏,給每個 provider附上一個權重演熟,并按權重隨機選擇provider,高權越重的 provider會被高概率選中。
? ? ? ? C.策略名稱:隨機策略
????????????對應的類名:RandomRule
? ? ? ? ? ? ? ? 實現原理:從 provider 列表中隨機選擇一個 provider
? ? ? ? D.策略名稱:最少并發(fā)數策略
????????????對應的類名:BestAvailableRule
? ? ? ? ? ? ? ? 實現原理:選擇正在請求中的并發(fā)數最小的 provider芒粹,除非這個provider 在熔斷中
? ? ? ? E.策略名稱:在“選定的負載均 衡策略”基礎上進行重 試機制
????????????對應的類名:RetryRule
? ? ? ? ? ? ? ? 實現原理:
????????????1.“選定的負載均衡策略”這個策略是輪詢策略RoundRobinRule
????????????2.該重試策略先設定一個閾值時間段兄纺,如果在這個閾值時間段內當選擇 provider 不成功,則一直嘗試采用“選定
的負載均衡策略:輪詢策略”最后選擇一個可用的provider
? ? ? ? F策略名稱:可用性敏感策略
????????????對應的類名:AvailabilityFilteringRule
? ? ? ? ? ? ? ? 實現原理:過濾性能差的 provider,有 2種:
????????????第一種:過濾掉在 eureka 中處于一直連接失敗 provider
????????????第二種:過濾掉高并發(fā)的 provider
? ? ? ? G.策略名稱:區(qū)域敏感性策略
????????????對應的類名:ZoneAvoidanceRule
? ? ? ? ? ? ? ? 實現原理:
????????????1.以一個區(qū)域為單位考察可用性化漆,對于不可用的區(qū)域整個丟棄估脆,從剩下區(qū)域中選可用的provider
????????????2.如果這個 ip 區(qū)域內有一個或多個實例不可達或響應變慢,都會降低該 ip 區(qū)域內其他 ip 被選中的權重座云。
七疙赠、Ribbon更換輪詢策略
????1.創(chuàng)建Maven項目,添加依賴
????2.修改啟動類朦拖,在啟動類中添加開啟eureka客戶端的注解圃阳,并編寫方法創(chuàng)建要獲取的輪詢對象
????3.修改配置文件更換負載均衡策略
八、Ribbon設置點對點連接(教學演示璧帝,不推薦使用該方式)
????1.創(chuàng)建項目捍岳,添加依賴,去掉Eureka相關的配置睬隶,單獨添加ribbon的依賴
????2.修改application.properties/yml全局配置文件锣夹,禁用eureka,并指定具體的服務實例清單
????3.啟動測試