深入淺出SOA
前一陣換了份工作,來到新公司,恰好新同事問起SOA是什麽,我隨口說了幾點,其實自己以前研究過,不過並沒有詳細的整理過,說的比較模糊,恰好周末,拿出點時間整理下以前對SOA的認知。
SOA是什麽?SOA全英文是Service-Oriented Architecture,中文意思是中文面向服務編程,是一種思想,一種方法論,一種分布式的服務架構(具體可以百度)。
用途:SOA解決多服務淩亂問題,SOA架構解決數據服務的復雜程度,同時SOA又有一個名字,叫做服務治理。
通過一個系統我們看一下架構的演變過程(由統一到分布式):
當我們的項目比較小時,我們只有一個系統,並且把他們寫到一起,放在一個服務器上,但是隨著平臺越來越大,數據量越來越大,我們不得不通過分庫,把多個模塊的數據庫分別放在對應得服務器上,每個模塊調用自己的子系統即可。
隨著我們系統的進一步復雜度的提示,我們不得不進一步對系統的性能進行提升,我們將多個模塊分成多個子系統,多個子系統直接互相調用(因為SOA一般用於大型項目,比較復雜,所以一般總系統不會再集成,會拆分多個,分別做成服務,相互調用)。當我們的電商UI進行一個下訂單的任務時,多個服務直接互相調用,系統通過數據總線,分別調用對於的子系統即可。
企業數據總線:企業數據總線不是對多個子模塊的集成,他在這裏充當數據通道的作用,數據總線不關心業務,數據總線根據給的地址和協議去調服務,上端不關心服務在哪裏是什麽,只找數據總線。
上面幾個圖應該算是比較清楚了,隨著業務的深入,我們不得不對系統進行調整,分別是對數據和業務的拆分,最後每個子系統對面提供服務。
還要提的一點就是下面那個圖,下面的IP庫以及幾個子系統是公共服務,分別向上提供功能,也是SOA方法論的一部分。
二、SOA主要的使用場景,如下圖:
通過上面的圖我們可以看出,多個子系統直接相互交互,相互調用非常淩亂,這樣我們就很不爽,所以我們就用到了我們的SOA架構,SOA又叫服務治理,SOA就是幫助我們把服務之間調用的亂七八糟的關系給治理起來,然後提供一個統一的標準,把我們的服務治理成下圖所示,以前我們的服務是互相交互,現在是只對數據總線進行交互,這樣系統就變得統一起來。
統一標準:各系統的協議、地址、交互方式。
新的交互方式:各個系統分別根據統一標準向數據總線進行註冊,各子系統調用其他子系統時,我們並不關心如果找到其他子系統,我們只招數據總線,數據總線再根據統一標準找其他子系統,所以數據總線在這裏充當一個只路人的作用。
SOA的好處:
1、降低用戶成本,用戶不需要關心各服務之間是什麽語言的、不需要知道如果調用他們,只要通過統一標準找數據總線就可以了。
2、程序之間關系服務簡單
3、識別哪些程序有問題(掛掉)
缺點:提示了系統的復雜程度,性能有相應影響。
三、數據總線是什麽?
其實我在上面寫了,數據總線是起到調度服務的作用,數據總線不是集成服務,數據總線更新一個調度框架,每個服務需要根據約定向數據總線註冊服務,那麽如何註冊那?其實數據總線就像一個字典結構,
數據總線裏面一個key對於一個value,key指的是服務名,value則是服務的調度方式,還有一點需要說明的是,數據總線只是指路人,服務是不經過數據總線的,如上圖的黃色線的路徑。
數據總線通過域名解析實現:一個域名綁定多臺服務器,ajax也可以,dns也可以,解析域名嘛。
其實數據總線還有一些高級應用,比如心跳檢測,實現負載均衡等等,就不細說了,目前應用數據總線的有阿裏的dubbo,還有zookeeper。
基本上SOA的架構體系我的理解就是這樣,上面配合圖基本上也算清晰,如果哪裏有不對的地方,歡迎大牛指出,大家可以互相探討,相互學習。
深入淺出SOA