論面向服務架構及其應用

2022-09-07 20:15:12 字數 3799 閱讀 2136

摘要:

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

soa主要的四個技術以及標準:

soa的第乙個技術與理論體系為結構程式設計方法

40年前國際上發生了「軟體危機」,如ibm公司開發乙個作業系統、或美國的航空公司開發飛機訂票系統,都花費了上千人年的工作量,開發周期長、而開發出來的產品卻是錯誤很多,難以維護和適應修改。正在此時,一位荷蘭的物理家e.w.dijkstra提出了一種「結構程式設計方法」,他認為:人的智力是有限的,採用數學或物理學的思維方法,用列舉、抽象、歸納、模擬等思維方式簡化問題。由於我也是數學系畢業的,我拜讀了他的所有**,就編寫一本著作「程式設計方法學」,此書曾三次獲得著作大獎,並在全國十多所名牌大學講過課。用此方法擴充套件到軟體設計中時,稱為「結構化分析和結構化設計(sasd)」。

所謂「結構程式設計方法」,就是基於物件導向設計方法的早期藍本,側重於解決程式正確性的程式設計的方法,以此為基礎建立了軟體工程這門學科,建立了程式設計的基礎理論體系。

解決軟體開發效率的第二個基礎理論體系是「物件導向」的可重用理論

我們都知道由物件導向發展到面向構件,由面向構件再發展到面向服務,因此它們的認知觀和基礎理論都是息息相關的,解決大型軟體的開發效率和質量除了要解決程式設計的正確性外,還必需解決開發周期長、復用性差、成本高、文件多、以及難以適應系統演化等問題,十多年來仍舊困惑著這門學科,「軟體危機」仍未解決。

人們的知識是從乙個定理、乙個原理逐步積累起來的,社會是依靠知識的不斷積累發展的。然而編制軟體每次卻都是從零開始,這是造成「軟體危機」的根本原因。由此提出了程式設計工作是否也可以重用以前成功的經驗和程式呢?。整整經過十多年的探索,到七十年代才獲得成功。

我用此方法設計了乙個大型作業系統,這套方法和理論在產品開發和科研領域方面用得很多,因此我稱它為第二個技術與基礎理論。

soa的第三個技術與理論體系是uml統一建模語言

鑑於物件導向的缺陷, 三位物件導向的奠基人聯合起來,建立了uml統一建模語言。uml為軟體開發和soa的產生起到奠基和里程碑的作用。

uml主要理論成果是:①統一物件導向的基本概念,並引進了許多新的概念,②認為軟體開發的過程實質上是從抽象的模型逐步細化,過渡到具體的實現,其中間的每個階段都是實現了某一抽象模型,uml為此提供了建立模型的工具,用直覺的圖形來建立模型,從此軟體專家就有了自己的工具,正如**家有了五線譜工具那樣;③為適應軟體的多變性,提供了演化的概念。

實際上此建模理論是第三個技術與基礎理論,它為演化到構件和架構概念奠定基礎理論模型。

第四個技術與基礎理論是構件架構

由於這種oo方法真正用於實際工程中開發的應用軟體卻很少見到,工程上的實施缺乏開發規範;在技術上要術開發人員的素質較高;最大的問題是被開發出來的軟體難以演化,而軟體要能適應變化是客觀存在的。

為此發展出單純重用的「構件和架構」技術及其理論體系。在2023年日本京都召開的「基於構件的軟體開發(cbsd)」國際專題學術會議上,一致認為軟體開發技術離不開構件和體系結構。軟體體系結構現簡稱「架構。

soa的第乙個技術與理論體系為結構程式設計方法

40年前國際上發生了「軟體危機」,如ibm公司開發乙個作業系統、或美國的航空公司開發飛機訂票系統,都花費了上千人年的工作量,開發周期長、而開發出來的產品卻是錯誤很多,難以維護和適應修改。正在此時,一位荷蘭的物理家e.w.dijkstra提出了一種「結構程式設計方法」,他認為:人的智力是有限的,採用數學或物理學的思維方法,用列舉、抽象、歸納、模擬等思維方式簡化問題。由於我也是數學系畢業的,我拜讀了他的所有**,就編寫一本著作「程式設計方法學」,此書曾三次獲得著作大獎,並在全國十多所名牌大學講過課。用此方法擴充套件到軟體設計中時,稱為「結構化分析和結構化設計(sasd)」。

所謂「結構程式設計方法」,就是基於物件導向設計方法的早期藍本,側重於解決程式正確性的程式設計的方法,以此為基礎建立了軟體工程這門學科,建立了程式設計的基礎理論體系。

解決軟體開發效率的第二個基礎理論體系是「物件導向」的可重用理論

我們都知道由物件導向發展到面向構件,由面向構件再發展到面向服務,因此它們的認知觀和基礎理論都是息息相關的,解決大型軟體的開發效率和質量除了要解決程式設計的正確性外,還必需解決開發周期長、復用性差、成本高、文件多、以及難以適應系統演化等問題,十多年來仍舊困惑著這門學科,「軟體危機」仍未解決。

人們的知識是從乙個定理、乙個原理逐步積累起來的,社會是依靠知識的不斷積累發展的。然而編制軟體每次卻都是從零開始,這是造成「軟體危機」的根本原因。由此提出了程式設計工作是否也可以重用以前成功的經驗和程式呢?。整整經過十多年的探索,到七十年代才獲得成功。

我用此方法設計了乙個大型作業系統,這套方法和理論在產品開發和科研領域方面用得很多,因此我稱它為第二個技術與基礎理論。

soa的第三個技術與理論體系是uml統一建模語言

鑑於物件導向的缺陷, 三位物件導向的奠基人聯合起來,建立了uml統一建模語言。uml為軟體開發和soa的產生起到奠基和里程碑的作用。

uml主要理論成果是:①統一物件導向的基本概念,並引進了許多新的概念,②認為軟體開發的過程實質上是從抽象的模型逐步細化,過渡到具體的實現,其中間的每個階段都是實現了某一抽象模型,uml為此提供了建立模型的工具,用直覺的圖形來建立模型,從此軟體專家就有了自己的工具,正如**家有了五線譜工具那樣;③為適應軟體的多變性,提供了演化的概念。

實際上此建模理論是第三個技術與基礎理論,它為演化到構件和架構概念奠定基礎理論模型。

第四個技術與基礎理論是構件架構

由於這種oo方法真正用於實際工程中開發的應用軟體卻很少見到,工程上的實施缺乏開發規範;在技術上要術開發人員的素質較高;最大的問題是被開發出來的軟體難以演化,而軟體要能適應變化是客觀存在的。

為此發展出單純重用的「構件和架構」技術及其理論體系。在2023年日本京都召開的「基於構件的軟體開發(cbsd)」國際專題學術會議上,一致認為軟體開發技術離不開構件和體系結構。軟體體系結構現簡稱「架構」。

3.比如在開發乙個簡單的web系統時候

頁面設計:

1. 動靜分離j**ascript、css統一放到公共的靜態伺服器上,完全獨立的子網域名稱,防止髒cookie問題和動態網域名稱中無用cookie問題,通過檔案版本號解決系統新版和舊版本之間衝突問題。

所有由獨立的分布式系統管理,對原圖進行不同規格的無損裁減和壓縮。

2. 非同步載入和懶載入

商品**、營銷活動資訊、庫存等動態資料通過非同步載入

非首屏資料做懶載入處理,提高首屏載入時間,比如評價、商品詳情等內容

3. 多級快取策略

a. 瀏覽器本地快取

協商快取,對於某些時效要求較高的資源通過last-modified控制資料。做到statuscode=304

強快取,js、css等靜態資源或者一些頁面碎片偽靜態資料通過expires、cache-control(http1.1支援)設定做到強快取,在不強制重新整理的情況下可以做到200(from cache)

b. cdn

快取cdn分兩條線有自營cdn和合作商的cdn,、靜態資源與偽靜態資料分

別放在不到的cdn上

c. varnish

快取varnish在設計上負載使用輪詢方式,不使用url hash策略,用空間換時間的策略, 從而避免熱資料問題,也支援橫向擴充套件。varnish 快取和cdn快取在失效時間錯開,從而避免同時失效回源壓力過大。

後台設計:

資料的統一處理:

web系統的資料通過mq****於外部系統。在設計時把共性抽出來分成三部分

接受mq訊息並持久化通過listener

解析報文解析報文

業務處理上簡化為add、update、delete三個動作

異常元件以觀察者模式實現,記錄處理失敗的mq訊息並對訊息進行擷取,並供下次再反向執行

論面向服務的架構及其應用

宣告 本文為本人在軟考系統架構設計師備考期間的練手寫作,不保證內容的原創性與正確性,僅供參考,請勿照抄和用於學術 等正規場合,因不當使用產生後果一律自負。前端web服務主要提供給使用者使用的介面,分為前置nginx負載均衡伺服器 前端 nginx集群。當使用者通過網路訪問系統時,首先會訪問到前置的n...

論面向服務的架構及其應用

論面向服務的架構及其應用 摘要 傳統的架構在乙個完整的軟體包中將許多應用程式功能混合在一起,這種方式稱為 單一應用程式 這樣加大了系統的複雜性,增加了維護系統的成本,並且不能重用,soa將應用程式的不同功能單元進行拆分,服務建立後能用於多個應用和業務流程,並通過這些服務之間定義良好的介面和契約聯絡起...

論面向服務的架構及其應用

摘要 面向服務的架構 soa 是乙個元件模型,它將應用程式的不同功能單元 稱為服務 通過這些服務之間定義良好的介面和契約聯絡起來。介面是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平台 作業系統和程式語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行互動。soa是一種應用...