尚籌網07分散式架構
架構
專案的主體結構
1、實現業務功能的工程模組
2、為了應對業務功能之外的需求、壓力給專案中增加的中介軟體等其他系統
3、為了讓整個專案能夠順暢、高效的執行,需要把業務功能和中介軟體以及其他系統有效的整合起來.
單一架構
概念
一個工程-》一個war包-》執行在一個Tomcat上
All in one
單機版
......
演變
單體應用架構(水平)
把原來的一個工程拆分成多個模組分別進行開發,一定程度上提高了模組化程度.
Web應用程式發展的早期,大部分web工程將所有功能模組放在一個web容器
優點:
1、所有的功能整合在一個專案工程中
2、專案架構簡單,前期開發成本低,週期短,小型專案首選
缺點:
1、全部功能整合在一個工程中,對於大型專案不易開發、擴充套件及維護
2、系統性能擴充套件只能通過擴充套件叢集節點,成本高、有瓶頸
垂直應用架構(垂直)
隨著訪問量增大,單一應用增加機器帶來的加速度越來越小,因此考慮將應用拆分成不想幹的幾個應用,以提升效率
優點
1、專案架構簡單,前期開發成本低,週期短,小型專案的首選
2、通過垂直拆分,原來的單體專案不至於無限擴大
3、不同的專案可採用不同的技術
缺點
1、全部功能整合在一個工程中,對於大型專案不易開發、擴充套件及維護
2、系統性能擴充套件只能擴充套件叢集節點,成本高、有瓶頸
開發、擴充套件、維護、成本
網際網路時代的新挑戰
高可擴充套件性
專案設計架構的時候要考慮到功能的持續更新.
高效能
提高響應速度,系統處理一個請求的時間儘可能短,減少使用者等待時間,優化使用者體驗.
高併發
使用者訪問量非常大時,會增加系統的併發壓力.
分散式架構
概念
一個專案拆分成多個模組專案,每個模組工程都是一個war包,執行在各自的tomcat上,模組之間可以通過網路互相呼叫.
方法遠端呼叫
本地呼叫
在同一個專案內部,不經過網路直接呼叫方法.不管是我們自己宣告的方法還是第三方jar包中的方法都算本地呼叫.
遠端呼叫
意義
1、對內:讓我們能夠實現分散式架構
2、對外:讓我們能夠呼叫第三方介面
a)傳送簡訊
b)查詢物流
c)執行支付
d)天氣預報
e)....
思想
SOA
Service oriented Archiecture面向服務的架構
在整個系統中,把相同的功能抽取出來作為一個服務,供系統中的其他模組呼叫,提高程式碼的複用性.
微服務
微服務強調的特徵:獨立、可部署
技術演進
webService
解決應用程式之間的跨平臺訪問問題.基於SOAP/WSDL協議,讓應用程式之間可以進行遠端通訊.
Dubbo+Zookeeper
Dubbo:基於RPC的遠端過程呼叫框架
Zookeeper:基於樹形目錄結構、非同步通知機制的註冊中心.
SpringBoot+SpringCloud
SpringBoot:開發具體微服務,使用“場景啟動器”快速整合第三方中介軟體
SpringCloud:提供的微服務架構整體管理的一站式解決方案
Eureka:註冊中心
Ribbon:客戶端負載均衡
Feign:遠端介面的宣告式呼叫
Hystrix:服務的熔斷、降級、監控
Zuul:閘道器
記憶:惡人副會長、註冊客戶均衡遠端訪問服務閘道器
相關概念
介面
一個以“介面”為功能代表的分散式環境下的服務模組.
遠端介面的宣告式呼叫
@Controller Public class EmpController{ //想呼叫本地方法一樣呼叫遠端方法.所有遠端方法呼叫時產生的請求、響應等細節全部被框架遮蔽了 @Autowired Private EmpRemoteService empRemoteService; }
註冊中心
遠端介面的宣告式呼叫之所以能夠實現,就是因為Dubbo或Feign這樣的框架把服務的具體資訊存入了註冊中心,對程式設計師在上層進行的具體程式碼編寫全部遮蔽細節.
分散式架構優缺點
優點
模組化程度更高,有利於分工
有利於提升專案效能
整體提升
整個專案中每個模組都可以獨佔一臺伺服器,整個專案分配到的伺服器資源更多
區域性提升
由於對專案進行了拆分,所以可以有針對性的對專案中區域性模組進行專門的優化
縱向:給當前模組所在的伺服器增加硬體資源
橫向:給當前模組配置叢集
缺點
結構複雜
呼叫關係複雜
部署複雜
資料不一致問題
Session不一致問題
分散式事務問題
分散式和叢集
相同點
都需要使用多臺伺服器
不同點
分散式:每臺伺服器執行的模組不同--異構
叢集:每臺伺服器上執行模組相同--同構