主頁 > 軟體設計 > 論面向服務架構(SOA)設計及其應用

論面向服務架構(SOA)設計及其應用

2020-09-10 18:41:33 軟體設計

論面向服務架構(SOA)設計及其應用

馬旺旺

(石家莊鐵道大學,河北省石家莊市,050000)

摘 要 SOA分層架構的核心思想是運用 SOA 理論將現有的資訊系統分解成多個獨立的粗粒度 Web 服務 , 資訊的集成即變成 Web 服務之間的互動 , 從而隱藏了原資訊系統的位置和實作技術,面向服務的架構(SOA)是一個組件模型,它將應用程式的不同功能單元(稱為服務)進行拆分,并通過這些服務之間定義良好的介面和協議聯系起來,本文將從定義、基礎結構、六大基本要素、三大角色、五大特性和自身實踐相結合具體闡述面向服務框架的設計與應用,

關鍵詞:面向服務;架構;軟體;SOA

 

On the design and application of SOA

Ma Wangwang

(Shijiazhuang Tiedao University,Shijiazhuang City, Hebei Province,050000)

Abstract:The core idea of SOA layered architecture is to use SOA theory to decompose the existing information system into several independent coarse-grained web services, and the integration of information becomes the interaction between web services, thus hiding the location and implementation technology of the original information system.Service Oriented Architecture (SOA) is a component model, which divides the different functional units of an application (called services) and links them through well-defined interfaces and protocols between these services. This paper will elaborate the design and application of service-oriented framework from the definition, infrastructure, six basic elements and its own practice.

Key word:  Service oriented;  framework;  software;  SOA

 

0引言

傳統的架構,軟體包是被撰寫為獨立的(self-contained)軟體,即在一個完整的軟體包中將許多應用程式功能整合在一起,實作整合應用程式功能的代碼通常與功能本身的代碼混合在一起,更改一部分代碼將對使用該代碼的代碼具有重大影響,這會造成系統的復雜性,并增加維護系統的成本,而且還使重新使用應用程式功能變得較困難,因為這些功能不是為了重新使用而打的包,SOA旨在將單個應用程式功能彼此分開,以便這些功能可以單獨用作單個的應用程式功能或“組件”,這些組件可以用于在企業內部創建各種其他的應用程式,或者如有需要,對外向合作伙伴公開,以便用于合作伙伴的應用程式,

1詳細介紹

面向服務的體系結構(SOA)是一個組件模型,它將應用程式的不同功能單元(稱為服務)通過這些服務之間定義良好的介面和契約聯系起來,介面是采用中立的方式進行定義的,它應該獨立于實作服務的硬體平臺、作業系統和編程語言,這使得構建在各種這樣的系統中的服務可以以一種統一和通用的方式進行互動,

這種具有中立的介面定義(沒有強制系結到特定的實作上)的特征稱為服務之間的松耦合,松耦合系統的好處有兩點,一點是它的靈活性,另一點是,當組成整個應用程式的每個服務的內部結構和實作逐漸地發生改變時,它能夠繼續存在,而另一方面,緊耦合意味著應用程式的不同組件之間的介面與其功能和結構是緊密相連的,因而當需要對部分或整個應用程式進行某種形式的更改時,它們就顯得非常脆弱,

對松耦合系統的需要來源于業務應用程式需要,根據業務的需要變得更加靈活,以適應不斷變化的環境,比如經常改變的政策、業務級別、業務重點、合作伙伴關系、行業地位以及其他與業務有關的因素,這些因素甚至會影響業務的性質,我們稱能夠靈活地適應環境變化的業務為按需業務,在按需業務中,一旦需要,就可以對完成或執行任務的方式進行必要的更改,

2基礎結構

一,SOAP, WSDL, UDDI

WSDL,UDDI和SOAP是SOA基礎的基礎部件,WSDL用來描述服務;UDDI用來注冊和查找服務;而SOAP,作為傳輸層,用來在消費者和服務提供者之間傳送訊息,SOAP是Web服務的默認機制,其他的技術為可以服務實作其他型別的系結,一個消費者可以在UDDI注冊表(registry)查找服務,取得服務的WSDL描述,然后通過SOAP來呼叫服務,

二,WS-I Basic Profile

WS-I Basic Profile,由Web服務互用性組織(Web Services Interoperability Organization)提供,是SOA服務測驗與互用性所需要的核心構件,服務提供者可以使用Basic Profile測驗程式來測驗服務在不同平臺和技術上的互用性,

三,J2EE 和 .Net

盡管J2EE和.NET平臺是開發SOA應用程式常用的平臺,但SOA不僅限于此,像J2EE這類平臺,不僅為開發者自然而然地參與到SOA中來提供了一個平臺,還通過他們內在的特性,將可擴展性,可靠性,可用性以及性能引入了SOA世界,新的規范,例如 JAXB(Java API for XML Binding),用于將XML檔案定位到Java類;JAXR(Java API for XML Registry)用來規范對UDDI注冊表(registry)的操作;XML-RPC(Java API for XML-based Remote Procedure Call)在J2EE1.4中用來呼叫遠程服務,這使得開發和部署可移植于標準J2EE容器的Web服務變得容易,與此同時,實作了跨平臺(如.NET)的服務互用,

3六大關鍵要素

一個SOA系統要具有以下六大關鍵要素——基礎設施、已有資源、企業服務、流程模型、服務展現和系統工具(包括開發、測驗和管理工具等),在基礎設施和已有資源都已具備的基礎上,開發和構建一個SOA系統要包括以下幾方面的作業:

一,首先需要設計開發出符合標準的服務,這是整個SOA系統最核心的要素,

二,基于標準服務,借助流程編排工具和建模工具,組織構造流程,生成流程模型,更好地滿足業務需求,

三,實際構建和開發SOA系統,具體包括服務和應用程式的開發,資料的訪問、處理和管理,及對服務各種形式的展現等,

4三種角色

SOA架構中有三種角色:

服務提供者:服務提供者注冊自己的服務,注冊資訊包含系統資訊,服務名稱,服務的ip和埠號,服務請求的url, 服務的權重等

服務注冊中心:注冊中心提供注冊服務的中心存盤,和向服務消費者push服務變更通知

服務請求者:服務消費者在啟動時獲取所需服務注冊資訊(根據系統名稱+服務名稱),將服務注冊資訊快取在本地,監聽服務資訊的變更,更新本地的快取,服務消費者根據本地快取的服務提供者資訊負載,來轉發請求,對服務提供方提供心跳檢測,

5 五大特性

服務自治:服務自治原則要求單個服務在底層邏輯控制方面要盡可能是獨立和自包含的,服務不依賴于訪問它的客戶端或其他服務,服務可以獨立的進行部署以及實施版本策略和安全策略,

依賴開放的標準:SOA的一個目標是讓不同廠商開發的服務能夠進行互相操作,這樣就需要依賴于一個開放的被不同廠商普遍接受的標準,SOA采用基于訊息的通訊方式,從訊息交換的角度來想就是要求訊息自身標準化,在此方法SOAP(簡單物件訪問協議)訊息的采用對訊息承載的內容提供了一致性的表示,另外SOA真正的被用于企業級應用時,還需要考慮一下額外因素,比如訊息安全、可靠傳輸、事務的支持等,要實作真正意義上的跨平臺操作,實作這些特性的互操作方式同樣需要一種開放的標準定下來,在這方面一些主流的IT廠商比如:微軟、IBM和BEA等聯合一些國際組織如:W3C、OASIS、WS-1等,對標準和規范的指定做出了極大的貢獻,這些標準和規范定義在Web Service規范中,

支持跨平臺:能夠讓不同平臺進行通訊是SOA產生的最主要動機,正因為SOA采用的開放的標準,才使跨平臺得以實作,跨平臺最大的好處就是促進了異質系統的集成,使Java應用能夠呼叫.NET平臺暴露出來的服務介面,此外使用標準的服務兌現有邏輯的封裝,實作了對歷史遺留應用的重用,也給企業提供了一種節約成本的捷徑,

組合和復用:按照提供功能大小的差異,不同的服務具有不同的粒度,我們可以把提供具有最小粒度功能實作的服務成為原子服務,多個原子服務可以通過合理的組合,編排成一個新的聚合型服務,功能的復用是我軟體設計思想不變的主題,SOA鼓勵創建具有高復用的服務,服務的組合性另一方面也促進了服務的重用,為了提高服務的復用程度,SOA甚至強調了創建與場景無關的服務,這樣同樣的服務就在不同場景的解決方案中使用了,

松耦合:SOA通過契約實作客戶端對服務的呼叫,雙方只需要采用能夠匹配的契約就能保證正常的交往,基于契約的服務交往,又進一步促進了服務的自治,只要契約不發生改變,服務本身的實作就可以自由的變化,因此這樣的耦合度是極低的,

6自身實踐

在我構建SOA系統時,遇到的問題主要是如何打通一個系統與一個系統之間同一用戶之間資訊共享的問題,本來是同一用戶,但是在每個系統之間都有自己的一張“身份證”,互相獨立,就像生活中我們經常遇到的一個提示一樣:“ QQ和微信是獨立的體系,賬號資訊不互通,”解決方法就是根據資訊特點,建立統一的管理平臺,統一認證在實際的開發程序中也尤為重要,統一認證的實作是基于SOA的架構,為了保證軟體的資訊安全,我們往往設定有些界面只有用戶登錄后才能訪問,這必然就會帶來每次身份認證的繁瑣操作,不僅浪費時間而且容易遺忘密碼,解決方法就是將身份驗證這一功能模塊發布成一種服務,其他的軟體可以通過UUDI查找該服務,然后將該服務與服務的實作進行系結,

5總結

服務導向架構并不是一種全新的解決方案;相反,SOA是技術與架構的自然進化,系統架構一直在不斷進步,與商業保持高度一致,系統設計師與商家很早就認識到將技術與商業流程相協調的重要性,包括充分應用并合理化技術資源,以及為商業提供更好的支持,

 

參考文獻:

[1] 百度百科,SOA (面向服務的架構),https://baike.baidu.com/item/SOA/2140650

[2] SOA(Service-Oriented Architecture)面向服務的分布式架構詳解,持.之.以.恒,https://blog.csdn.net/zl834205311/article/details/80333531

[3] SOA面向服務架構詳解,順其自然~,https://blog.csdn.net/fuhanghang/article/details/83961606

[4] 淺談SOA,禾碼大叔,https://www.cnblogs.com/jun-ma/p/5341027.html

[5] SOA系列之基本特性,邵鴻鑫,https://blog.csdn.net/u010926964/article/details/48734265

 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/3086.html

標籤:架構設計

上一篇:論MVC架構設計模式分析

下一篇:認證系統設計經典會話

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more