SOA面向服務架構

  傳統的SOA是一種面向服務的單體架構,強調服務共享和重用,國內“中臺”概念其實就是一種SOA單體架構(中臺是一個營銷概念!),經過幾十年的SOA實踐探索,人們已經發現服務的解耦性必須高于服務的復用共享性,因此催生了微服務架構

  SOA定義是什么?著名軟件工程專家Martin Fowler提出SOA歧義Service Oriented Ambiguity,認為"什么是SOA"是不可能回答,因為不同的人意味著不同的事情,SOA意味服務接口,意味流程整合,意味資源再利用,意味著管制,在下面SOA組件圖中,服務和服務消費者(客戶端)之間存在多個約束,當一個服務顯式暴露后,客戶端能夠通過綁定定位到該服務,相當于兩者簽訂了合同,規定了合同內容和如何實施,具體合同的描述是通過消息方式進行:

  由于Java等傳統語言主要是以類表達對象,將功能行為封裝在類內部,而業務客戶一般都是注重軟件的功能,包括同行業公司系統之間數據交流也是以功能服務為接口,因此,面向服務的架構SOA更加貼近業務客戶,也更適合業務伙伴之間流程整合,各個行業已經誕生自己行業特點的SOA,例如電信聯盟的NGOSS,已經成為電信行業業務支撐系統BOSS的標準。SOA不但是技術用語,也是業務銷售用語,通過服務這個中間概念,可以實現業務和技術之間的無縫轉換,如今SOA已經和REST DDD以及云計算等新技術方法結合。其內部主要概念有SCA ESB JBI等等,涉及工作流 規則引擎 消息總線等多個技術細節方面。

  通常,一個架構師進行系統架構頂層設計時,必須考慮使用者的利益,不能單單實現軟件的功能,還要考慮到軟件的性能Scalable 可用性available/usable 安全性等軟件質量,還要借鑒社區的最佳實踐和經驗形成的模式和反模式,避免重蹈覆轍和陷阱,再大膽采取最新的軟件技術(比如用REST替代SOAP等)。

  服務的提出其實隱含了兩個概念,服務提供者和服務消費者,這兩者之間有一個合同約定,這非常類似我們現實生活中簽訂的服務合同,A單位和B單位分別是服務的提供者和消費者,兩者簽訂了一個服務合同,規定A為B提供某項服務。服務就是提供一些公共需求的設施,通過一個工作過程能提供幫助,使用,讓使用者受益。

  服務具體有如下:Windows Service:如PC定位者RPC Locator, 事件日志EventLog, DHCP Client,;. 軟件服務Software Service,如分布式服務Distribution Service, 警告服務Alert Service 安全服務 Security Service, 日志服務;業務服務Business Service,如 帳號和客戶服務,銷售服務,訂單服務,采購服務。

  服務兩個重要特點:自治和管制,自治代表服務不能被外部勢力牽制,比如如果一個服務內部處理中需要調用外部資源或等待外部流程結束,這種等待不能影響服務本身的調用,如果一個服務分為顯式對外和隱式內部兩個部分,那么自治是針對隱式內部,意味著我們不能在具體一個服務中直接使用同步代碼實現復雜功能。如:

public AServiceImpl implements AService{

  public void productSale(...){

    Product product = productService.getProduct();
    int inventory = InventoryService.getInventory(product);
    int price = priceService.getPrice(product);

 

  }

}

  在AServiceImpl的productSale方法中,我們獲得商品的庫存和定價,都是通過同步的RPC實現調用的,這樣造成productSale方法依賴于InventoryService和priceService,無法實現自身自治。

  實現服務真正自治,實際就是解決類之間依賴耦合的問題,消息是一種方式,但是基于消息又有兩種通訊方式,基于請求響應和基于事件的EDA。

  從服務自治可以看出,為什么要提出服務必須自治,因為服務是受管制的,在實際業務活動中,不同服務是被不同部分管理,比如定價服務歸屬財務部門系統,庫存歸屬倉庫系統,涉及系統之間調用協調不能自己使用同步RPC,而是需要消息。

  在實際應用中,很多單位使用SOA主要看中其能夠無縫整合新舊系統,稱為EAI企業應用整合,下圖是蘇寧的一種SOA圖,使用ESB企業服務總線這樣的消息系統整合了新舊各種系統。

蘇寧SOA

  使用SOA和ESB能夠靈活實現業務流程管理,工作流的管理BPM,如下圖,一個訂單的產生可能需要幾個部門批準才能完成,而且這幾個部門經常是變化的,如何靈活實現這種批準流程的定制也成為SOA實現的一部分,如下:

bpm

  注意圖中1 2 3 4 5 6 7 8 9標注的訂單處理流程步驟,這種不同服務之間調用處理順序可通過BPM進行靈活定制。

  目前提供SOA全套解決方案和產品的廠商很多,包括IBM SAP和Oracle,國內金蝶用友浪潮軟件等等,比如蘇寧的SOA是以SAP為主的八國聯軍組裝,既然SOA中間件服務商已經為我們提供了成熟的架構方案和產品,那么作為SOA使用者是否就無需頂層架構設計了呢?當然不是,SOA使用者要根據自己業務進行模塊劃分,進行領域建模設計,根據DDD領域驅動設計將業務分解為一個上下文模塊,然后再用服務作為對外接口,內部封裝的是DDD聚合根,而傳統SOA作法是內部封裝的是數據表的DTO,從而導致SOA服務內部腐爛堵塞,違背SOA自治和可用性等原則約束。具體可見DDD領域驅動設計

SOA的好處

1. 松耦合:由于服務自治,有一定封裝邊界,服務調用交互是通過發布接口。這意味著應用程序不感興趣的服務如何被實現
2.位置透明:服務的消費者不必關系服務位于什么地方。
3.可在異構平臺間復用。可以將遺留系統包裝成服務。
4.便于測試,能并行開發,較高可靠性和良好可伸縮性。

SOA基礎

SOA面試題

SOA案例項目源碼

SOA最佳實踐

微服務架構

微服務實現工具概述

為什么RESTful微服務和異步編程是一種趨勢?

Lagom是一個集成ES/CQRS的Reactive微服務框架

Docker:VM、代碼遷移和SOA解決方案

Docker容器化組件架構

微服務專題

 

ESB/EAI集成

SOA之企業應用集成EAI

Apache ServiceMix介紹

什么時候使用Apache camel

SOA集成框架Spring Integration, Mule ESB or Apache Camel比較

Apache Camel建立基于消息的應用

基于Spring集成的EDA的開源項目

各種ESB產品比較

使用REST實現企業集成

使用Apache Camel實現REST端點集成

為什么你并不需要企業服務總線(ESB)

Apache Kafka簡單介紹

企業服務總線ESB已死! 服務網格上位

更多ESB專題

Web服務

使用Spring Webservices建立SOAP服務代理

六個強大的創建RESTful服務的Java框架

使用Apache CXF開發RESTful服務

使用Apache CXF開發Web服務

使用SCA和JAX-RS建立RESTful服務

ZooKeeper在服務發現中應用

使用zookeeper和curator實現微服務的負載平衡

使用vert.x 2.0, RxJava 和 mongoDB創建一個簡單的RESTful服務

Spring RESTful服務源碼案例下載

使用Shiro實現基于服務的多域身份驗證和授權

WEB服務WebService專題

微服務架構快速指南

Netflix hystrix入門教程

REST服務專題

BPM工作流/BPEL

在亞馬遜云計算平臺上使用Camel開發分布式工作流

Effektif:第一個基于云的BPM產品

BPMN開始結束事件的最佳實踐

業務流程的新實現:微服務和事件編排

深入理解Activiti工作流

使用Activiti和Spring集成完成BPEL和BPM

工作流引擎四重罪

更多工作流專題

SOA最佳實踐

構建實時流數據平臺實踐指南

SugarCRM使用EDA替代SOA

SOA并不能解決高并發事務

你的SOA已經使用了EDA和CQRS嗎?

OOD vs SOA

DCI和服務Services (EJB)

使用Fabric3實現服務的組合

SOA企業線下培訓咨詢

NGOSS是什么

EBAY架構

LinkedIn架構

 

相關主題

#無服務器Serverless #EDA專題 #微服務架構

#CQRS架構 #中間件 #分布式系統

更多# SOA Topic

一级黄色录像影片 夫妻性生活影片 免费在线观看 一级a做爰片