更新時間:2020-03-23 10:11:10 來源:動力節(jié)點 瀏覽5461次
SOA架構
SOA全稱(ServiceOrientedArchitecture)中文意思為面相服務的架構,他是一種設計方法,輕重包含多個服務,服務之間通過相互依賴最終提供一系列的功能,一個服務通常以獨立的形式存在與操作系統(tǒng)進程中,各個服務之間通過網(wǎng)絡調用,
跟SOA相提并論的還有ESB(企業(yè)服務總線),簡單來說ESB就是管道,鏈接各個服務節(jié)點,為了集成不同系統(tǒng)和不同協(xié)議,ESB做消息的轉化解釋和路由的工作。讓不同的服務連通。
系統(tǒng)初期
系統(tǒng)后期
SOA架構,使用ESB
SOA解決的問題
1.系統(tǒng)集成,站在系統(tǒng)的角度,解決企業(yè)系統(tǒng)間的通信問題,把原先散亂無規(guī)劃的系統(tǒng)間的網(wǎng)狀結構,梳理成規(guī)劃,可治理的系統(tǒng)間星型結構。這一步需要引入一些產(chǎn)品,例如ESB,以及技術規(guī)范,服務管理規(guī)范,這一步解決的核心問題是有序
2,系統(tǒng)的服務化,站在功能的角度,把業(yè)務邏輯抽象成可復用可組裝的服務,通過服務的編排和實現(xiàn)業(yè)務的快速再生,目的:把原先固有的業(yè)務功能變?yōu)橥ㄓ玫臉I(yè)務服務,實現(xiàn)業(yè)務邏輯的快速復用,這步解決的核心問題是復用
3,業(yè)務的服務化,站在企業(yè)的角度,把企業(yè)只能抽象成可復用可組裝的服務,把原先職能化的企業(yè)架構轉為變?yōu)榉栈ǖ钠髽I(yè)架構,進一步提升企業(yè)的對外服務能力,前兩步都是技術層面來解決系統(tǒng)調用,系統(tǒng)功能復用的問題,第三步則是以業(yè)務驅動把一個業(yè)務單元封裝成一項服務,這一步解決的核心問題是高效。
微服務架構
微服務架構和SOA架構類似,微服務架構是在SOA上做的升華,微服務架構強調的一個重點是“業(yè)務需要徹底的組件化和服務化”,原有的單個業(yè)務系統(tǒng)會拆分為多個可以獨立開發(fā)設計運行的小應用。這些小應用之間通過服務完成交互和集成。
組件表示一個可以獨立更換和升級的單元,像PC機中的CPU內存,顯卡等獨立且可以更換升級而不影響其他單元,如果我們把PC機作為組件以服務的方式構建,那么這臺PC只需要維護主板和一些必要的外部設備,CPU,內存,硬盤都是以組件方式提供服務,PC需要調用CPU做計算機處理,只需要知道CPU這個組件的地址即可。
微服務特征
1.通過服務實現(xiàn)組件化
2.按業(yè)務能力來劃分服務和開發(fā)團隊
3.去中心化
4,基礎設施自動化(devops,自動化部署)
SOA架構和微服務架構的區(qū)別
1,微服務不在強調傳統(tǒng)的SOA架構里面比較重的ESB企業(yè)服務總線,同時SOA的思想進入到單個業(yè)務系統(tǒng)內部實現(xiàn)真正的組件化。
2,Docker容器技術的出現(xiàn),為微服務提供了便利的條件,比如更小的部署單元,每個服務都可以通過類似的Node或者Springboot等技術跑在自己的進程中,
3,SOA注重的系統(tǒng)集成方面,而微服務關注的是完全分離
首先了解下一致性的問題
強一致性:
以客戶端的角度來看,多并發(fā)訪問時更新過的數(shù)據(jù),要求數(shù)據(jù)能被后續(xù)的訪問看到,就是強一致性,例如數(shù)據(jù)庫的事務
弱一致性:
以客戶端的角度來看,多并發(fā)訪問時更新過的數(shù)據(jù),如果能容忍后續(xù)的訪問可以看到部分或者全部看不到,這就是弱一致性,例如:銀行轉賬(一般是兩小時或者24小時內到賬)
最終一致性
以客戶端的角度來看,多并發(fā)訪問時更新過的數(shù)據(jù),如果經(jīng)過一段時間后要求能訪問到更新后的數(shù)據(jù),這就是最終一致性,例如:銀行轉賬(一般是兩小時或者24小時內到賬)
最終一致性是弱一致性的一個特例,是若一致性中非常推崇的一種一致性模型,也是業(yè)界在大型分布式系統(tǒng)的數(shù)據(jù)一致性上比較用的多的模型
cap原理中,有三個要素
一致性(Consistency)
可用性(Availability)
分區(qū)容忍性(Partitiontolerance)
CAP原理指的是這三個要素最多只能同時實現(xiàn)兩點,不能三者兼顧,因此在設計分布式系統(tǒng)架構時,必須做出取舍,而對于分布式系統(tǒng)分區(qū)容忍性是最基本要求,否則就失去價值,因此設計分布式系統(tǒng),就是在一致性C和可用性A中去一個平衡,對于大多數(shù)web應用,其實并不需要強一致性,因此犧牲一致性而換取高可用性,是目前多數(shù)分布式系統(tǒng)設計的方向。
一致性:所有節(jié)點上的數(shù)據(jù)時刻保持同步
可用性:每個請求都能接受一個相應,無論響應成功或失敗
分區(qū)容錯:系統(tǒng)應該持續(xù)提供服務,即使系統(tǒng)內部(某個節(jié)點分區(qū))有消息丟失。比如交換機失敗,網(wǎng)址網(wǎng)絡被分成幾個子網(wǎng),形成腦裂,服務器發(fā)生網(wǎng)絡延遲或死機,導致某些server與集群中的其他機器失去聯(lián)系。
CAP并不是一個普適性的原理和知道思想,他僅僅使用于原子讀寫的NoSql場景中,并不適用于數(shù)據(jù)庫系統(tǒng)。
BASE理論
從前面的分析中知道,在分布式系統(tǒng)下,CAP并不適合數(shù)據(jù)庫事務(因為更新一些錯誤的數(shù)據(jù)而導致失敗,無論使用什么樣的高可用方案都是徒勞,因為數(shù)據(jù)發(fā)生了無法修正的錯誤)。此外XA事務()雖然保證了數(shù)據(jù)庫在分布式系統(tǒng)下的ACID(原子性,一致性,隔離性,持久性)特性,但也帶來了性能的代價,對于并發(fā)和響應時間要求比較高的電商平臺來說,很難接受的。
eBay嘗試了另外一條完全不同的路,放寬了數(shù)據(jù)庫事務的ACID的要求,提出一套名為BASE的新準則。BASE全稱是Basicallyavailablesoft-stateEventuallyConsistent系統(tǒng)基本可用軟狀態(tài)數(shù)據(jù)最終一致性,相對CAP來說,他大大的降低了我們對系統(tǒng)的要求。
Basicallyavailable(基本可用),在分布式系統(tǒng)出現(xiàn)不可預知的故障時,允許瞬時部分可用性
1.比如我們在淘寶上搜索商品,正常情況下是在0.5s內返回查詢結果,但是由于后端的系統(tǒng)故障導致查詢響應時間變成了2s
2.再比如數(shù)據(jù)庫采用分片模式,100W個用戶數(shù)據(jù)分在5個數(shù)據(jù)庫實例上,如果破壞了一個實例,那么可用性還有80%,也就是80%的用戶都可以登錄,系統(tǒng)仍然可用做技術人的指路明燈,做職場生涯的精神導師
3.電商大促時,為了應對訪問量激增,部分用戶可能會被引導到降級頁面,服務層也可能只提供降級服務。這就是損失部分可用性的體現(xiàn)
soft-state(軟狀態(tài)).表示系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并且這個中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性,也就是表示系統(tǒng)允許在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)同步過程中存在延時;比如訂單狀態(tài),有一個待支付、支付中、支付成功、支付失敗,那么支付中就是一個中間狀態(tài),這個中間狀態(tài)在支付成功以后,在支付表中的狀態(tài)同步給訂單狀態(tài)之前,中間會存在一個時間內的不一致。
Eventuallyconsistent(數(shù)據(jù)的最終一致性),表示的是所有數(shù)據(jù)副本在一段時間的同步后最終都能達到一個一直的狀態(tài),因此最終一致性的本質是要保證數(shù)據(jù)最終達到一直,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致
BASE理論的核心思想是:即使無法做到強一致性,但每個應用都可以根據(jù)自身業(yè)務特點,采用適當?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性
什么是分布式架構下的高可用設計
1,避免單點故障
a。負載均衡技術(failover,選址,硬件負載,軟件負載,去中心化負載(gossip(redis-cluster))
b。熱備linuxHA
c。多機房(同城災備,異地災備)
2,應用的高可用
a。故障監(jiān)控(系統(tǒng)監(jiān)控(cpu,內存)、鏈路監(jiān)控、日志監(jiān)控)自動預警
b。應用的容錯設計(服務降級,限流)自我保護能力
c。數(shù)據(jù)量(數(shù)據(jù)分片,讀寫分離)
分布式架構下的可伸縮設計
垂直伸縮提升硬件能力
水平伸縮增加服務節(jié)點(服務器)
加速靜態(tài)內容訪問速度的CDN
cdn是ContentDeliveryNetwork的縮寫,表示的事內容的分發(fā)網(wǎng)絡,CDN的作用是把用戶需要的內容分發(fā)到離用戶最近的地方,這樣可以是用戶能夠快速獲取所需要的內容。CDN其實就是一種網(wǎng)絡緩存技術,能夠把一些相對穩(wěn)定的資源放到距離用戶最近的地方,一方面節(jié)省整個廣域網(wǎng)的帶寬消耗,另一方面可以提升用戶的訪問速度,改進用戶的體驗,一般會把靜態(tài)資源文件(圖片,腳本,靜態(tài)頁面等)存放在CDN中
1.當用戶訪問網(wǎng)站時,URL經(jīng)過本地DNS解析,DNS系統(tǒng)會最終將域名的解析權交割CNAME指向的CDN專用DNS服務器
2.CDN的DNS服務器將CDN的全局負載均衡設備ip地址放回用戶
3,用戶想CDN的全局負載均衡設備泛起內容URL訪問請求
4,CDN全局負載均衡設備根據(jù)用戶IP地址,以及用戶請求的內容URL選在一臺用戶所屬區(qū)域的區(qū)域負載均衡設備,告訴用戶向這臺設備發(fā)起請求
5.區(qū)域負載均衡設備為用戶選擇一臺合適的緩存服務器提供服務,選擇的依據(jù)包括:根據(jù)IP地址,判斷一臺服務器距離用戶最近
根據(jù)用戶所請求的URL中攜帶的內容名稱,判斷那一臺服務器上有用戶所需要的內容,查詢各個服務器當前的負載狀況,判斷那一臺服務器尚有服務能力,基于上述條件綜合分析之后,區(qū)域負載均衡設備會向全局負載均衡設備返回一臺緩存服務器的IP地址
6.全局負載均衡設備會把服務器的IP返回給用戶
用戶向緩存服務器發(fā)起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端,如果這臺緩存服務器上并沒有用戶想要的內容,而區(qū)域均衡設備依然將他分配給用戶,那么這臺服務器就要向她的上一級緩存服務器請求內容,直至追溯到網(wǎng)站的源服務器將內容拉到本地。
什么情況下使用CDN
最適合那些不會經(jīng)常變化的內容,比如圖片js文件css
以上就是動力節(jié)點Java培訓機構小編介紹的“Java分布式系統(tǒng)框架教程,架構設計”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。