Like Share Discussion Bookmark Smile

J.J. Huang   2020-03-01   Tech.   瀏覽次數:

技術觀念 | 淺談分散式系統 - 服務的本質與 SOA

通信很重要,但是在網際網路發展的早期階段,網路資源稀缺,高延遲低帶寬易丟包不穩定⋯等等,為了實現高效、可靠的訊息傳輸,IPC/RPC 技術應運而生。然而隨著網際網路技術的發展,Web 技術也日趨成熟,RPC 開始顯得有點過於技術化了,慢慢的人們將關注點從技術轉移到業務——服務。

那麼到底什麼是服務?

先從生活中說起,在日常生活中,「為人民服務」、「服務業」、「售後服務」、「服務質量」⋯「服務」的概念無處不在,可是「服務」是什麼呢?怎麼去定義它?它的內涵和外延分別是什麼呢?思考這些問題對深入理解什麼是軟體服務以及服務與資源的關係有很大意義!

經濟活動是一切有關於生產、分發、消費特定的商品(goods)或服務(Services)的人類活動;商品是生產勞動(productive labour)過程中創造的有形產品,如汽車、衣服,服務是非生產勞動(unproductive labour)過程中創造的無形產品,如教育、心理諮詢、美容美髮。

與之相對

訊息技術是一切有關於定義、傳遞、轉換、存儲、使用特定的資料(Data)和過程(Procedure)的計算機活動;資料就是訊息載體,是訊息資源,如變量,對象,Entity,Resource,Record,是有結構的,有形的;過程就是計算,是computing,是指令,如函數,方法,服務…

要理解编寫程式,要先理解生活!

那麼,生活中的服務有哪些特徵呢?

服務的兩種形式:

1.商品相關的服務:如汽車銷售,汽車廠生產汽車這個商品,4S 店提供銷售汽車的服務,這裡的服務就與“汽車”這個商品直接相關;
2.商品無關的服務:如心理諮詢,心理醫生只是進行精神疏導,或者傳輸知識,是非生產勞動,這種服務不涉及任何有形商品。

服務具有方向性: 提供者 ==> 消費者

  • 服務是單向的,這一點很重要。多方參與的活動,應該稱之為“協作”。

我始終認為,計算機/軟體/訊息技術中的所有模式都源於社會模式,訊息系統中的節點就是社會中的人,人是如何交互、協作、溝通、工作的,訊息系統中的節點也是如此。人類在進入訊息化之前的幾千年裡,進行了各種各樣的複雜活動,貿易,教育,外交,戰爭,工程建設,訊息系統只不過是在讓一切變得更快、更強!

分散式計算(算盤)、異步、並發、層次化、中繼、緩存、索引、編碼⋯等等所有在軟體開發相關的概念,都能在社會中找到方案實例,架構的概念源自建築。

因此,我們可以推斷:

  • 軟體服務具有方向性,client 請求服務,server 提供服務
  • 軟體中的商品是 Resource(資源),但服務可能與 Resouce 有關(REST),也可能與 Resource 無關,比如指令、計算、路由。

SOA 是什麼?

服務導向架構(英語:service-oriented architecture)並不特指一種技術,而是一種分散式運算的軟體設計方法。軟體的部分組件(呼叫者),可以透過網路上的通用協定呼叫另一個應用軟體元件執行、運作,讓呼叫者獲得服務。SOA原則上採用開放標準、與軟體資源進行互動並採用表示的標準方式。因此應能跨越廠商、產品與技術。一項服務應視為一個獨立的功能單元,可以遠端存取並獨立執行與更新,例如在線查詢信用卡帳單。

SOA 是一種軟體設計風格,一種架構模式,一種以服務為核心的架構。組件之間通過服務的請求和響應來實現通信,完成特定的系統功能。

SOA中的一項服務應有以下四個特性:

  • 針對某特定要求的輸出,該服務就是運作一項商業邏輯。
  • 具有完備的特性(self-contained)。
  • 消費者並不需要瞭解此服務的運作過程。
  • 可能由底層其他服務組成

SOA的原則:

以下指導原則是開發,維護和使用SOA的基本原則:

  • 可重複使用、粒度、模組性、可組合型、物件化原件、構件化以及具互動操作性
  • 符合開放標準(通用的或行業的)
  • 服務的識別和分類,提供和發布,監控和跟蹤。

下面是一些特定的體系架構原則:

  • 服務封裝
  • 服務鬆耦合(Loosely Coupled) - 服務之間的關係最小化,只是互相知道。
  • 服務契約 - 服務按照服務描述文件所定義的服務契約行事。
  • 服務抽象 - 除了服務契約中所描述的內容,服務將對外部隱藏邏輯。
  • 服務的重用性 - 將邏輯分布在不同的服務中,以提高服務的重用性。
  • 服務的可組合性 - 一組服務可以協調工作並組合起來形成一個組合服務。
  • 服務自治 – 服務對所封裝的邏輯具有控制權
  • 服務無狀態 – 服務將一個活動所需儲存的資訊最小化。
  • 服務的可被發現性 – 服務需要對外部提供描述資訊,這樣可以通過現有的發現機制發現並存取這些服務。[4]

除此以外,在定義一個SOA實現時,還需要考慮以下因素:

  • 生命週期管理
  • 有效使用系統資源
  • 服務成熟度和效能

SOA 的實現方案:

既然有面向服務的架構(SOA),那麼就一定有非面向服務的架構,比如面向組件,或者模組化的架構,各組件/模組之間相互協作(雙向),沒有主從之分。在軟體領域,協作就是模組化,模組與模組之間通過繼承、組合、關聯、聚集等方式建立關係。

  • Web services: SOAP/WSDL
  • 消息隊列:ActiveMQ,JMS,RabbitMQ
  • Restful HTTP
  • Thrift,CORBA

SOA 並不是個新鮮概念,它是軟體技術進化中的一個階段,軟體系統開發從早期的分散式計算,模組化編程,進入到SOA ,目前流行的Mashups,SaaS(Software as service), PaaS(Platform as a Service),雲計算(Cloud Computing),都可以視為SOA 的衍生物。

SOA 並沒有特定的傳輸協議,可以是 TCP,也可以是 HTTP。基於 HTTP 的服務稱之為 Web 服務(Web Service)。


註:以上參考了
漫谈分布式系统中的技术 —— 从 IPC/RPC,SOA,Web Service/REST 到 micro services(微服务)
服務導向架構(Service-Oriented Architecture,SOA) 簡介
維基百科-服務導向架構