SOA的浅析
曾今SOA的概念猶如今日“云計(jì)算、大數(shù)據(jù)”一樣,被炒得火熱,不少企業(yè)便紛紛響應(yīng),并宣稱會(huì)擁抱和實(shí)施SOA。而事實(shí)上,業(yè)界出現(xiàn)了兩種極端:一種是由于各類文章和書(shū)籍關(guān)于SOA的描述往往太過(guò)抽象,再加上各大廠商的呼吁,使得SOA往往顯得“高大上”,令不少企業(yè)和架構(gòu)師們望而卻步。第二種恰好相反,有部分人卻認(rèn)為SOA無(wú)非是“新瓶裝舊酒”。
?
個(gè)人理解,SOA在宏觀上確實(shí)太復(fù)雜,因?yàn)樗婕暗降牟粌H僅是技術(shù)和架構(gòu)本身。而從技術(shù)的視角來(lái)看,并非難以落地。
?
SOA全稱“面向服務(wù)架構(gòu)”,它提供的是一種架構(gòu)風(fēng)格和理念,而并非是一種技術(shù)或者產(chǎn)品。并不是說(shuō)項(xiàng)目中用了WebService、WCF、Hessian、RMI之類的就是SOA了。
通俗點(diǎn)來(lái)講,SOA提倡將不同應(yīng)用程序的業(yè)務(wù)功能封裝成“服務(wù)”并宿主起來(lái),通常以接口和契約的形式暴露并提供給外界應(yīng)用訪問(wèn)(通過(guò)交換消息),達(dá)到不同系統(tǒng)可重用的目的。
流行的WebService等可以看作是實(shí)現(xiàn)SOA基礎(chǔ)設(shè)施的技術(shù)方法。當(dāng)然,實(shí)踐SOA不僅需要解決服務(wù)調(diào)用的問(wèn)題,還包括服務(wù)編排、服務(wù)治理、服務(wù)路由、服務(wù)監(jiān)控等一系列的問(wèn)題。在大型分布式系統(tǒng)中,SOA被廣泛實(shí)踐,但是在不同的應(yīng)用場(chǎng)景中,設(shè)計(jì)方法也大不相同。
?
SOA是一個(gè)組件模型,它能將不同的服務(wù)通過(guò)定義良好的接口和契約聯(lián)系起來(lái)。服務(wù)是SOA的基石,在開(kāi)始服務(wù)設(shè)計(jì)和SOA實(shí)踐之前,有必要先了解服務(wù)的概念以及服務(wù)的常見(jiàn)特性。
?
?
何為服務(wù)
服務(wù)的概念非常寬泛,在宏觀上,服務(wù)的理解是“為他人做事,滿足他人需要,而且通常是不以實(shí)物形式提供勞動(dòng)的…”。在SOA系統(tǒng)中,服務(wù)指的是應(yīng)用程序的功能單元,它通常體現(xiàn)了業(yè)務(wù)功能。服務(wù)是一種抽象,它向服務(wù)使用者隱藏了服務(wù)內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。根據(jù)服務(wù)設(shè)計(jì)的基本原則,服務(wù)可能會(huì)具有以下特性:
l? 自治(理)性?
服務(wù)應(yīng)該是獨(dú)立部署和運(yùn)行存在的,且邊界清晰,應(yīng)盡量減少對(duì)外部的引用和依賴。
l? 粗粒度
服務(wù)調(diào)用是需要開(kāi)銷的,這也是實(shí)現(xiàn)松耦合的分布式系統(tǒng)必須付出的代價(jià)。因此,應(yīng)盡量通過(guò)一次服務(wù)調(diào)用傳輸所有需要的數(shù)據(jù),而不是分多次去調(diào)用服務(wù)和組裝數(shù)據(jù)。
l? 可見(jiàn)性
服務(wù)是對(duì)外提供的,必須在某公共的地方可搜尋和發(fā)現(xiàn),且服務(wù)要有必要的描述。
l? 無(wú)狀態(tài)
服務(wù)不應(yīng)該依賴于其他服務(wù)的上下文、會(huì)話等,盡量減少不必要的狀態(tài)管理流程所帶來(lái)的資源消耗。但是,對(duì)于業(yè)務(wù)流程服務(wù)而言,狀態(tài)數(shù)據(jù)是不可避免的。
l? 冪等性
當(dāng)消費(fèi)者調(diào)用服務(wù)后,服務(wù)調(diào)用可能會(huì)有“成功、失敗、超時(shí)”這三種狀態(tài),當(dāng)服務(wù)并沒(méi)有最終響應(yīng)完成時(shí),消費(fèi)者可以嘗試反復(fù)地調(diào)用服務(wù),這樣仍不會(huì)影響到最終結(jié)果。
l? 可重用性
服務(wù)應(yīng)該是可以被重用的,相同功能應(yīng)可以調(diào)用相同的服務(wù),這也是軟件設(shè)計(jì)的原則。
l? 可組合
服務(wù)是可以被當(dāng)作成一個(gè)步驟的,服務(wù)也可以調(diào)用其它的服務(wù)。這樣能夠靈活的組合。
?
有關(guān)服務(wù)的“粗粒度、無(wú)狀態(tài)、冪等性”等特性,一直是飽受爭(zhēng)議的話題,可謂見(jiàn)仁見(jiàn)智。這里有必要說(shuō)明下,這些特性并不是服務(wù)不可或缺的,應(yīng)當(dāng)在實(shí)踐中根據(jù)需求來(lái)取舍。
?
?
SOA所面臨的問(wèn)題
?
SOA架構(gòu)將公共的業(yè)務(wù)拆分出來(lái),形成可共用的服務(wù),最大程度的保障了代碼和邏輯的復(fù)用,避免了系統(tǒng)的重復(fù)建設(shè),并且讓?xiě)?yīng)用程序的部署找到了一種持續(xù)可擴(kuò)展的方案,給應(yīng)用抗負(fù)載能力帶來(lái)了質(zhì)的飛躍。
SOA架構(gòu)所面臨的一大問(wèn)題就是如何解決集成服務(wù)應(yīng)用普遍存在的一致性問(wèn)題,舉例來(lái)說(shuō),同時(shí)調(diào)用多個(gè)服務(wù),當(dāng)其中一個(gè)服務(wù)調(diào)用失敗時(shí),其他服務(wù)已經(jīng)處理執(zhí)行的結(jié)果該如何進(jìn)行回滾,這在單機(jī)本地調(diào)用的情況下使用事務(wù)比較好處理,而分布式環(huán)境下的事務(wù)將問(wèn)題復(fù)雜化,并且性能開(kāi)銷難以承受,因此,只有在極端情況下才會(huì)考慮強(qiáng)一致性,一般情況下更多的關(guān)注最終一致性。另外一個(gè)就是安全問(wèn)題,面向企業(yè)的平臺(tái)級(jí)的SOA架構(gòu),需要對(duì)參數(shù)傳遞、響應(yīng)內(nèi)容以及各種用戶私有信息的交互,有著更嚴(yán)格的且特殊的安全需求,如何構(gòu)建一個(gè)安全的SOA架構(gòu)體系,也給技術(shù)人員帶來(lái)了很大的挑戰(zhàn)。
?
在講了很多“大而空”的理論之后,估計(jì)很多人要拍磚了。后面文章中將會(huì)講一些干貨,更貼合實(shí)際應(yīng)用。先預(yù)告一下后面文章:
1.SOA之基于服務(wù)總線的設(shè)計(jì)
(從設(shè)計(jì)的角度講述服務(wù)總線--比較適合企業(yè)級(jí)系統(tǒng)集成的設(shè)計(jì)方式)
2.大型分布式網(wǎng)站的演變歷程
(隨著網(wǎng)站快速發(fā)展,解決業(yè)務(wù)復(fù)雜化、大流量、穩(wěn)定性等問(wèn)題的必經(jīng)之路。正所謂“天下大勢(shì),分久必合,合久必分”。
重點(diǎn)不是講負(fù)載均衡這些手段,而是設(shè)計(jì)層面的“集中式”到“分布式”)
3.SOA架構(gòu)體系之通信協(xié)議和遠(yuǎn)程調(diào)用(RPC)
(講解具體的實(shí)現(xiàn)技術(shù),對(duì)比各自優(yōu)缺點(diǎn))
4.SOA之基于服務(wù)框架的應(yīng)用
(服務(wù)化實(shí)踐--介紹流行的服務(wù)框架,重點(diǎn)演示一種服務(wù)框架的使用)
?
轉(zhuǎn)載于:https://www.cnblogs.com/dinglang/p/4366891.html
總結(jié)
- 上一篇: [转载]Windowsnbsp;Serv
- 下一篇: linq to entity 左联接 右