1. 程式人生 > 實用技巧 >尚籌網07分散式架構

尚籌網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;

}

註冊中心

遠端介面的宣告式呼叫之所以能夠實現,就是因為DubboFeign這樣的框架把服務的具體資訊存入了註冊中心,對程式設計師在上層進行的具體程式碼編寫全部遮蔽細節.

分散式架構優缺點

優點

模組化程度更高,有利於分工

有利於提升專案效能

  整體提升

  整個專案中每個模組都可以獨佔一臺伺服器,整個專案分配到的伺服器資源更多

  區域性提升

  由於對專案進行了拆分,所以可以有針對性的對專案中區域性模組進行專門的優化

  縱向:給當前模組所在的伺服器增加硬體資源

  橫向:給當前模組配置叢集

缺點

結構複雜

  呼叫關係複雜

  部署複雜

資料不一致問題

  Session不一致問題

  分散式事務問題

分散式和叢集

相同點

都需要使用多臺伺服器

不同點

分散式:每臺伺服器執行的模組不同--異構

叢集:每臺伺服器上執行模組相同--同構