1. 程式人生 > >SOA與中間件

SOA與中間件

分布式 後端服務 分布式系 -s end class ace div dbm

在分布式系統中,有一個基礎的理論 CAP,Consistency一致性 Availability可用性 Partition Tolerance分區容忍性,任何一個系統都不可能同時滿足這三個條件(高富帥或白富美很難同時滿足),結構化存儲(關系型數據庫 RDBMS)滿足的是CA,半結構化存儲(MongoDB HBase)滿足的是CP。但是可以看出,它們都需要滿足一致性的要求。

在分布式系統中,組件部署在多臺機器上,它們通過網絡相互協同工作,共同完成系統的使命。在分布式系統中,將各個功能單元當成服務來對待,這就是SOA,面向服務的架構。很明顯,Openstack采用的就是SOA架構,因為它提供了很多的服務,供消費者(虛擬機)去使用,例如Neutron網絡服務,Nova計算服務,Cinder塊存儲服務等。在分布式系統中,分布式事務是非常重要的,如果要完成一個操作,可能需要遠程調用好幾個服務,每個服務中都有獨屬於它的事務,如何保證這些事務鏈要麽執行成功,要麽有某個事務執行失敗就全體回滾呢?一種眾所周知的方式就是兩段式提交,系統中有一個協調者,負責協調所有的參與者(服務)。在第一階段,協調者喊預備,此時所有參與者都會去執行相應的事務,並將Undo和Redo信息記入事務日誌中,但是都不提交,而是給協調者返回一個消息,反饋是否都準備好了;在第二個階段,協調者會判斷,如果都準備好了,那麽就給所有參與者發出指令,使它們全部提交。相反,如果某個服務因為操作失敗,給協調者返回未就緒的消息,那麽所有的事務都會回滾。兩段式提交其實也是有缺點的,在協調者發出預備消息後,如果某個參與者沒有接受到消息,那麽協調者就會一直等待(阻塞)。所以後面又引入了三段式提交,三段式提交比較晦澀難懂,在實際用的時候結合實際情況再好好研究下。

SOA中有一個服務註冊中心(基於ZooKeeper實現),所有的服務都會在這裏進行註冊,表明自己提供了哪些服務,訪問的Endpoint是什麽。當一個請求到來時,會先負載均衡,分流到某個具體的服務器,服務器在調用後端服務的時候,會先去服務註冊中心獲取數據,緩存到本地並查找服務地址,最後才是真正的遠程服務調用(RPC SOA的具體實現方式)。

技術分享

在分布式系統中,大量使用了中間件技術,幾乎每個服務的內部都采用消息中間件,使得各個業務組件解耦,異步調用大大提高了系統的性能。

SOA與中間件