2008年10月8日 星期三

SOA?!

會寫這篇是因為,最近學長為了要去北京參展,所徹夜趕出來的系統。

事情是這樣的,這個比賽是IBM所舉辦的國際性比賽(正確來說是大中華區的比賽)

因為之前得獎的作品學長覺得不夠完善,因此趁著去北京之前趕快補足不足的部份,

不過也因此熬了好幾晚的夜.....也因如此激起我想徹底瞭解啥是SOA

-------------------正文開始-----------------------------------------

SOA主要概念是針對學校或企業需求組合而成的一組軟體元件。組合的元素通常包括:軟體元件、服務及流程三個部份。當學校或企業面對外部要求時,流程負責定義外部要求的處理步驟;服務包括特定步驟的所有程式元件,而軟體元件則負責執行工作的程式。

  就上述來說,SOA就像物件導向技術一樣,運用小的零組件(軟體元件)組合成應用系統。但 SOA 強調的是如何將彼此關係鬆散的應用系統功能元件在網路上發行、組合及使用

聽起來好像很新的技術,其實不然.....有以下幾點說明:
  1. SOA不是新玩意:多年前即有資訊部門或公司成功地用SOA方式來建構、運行應用程式,且當時XML、web service都尚未提出。

  2. SOA不是種技術:它是種建構、組織的方法,用來建立應用程式的運行環境,以及讓學校的業務程式能以「功能化」方式發展、累積。

  3. 就算購買最新的XML、web services產品(如開發工具、執行平台、軟體元件等),也不表示就可以建構出SOA式的應用程式。

簡單來說,SOA是一種遵循典範,是針對學校或企業內應用程式的設計、開發、佈建、管理所提出的遵循典範。SOA主張「程式開發技術」與「程式建構方法」的交替並用,以類似傳訊溝通的作法,將數個 所需的「業務服務」進行連結,以此來實現一個新的應用程式,而非「從頭開發」。透過適當的程式組構及傳訊式的程式連結,可讓學校或企業快速因應學生或用戶 的需求與改變,新的應用程式只要透過「傳訊微調」即可實現,而非「重新撰寫」。意思就是,已寫好的軟體元件不需重改,只需要把元件之間溝通的方式(橋樑、程式...等)作修改,即可符合新的需求,藉此達到軟體元件reuse的目的。

SOA不單只是程式開發的方法論,也提供行政管理層面的依循。例如它並非是以應用程式個體為角度來進行管理,而是直接將過往程式師開發出的程式視為「服務」來管理。而對「服務」間的「互動傳訊」進行分析,SOA便可讓程式設計部門的主管瞭解何 時該執行哪個業務邏輯,以及為何要執行,如此資訊管理者與分析師便可對服務程序進行最佳化調適。

  再來談到的是SOA的技術特性:
  1. 分散式架構 (distributed)-SOA 的組成元件是由許多分散在網路上的系統組合而來,可能是區域網路,也可能是來自廣域網路。例如網站服務技術 (web services) 就是運作 HTTP來相互連結的 SOA。如此的作法,也使得網站服務技術很快的就成為所有支援網際網路的系統平台均能使用的技術。

  2. 關 係鬆散的界面 (loosely coupled)-傳統的系統主要是將應用系統功能需求切割成相互關聯的小零組件:模組、物件或元件,發展者要花費極大的心力了解零組件是如何設計及使 用,以確保不會違反零組件連接關係限制。如此一來,若要以不同零組件替換原始設計,就成為一件困難的事。SOA 的作法是以界面標準來組合系統,只要符合界面要求,零組件可以任意替換,大幅提高系統變更的彈性度。

  3. 依據開放的標準 (Open standard)-使用開放標準是 SOA 的核心特色,過去的軟體元件平台如 CORBA、DCOM、RMI、J2EE 採用專屬協定作為元件連結的規範,使得不同平台的元件無法相通。SOA 則著重於標準與互動性,將可避免不同平台 (.NET web services 與 Java web services) 開發程式間相互整合的困擾。

  4. 以流程角度出發 (process centric)-在建構系統時,首先了解特定工作的流程要求,並將其切割成服務界面(包括輸入與輸出資料格式),如此其他的發展者就可以依據服務界面開發 (或選擇) 合適的元件來完成工作。

  最後,理論說完了舉個例子唄:
  假設我們要建立一個線上投稿的網站,網站提供的服務包括了線上投稿作業、論文分派作業、論文審查作業、線上註冊及報名作業等。傳統的方式我們會儘快找一個類似的網站,再儘快將其他類似網站的原始碼(source code)拿來修改,但其他類似網站的原始碼所執行的平台有可能不是架站者所熟悉的作業系統。SOA的作法就是,將所有程式邏輯及服務內容全部包裹在服務內部,並實作一個標準的介面與外部作溝通,這種做法跟傳統的元件導向做法非常類似,唯一的差別是介面定義的方式、資料格式、與溝通管道必須是產業標準 (http、XML、SOAP 等)。 也就是說只要能實作出這樣的介面,不論介面後面是什麼,都可使成為 SOA。


以上節錄自:http://www.cc.ntu.edu.tw/chinese/epaper/20070620_1008.htm
(台灣大學計算機及網路中心)