日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

為何不讓SOA變得簡(jiǎn)單?

系統(tǒng) 1814 0

最近, SOA 成為跨技術(shù)平臺(tái)(特別是 J2EE .Net )軟件開發(fā)中的熱門話題。然而,如果我們比較一下圍繞著 SOA 的宣傳和 90 年代后期 EJB 和服務(wù)件的宣傳,你會(huì)發(fā)現(xiàn)這沒有什么區(qū)別。 1998 年, EJB 帶領(lǐng)互聯(lián)網(wǎng)的潮流并推翻了以 CORBA 為統(tǒng)治和由 PB/Oracle Forms 和其他主導(dǎo)的 CS 架構(gòu)標(biāo)準(zhǔn)。 SOA ,作為一種新技術(shù)的術(shù)語,還不具有那么大的破壞性。 SOA 只是一種想法 / 概念和一組構(gòu)建應(yīng)用功能的最佳實(shí)踐。相反地, J2EE 是一套完整地開發(fā)技術(shù),可以用來設(shè)計(jì)所有的東西。

  我對(duì) SOA 的主要關(guān)注在于企業(yè)級(jí) Java 應(yīng)用通用的問題:復(fù)雜性。次要關(guān)注的是 SOA 通常作為一種解決方案被用來跨越 J2EE 應(yīng)用各層,雖然這好像沒有什么意義。本文提取出 SOA 的基本元素并介紹他們。一旦我們理解這些,就可以理解 SOA 系統(tǒng)中的更復(fù)雜的組件了。最后,我們可以了解一下 SOA J2EE 應(yīng)用帶來的實(shí)際價(jià)值,同時(shí)并不增加無用的復(fù)雜性。
本文分為個(gè)部分:首先,提出了我對(duì) SOA 作為一種標(biāo)準(zhǔn)參考點(diǎn)的定義。其次,檢查那些主要的軟件工程問題通過 SOA 可以解決而不是用 SOA 來檢查。再次,會(huì)給出基于復(fù)雜需求的 SOA 的建議分類。最后,給出三種主要 SOA 分類的建議實(shí)現(xiàn)。

SOA 是什么?

SOA 有很多定義。下面是我的定義:
SOA 是宏級(jí)別的應(yīng)用到應(yīng)用架構(gòu)級(jí)的設(shè)計(jì)模式:
1 、可選地暴露應(yīng)用的功能作為一組離散的組件。
2 、使這些組件能被用來構(gòu)建更復(fù)雜的組件和應(yīng)用。
3 、僅包含基于消息的組件內(nèi)部通訊。

我還遺漏了什么呢?還有一些方面,包括:
1 、安全性
2 、事務(wù)
3 、狀態(tài)或無狀態(tài)會(huì)話
4 、消息數(shù)據(jù)
5 、消息特性
6 、消息協(xié)議
7 、消息內(nèi)容
8 、具體技術(shù)實(shí)現(xiàn)

  這些方面也是重要的,但不是主要的。我的定義提取了 SOA 的核心規(guī)則,但沒有拋棄概念本身。
  注意我在定義中引用了設(shè)計(jì)模式。我認(rèn)為這是關(guān)鍵。 SOA 不是什么新技術(shù),事實(shí)上,其最吸引人的一個(gè)地方是可以利用現(xiàn)有的技術(shù)并使其泛出新的光芒。對(duì)我來說, SOA 更像是一幅藍(lán)圖,一組最佳實(shí)踐,或者說是一個(gè)定義下一代的軟件應(yīng)用應(yīng)該如何設(shè)計(jì)和實(shí)現(xiàn)的規(guī)范。

  基礎(chǔ) SOA 方法

  從上面的定義,我們應(yīng)該可以標(biāo)識(shí)出組成 SOA 應(yīng)用的必須提供的軟件服務(wù)的最小集合。簡(jiǎn)潔地說,這些服務(wù)是:

1 、消息層,允許消息通過特定的協(xié)議傳輸和接收。用 SOA 的說法,這一層稱為企業(yè)服務(wù)母線或簡(jiǎn)寫為 ESB
2 、一個(gè)組件模型,如應(yīng)用必須遵循的發(fā)送和接收來消息母線的消息的最小約定。

  取決于你自己的業(yè)務(wù)需求,這兩種服務(wù)可以極度的擴(kuò)大,但在核心來說,消息層和通用組件模型就代表了 SOA

  注意,我沒有在 SOA 的定義中包含自動(dòng)定位和發(fā)現(xiàn)服務(wù)(在大部分 J2EE 場(chǎng)景中,這是很有殺傷力的)。在 UDDI (通用描述 / 發(fā)現(xiàn) / 集成協(xié)議)后的原始想法是認(rèn)為企業(yè)最終會(huì)使用軟件服務(wù)(通過一個(gè)大的基于元數(shù)據(jù)搜索服務(wù)倉庫)來購買和銷售。這個(gè)美夢(mèng)至少也得十年后,也許永遠(yuǎn)不會(huì)實(shí)現(xiàn),因?yàn)槿藗兪切枰龅膶?shí)際的業(yè)務(wù)而不是軟件。

J2EE 應(yīng)用不需要自動(dòng)發(fā)現(xiàn)服務(wù),例如登錄或支付服務(wù),這些服務(wù)應(yīng)該在初始化時(shí)設(shè)置。不要誤導(dǎo)我,如果這些服務(wù)的實(shí)現(xiàn)不應(yīng)該硬編碼到應(yīng)用中,那么你也不需要 SOA 來解決這些問題了。

  為什么要 SOA

  最近的兩撥企業(yè)級(jí)軟件開發(fā)的主浪潮是 C/S 架構(gòu)和多層架構(gòu)。雖然多層架構(gòu)提供了 C/S 架構(gòu)中布署 / 平臺(tái)支持 / 性能 / 伸縮性上更好的效果,但兩者都沒有解決一個(gè)關(guān)鍵的企業(yè)級(jí)計(jì)算機(jī)領(lǐng)域的軟件工程問題:如何重用軟件功能。作為軟件開發(fā)人員和架構(gòu)師,我們始終沒有完全解決軟件重用的問題。再往下看,你會(huì)看到我也不認(rèn)為 SOA 能解決這個(gè)問題。然而,我認(rèn)為軟件重用是 SOA 出現(xiàn)的最重要原因(至少在 J2EE 應(yīng)用中是這樣)。

  其他 SOA 使用現(xiàn)有的 Jini 和風(fēng)格計(jì)算。基于 Jini 環(huán)境的特點(diǎn)如下:
1 、自動(dòng)發(fā)現(xiàn)組件 / 服務(wù)
2 、自愈的

  然而,這些特性并沒有與 J2EE 應(yīng)用等同的重要性。使用 JDBC 配置數(shù)據(jù)庫的位置只需要一次。我期望數(shù)據(jù)庫來提供容錯(cuò)和除錯(cuò)功能,而且我不需要 J2EE 應(yīng)用來嘗試當(dāng)產(chǎn)品實(shí)例當(dāng)機(jī)時(shí)自動(dòng)發(fā)現(xiàn)其他的數(shù)據(jù)庫實(shí)例。另一方面,對(duì)一個(gè)有 2000 個(gè)工作站的辦公室來說自動(dòng)發(fā)現(xiàn)一個(gè)彩色打印機(jī)是一件好事,這也是符合 Jini 硬件的一個(gè)關(guān)鍵好處。

  平等地說,在一個(gè)真實(shí)的全球網(wǎng)格計(jì)算環(huán)境中,自動(dòng)發(fā)現(xiàn)和枚舉計(jì)算資源來解決問題是基礎(chǔ)框架的關(guān)鍵部分,但這不是一個(gè) J2EE 環(huán)境,那兒硬件預(yù)先計(jì)算的以便在定義用戶數(shù)據(jù)和服務(wù)性能之間平衡。

  我的觀點(diǎn)是, SOA 對(duì)不同的需求需要不同對(duì)待。在本文中,我只關(guān)心 J2EE 架構(gòu)方面的 SOA ,而我認(rèn)為這意味著功能重用。其他從 J2EE 觀點(diǎn)來看 SOA 的優(yōu)點(diǎn)還有:
1 、松耦合的組件,這是軟件設(shè)計(jì)中重要的部分
2 、引入 ESB 作為消息層意味著強(qiáng)制 面向接口編程,而不是實(shí)現(xiàn)
3 、異步消息增加了應(yīng)用的伸縮性

  讓我們通過問三個(gè)特定的問題來看一下軟件重用中更細(xì)節(jié)的問題:
1 、為什么重用軟件是重要的?
2 SOA 是如何提出解決軟件重用問題的?
3 、是否 SOA 的允諾能夠使軟件重用應(yīng)用到現(xiàn)實(shí)中?

  首先,軟件重用是重要的原因如下:
1 、時(shí)間和花費(fèi)上的效率 能夠重用已經(jīng)的組件來滿足陳述的業(yè)務(wù)需求將節(jié)省大量的時(shí)間和金錢。
2 、重要的特性包括但不限于如穩(wěn)定性 / 性能 / 可管理性 / 文檔 / 可配置性。因?yàn)橐粋€(gè)組件被重用的次數(shù)越多,對(duì)這個(gè)組件的投資也越多,他的優(yōu)勢(shì)也越多。
3 良好設(shè)計(jì)的可重用框架無論在哪里被使用都擁有正面的效果,而且你愿意的話可以封裝更好的想法來解決通用問題。

  因此我們需要重用性。那么最簡(jiǎn)單的方法是什么呢?就是打包軟件作為一組良好定義的組件來滿足離散的功能需求。然后,如果其他應(yīng)用需要相同的組件,他就可以重用了。還有些細(xì)節(jié)需要考慮,如如何配置,但這些細(xì)節(jié)已經(jīng)偏離了主題:重用任何語言編寫的代碼,那些代碼必須被設(shè)計(jì)成一組離散的組件或重構(gòu)為集合。

  其次, SOA 是如何解決軟件重用的問題呢?是通過基于組件模型來構(gòu)建和引入一個(gè)重要的強(qiáng)制約定:組件間的通訊要通過下發(fā)到 ESB 的消息來進(jìn)行,而這就確保了松耦合。實(shí)際上,最廣泛布署的 SOA 實(shí)現(xiàn) —Web services 可以通過使消息層技術(shù)中性來縫合用不同語言開發(fā)的組件。

  最后, SOA 對(duì)軟件重用的允諾真有實(shí)際意義嗎?不,我想念如果 SOA 1945 (大概是和 ENIAC 同時(shí)代吧)被發(fā)明的話確實(shí)可以解決軟件重用的問題。但沒有,現(xiàn)存的大量代碼是用不同的開發(fā)語言編寫的,有 COBOL/C/C++/C# 和其他語言。這些代碼沒有作為離散的組件來編寫,因此也沒有 SOA 來解決。事實(shí)上,我認(rèn)為有大量的 SOA 項(xiàng)目的工作是花費(fèi)在重構(gòu)相同的代碼庫。

  現(xiàn)在,讓我們來看一下對(duì)于 J2EE 應(yīng)用 SOA 可以解決的一些問題。

SOA 缺點(diǎn)

SOA 缺點(diǎn)包括下面三方面:
1 SOA 自身的缺點(diǎn),主要當(dāng)前還沒有成熟的實(shí)現(xiàn)
2 SOA 的復(fù)雜性
3 廠商對(duì) SOA 在更廣泛的 J2EE 產(chǎn)品和方案中的位置

  那么我們就心批判的眼光來看一下:

· 并沒有像 J2EE 規(guī)范那樣有自己的正式規(guī)范。雖然有一個(gè)發(fā)布的規(guī)范,但那個(gè)太復(fù)雜了并且沒有遵循 80:20 法則( 80% 的應(yīng)用需要簡(jiǎn)單的 SOA ,只有 20% 的應(yīng)用需要更強(qiáng)大而復(fù)雜的功能)
· 有狀態(tài)會(huì)話依然存在廣泛爭(zhēng)議而且現(xiàn)在還沒有被 SOA 的缺省實(shí)現(xiàn)( Web services )所解決。而無狀態(tài)會(huì)話已經(jīng)是完全支持了。
· 由于缺省正式或推薦的規(guī)范, Web services 已經(jīng)成為許多人眼里 SOA 的代名詞了,但 Web services 通常是過于強(qiáng)大了。
·SOA 增加了復(fù)雜性。可能你更喜歡硬編碼和緊耦合,而不需要 XML 配置文件來運(yùn)行簡(jiǎn)單的應(yīng)用。
·SOA 兼容的應(yīng)用對(duì)本身來說沒有什么意義。其商業(yè)價(jià)值來自于能夠提供離散的功能塊 , 通過 SOA 被用于其他的應(yīng)用和模塊。例如,如果你對(duì)訂單的較驗(yàn)規(guī)則是通過 JSP 頁面中的 Java 代碼來實(shí)現(xiàn)的,那么你還需要重構(gòu)代碼將其放到服務(wù)端對(duì)象中以便于 SOA 調(diào)用 ,— 但很多廠商并沒有提及這一點(diǎn)。
· 在某些情況下,廠商將 SOA 作為網(wǎng)頁應(yīng)用框架的替代者!我認(rèn)為, WAF SOA 定義功能中的消費(fèi)者,只是作為一種補(bǔ)充,而不存在竟?fàn)庩P(guān)系。
· 與廠商提供的相反,一些應(yīng)用根本不需要 SOA 而只需要簡(jiǎn)單使用 MVC 框架就可以了。這很短視嗎?我不這么認(rèn)為,即使 SOA 的特性是需要的,在上面的情況下,最重要的部分是用來服務(wù)于企業(yè)服務(wù)總線的良好定義的業(yè)務(wù)邏輯層,而不是 ESB 自身。

  雖然我不認(rèn)為 SOA 是一顆解決現(xiàn)有和新建應(yīng)用中問題的銀彈,但我相信 SOA 在他相應(yīng)的位置上還是有其內(nèi)在的價(jià)值的。現(xiàn)在讓我們來看一下在應(yīng)用中增加有效的 SOA 解決方案是如何提供體現(xiàn)其商業(yè)價(jià)值的。

  建議的 SOA 分類

  現(xiàn)在,你應(yīng)該對(duì)我保持事物的簡(jiǎn)單性的熱忱表示感激吧。但我本質(zhì)上并不是簡(jiǎn)單論者,我是一個(gè)實(shí)用主義者。對(duì)軟件項(xiàng)目來說,我認(rèn)為實(shí)用主義是一方面要平衡項(xiàng)目的商業(yè)和實(shí)際價(jià)值,另一方面是使用軟件設(shè)計(jì)上的最佳實(shí)踐。簡(jiǎn)單的說,就是在我們現(xiàn)有條件下構(gòu)建我們所能創(chuàng)建的最好的系統(tǒng)。

  一個(gè)實(shí)用主義的好例子來自于民間的工程歷史。在修鐵路時(shí)常修木橋,而我們知道用鐵橋會(huì)更好。當(dāng)鐵路公司的股東想使鐵路盡快開工而且初始投資要有限制時(shí),他就是這是最好的工程方案了。是否聽起來耳熟?同樣的原則可以應(yīng)用于軟件工程。

  根據(jù)實(shí)用主義的精神,我建議將 SOA 分為三個(gè)級(jí)別:簡(jiǎn)單 / 中等 / 復(fù)雜,衡量標(biāo)準(zhǔn)是需要滿足的業(yè)務(wù)需求。如果你需要簡(jiǎn)單的 SOA ,那么不要浪費(fèi)時(shí)間和金錢在復(fù)雜的 SOA 上。

  級(jí)別 1 :簡(jiǎn)單的 SOA

  樣例實(shí)現(xiàn):
1 、使用自己的 POJO 隊(duì)列來實(shí)現(xiàn)發(fā)送和接收消息。
2 、帶有 MDB (消息驅(qū)動(dòng) Bean )的 JMS 隊(duì)列 / 主題作為消息的消費(fèi)者。

  這里涵蓋的關(guān)鍵 SOA 概念有:
1 、企業(yè)服務(wù)總線
2 、生產(chǎn)者 / 消費(fèi)者的組件模型。

為何不讓SOA變得簡(jiǎn)單?


<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 326.25pt; HEIGHT: 233.25pt" alt="" type="#_x0000_t75"><imagedata o: src="file:///C:%5CDOCUME~1%5CWast%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></imagedata></shape>

Figure 1. Schematic illustrating the core components of the simple SOA. Click on thumbnail to view full-sized image.

  級(jí)別 2 :中等的 SOA

  樣例實(shí)現(xiàn):
1 、帶有 MDB JMS 隊(duì)列 / 主題作為消息的消費(fèi)者,并附加其他特性如安全性 / 事務(wù) /JMS 元數(shù)據(jù)屬性等
2 Web services ,例如 Apache Axis

  這里涵蓋的關(guān)鍵 SOA 概念在包含簡(jiǎn)單 SOA 外還有:
1 、用來增加健壯性和可靠性的錯(cuò)誤 / 重試隊(duì)列。
2 、引入 XML 作為消息的有效負(fù)載內(nèi)容來代替序列化 Java 對(duì)象,從而支持其他技術(shù)。如 .Net

<shape id="_x0000_i1026" style="WIDTH: 326.25pt; HEIGHT: 233.25pt" alt="" type="#_x0000_t75"><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wast/157182/r_No0091-02.jpg"></shape>

Figure 2. Schematic illustrating the core components of the medium-complexity SOA. Click on thumbnail to view full-sized image.

  級(jí)別 3 :復(fù)雜的 SOA

  樣例實(shí)現(xiàn):
1 、帶有 MDB JMS 隊(duì)列 / 主題作為消息的消費(fèi)者,并附加其他特性如安全性 / 事務(wù) /JMS 元數(shù)據(jù)屬性等
2 Web services
3 、廠商 / 標(biāo)準(zhǔn)相關(guān)的 SOA 兼容工具包(如專門的金融服務(wù))

  這里涵蓋的關(guān)鍵 SOA 概念在包含中等 SOA 外還有:
1 、良好定義而且嚴(yán)格的組件模型(例如 Java 業(yè)務(wù)集成 / 服務(wù)組件架構(gòu)及其他)
2 、增強(qiáng)的廠商支持,如可插拔的新生產(chǎn)者 / 消費(fèi)者組件創(chuàng)建
3 、詳細(xì)枚舉特定 SOA 實(shí)現(xiàn)上可用服務(wù)的組件注冊(cè)表。

為何不讓SOA變得簡(jiǎn)單?

<shape id="_x0000_i1027" style="WIDTH: 326.25pt; HEIGHT: 233.25pt" alt="" type="#_x0000_t75"><imagedata o: src="file:///C:%5CDOCUME~1%5CWast%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg"></imagedata></shape>

Figure 3. Schematic illustrating the core components of the complex SOA. Click on thumbnail to view full-sized image.

  小結(jié)

  目前 SOA 是作為一種架構(gòu)體現(xiàn),也將會(huì)成為與 C/S 或多層架構(gòu)一樣存在。但是,他目前還是不夠成熟而且只是作為廠商利用的工具。我對(duì) SOA 的建議是,從簡(jiǎn)單的做起并保持 SOA 盡可能的簡(jiǎn)單。不要將 SOA Web services 等同起來,也不要強(qiáng)制使用 SOA 的設(shè)計(jì)模式在 J2EE 應(yīng)用的各層上,告別是網(wǎng)頁層。

  那么我會(huì)為大多數(shù) J2EE 應(yīng)用推薦哪一個(gè) SOA 實(shí)現(xiàn)呢?級(jí)別 2 上的 SOA 實(shí)現(xiàn)如帶有 MDB JMS 隊(duì)列作為消費(fèi)者,而 POJO 或無狀態(tài)的會(huì)話 Bean 作為消息生產(chǎn)者。當(dāng)然,如果你確信你需要集成非 Java 應(yīng)用 , 那么考慮一下 Web services 實(shí)現(xiàn)。還要考慮你現(xiàn)在采用的解決方案在以后要有足夠的擴(kuò)展空間。雖然預(yù)測(cè)多久通常都有爭(zhēng)議的,但我還是建議最遠(yuǎn)不超過 36 個(gè)月。如果你預(yù)見到那個(gè)時(shí)間段內(nèi)有額外的 SOA 需求,那么現(xiàn)在就來構(gòu)建吧。

<imagedata o: src="file:///C:%5CDOCUME~1%5CWast%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.jpg"></imagedata>

為何不讓SOA變得簡(jiǎn)單?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 玛纳斯县| 青田县| 富蕴县| 红桥区| 建瓯市| 浦县| 郁南县| 大厂| 柳州市| 静安区| 汉源县| 六盘水市| 明溪县| 广东省| 吴江市| 精河县| 祁阳县| 安庆市| 民勤县| 登封市| 克拉玛依市| 乌鲁木齐县| 青州市| 北流市| 丽江市| 孟连| 新沂市| 莲花县| 珠海市| 祁门县| 郧西县| 龙游县| 马鞍山市| 建瓯市| 长白| 巴彦淖尔市| 大足县| 甘泉县| 习水县| 徐汇区| 彩票|