架構(gòu)師學(xué)習(xí)周記(一)

緣起

  日子一天天過去,離軟考架構(gòu)師只剩下58天,為了充分利用復(fù)習(xí)時(shí)間,我決定把007的作業(yè)和架構(gòu)師的復(fù)習(xí)結(jié)合在一起,每周寫一篇文章來對每周復(fù)習(xí)的重點(diǎn)內(nèi)容進(jìn)行復(fù)盤。-----2018-9-13

一、SOA的關(guān)鍵技術(shù)

1、UUDI
UUDI(Universal Description Discovery and Integration,統(tǒng)一描述、發(fā)現(xiàn)和集成)提供了一種服務(wù)發(fā)布、查找和定位的方法,是服務(wù)的信息注冊規(guī)范,以便被需要該服務(wù)的用戶發(fā)現(xiàn)和使用它。

在UDDI技術(shù)規(guī)范中,主要包含一下三個(gè)部分的內(nèi)容:
(1)數(shù)據(jù)模型。用于描述業(yè)務(wù)組織和服務(wù)的XML Schema。
(2)API。一組用于查找和發(fā)布UDDI數(shù)據(jù)的方法,基于SOAP。
(3)注冊服務(wù)。是SOA中的一種基礎(chǔ)設(shè)施,對應(yīng)著服務(wù)注冊中心的角色。

2、WSDL
WSDL(Web Service Description Language,Web 服務(wù)描述語言)是對服務(wù)進(jìn)行描述的語言,它有一套基于XML的語法定義。WSDL描述的重點(diǎn)是服務(wù),它包括服務(wù)實(shí)現(xiàn)定義和服務(wù)接口定義。

3、SOAP
SOAP(Simple Object Access Protocol,簡單對象訪問協(xié)議)定義了服務(wù)請求者和服務(wù)提供者之間的消息傳輸規(guī)范。SOAP用XML來格式化消息,用HTTP來承載消息。通過SOAP,應(yīng)用程序可以在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換和遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPC)。

SOAP主要包括以下四部分:
(1)封裝。用來表示消息中包含什么內(nèi)容,誰來處理這些內(nèi)容,以及是否必需。
(2)編碼規(guī)則。定義了一種序列化機(jī)制,用于交換系統(tǒng)所定義的數(shù)據(jù)類型的實(shí)例。
(3)RPC表示。定義了一個(gè)用來表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)議。
(4)綁定。定義了一個(gè)使用底層傳輸協(xié)議來完成在節(jié)點(diǎn)之間交換SOAP封裝的約定。

SOAP消息基本上是從發(fā)送端到接收端的單項(xiàng)傳輸,但它們常常結(jié)合起來執(zhí)行類似于請求/應(yīng)答的模式。

SOAP消息包括以下三部分:
(1)封裝(信封)。元素名是Envelope,封裝是頂層元素,必須出現(xiàn)。
(2)SOAP頭。元素名是Header,可有可無。
(3)SOAP體。Body,包含消息的最終接收者想要的信息的容器,必須出現(xiàn)。

樣例
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
<soap:Body xmlns:m="http://www.example.org/stock">
</soap:Body>
</soap:Envelope>

4、REST
REST(Representational State Transer,表述性狀態(tài)轉(zhuǎn)移)是一種只使用HTTP和XML進(jìn)行基于Web通信的技術(shù),可以降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性,從根本上來說只支持幾種操作(POST、GET、PUT、DELETE)。

REST提出了如下設(shè)計(jì)概念和準(zhǔn)則:
(1)網(wǎng)絡(luò)上所有事物都可以被抽象成資源。
(2)每個(gè)資源都對應(yīng)一個(gè)唯一的資源標(biāo)識。
(3)通過通用的連接件接口對資源進(jìn)行操作。
(4)對資源的各種操作不會改變資源的標(biāo)識。
(5)所有的操作都是無狀態(tài)的。

二、SOA的實(shí)現(xiàn)方法

從邏輯上和高層抽象來看,目前,實(shí)現(xiàn)SOA的方法比較多,其中主流方式有Web Service、企業(yè)服務(wù)總線和服務(wù)注冊表。

1、Web Service

Web Service 模型

Web Service 模型中的操作包括發(fā)布、查找和綁定,發(fā)布和查找顧名思義,無需太多解釋,關(guān)于綁定,可能很多研發(fā)的同事并不太熟悉。在綁定操作中,服務(wù)請求者使用服務(wù)描述中的綁定細(xì)節(jié)來定位、聯(lián)系并調(diào)用服務(wù),從而在運(yùn)行時(shí)與服務(wù)進(jìn)行交互。綁定可以分為動態(tài)綁定和靜態(tài)綁定。

  • 動態(tài)綁定:簡而言之,就是通過服務(wù)注冊中心查找服務(wù)描述,并動態(tài)地與服務(wù)交互(并不提前知道服務(wù)的存在);
  • 靜態(tài)綁定:就是服務(wù)提供方和服務(wù)調(diào)用方提前約定好,通過本地文件或其他方式直接與服務(wù)進(jìn)行綁定(小規(guī)模系統(tǒng)對接用的比較多的方式)。

在采用Web Service 作為SOA的實(shí)現(xiàn)技術(shù)時(shí),應(yīng)用系統(tǒng)大致可以分為六個(gè)層次,分別是:

  • 底層傳輸層 ==》消息的傳輸機(jī)制(HTTP、JMS、SMTP)
  • 服務(wù)通信協(xié)議層 ==》服務(wù)之間進(jìn)行消息傳遞所需的技術(shù)標(biāo)準(zhǔn)(SOAP和REST協(xié)議)
  • 服務(wù)描述層 ==》統(tǒng)一方式來描述服務(wù)的接口和消息交換方式(WSDL)
  • 服務(wù)層
  • 業(yè)務(wù)流程層
  • 服務(wù)注冊層

2、服務(wù)注冊表
主要在SOA設(shè)計(jì)時(shí)使用,任何幫助服務(wù)注冊、發(fā)現(xiàn)和查找服務(wù)合約、元數(shù)據(jù)和策略的信息庫、數(shù)據(jù)庫、目錄或者其他節(jié)點(diǎn),都可以認(rèn)為是一個(gè)服務(wù)注冊表。

3、ESB企業(yè)服務(wù)總線
ESB是由中間件技術(shù)實(shí)現(xiàn)并支持SOAde一組基礎(chǔ)架構(gòu),是傳統(tǒng)中間件技術(shù)與XML、Web Service等技術(shù)結(jié)合的產(chǎn)物,是整個(gè)企業(yè)集成架構(gòu)下的面向服務(wù)的企業(yè)應(yīng)用集成機(jī)制。

具體來說,ESB具有一下功能:
(1)支持異構(gòu)環(huán)境中的服務(wù)、消息和基于事件的交互,并且具有適當(dāng)?shù)姆?wù)級別和可管理性。
(2)幾乎不改代碼通過配置,就可以使現(xiàn)有系統(tǒng)具有全新的服務(wù)接口,并能夠在部署環(huán)境中支持任何標(biāo)準(zhǔn)。
(3)充當(dāng)緩沖器的ESB(負(fù)責(zé)在諸多服務(wù)之間轉(zhuǎn)換業(yè)務(wù)邏輯和數(shù)據(jù)格式)與服務(wù)邏輯想分離。
(4)提供諸如服務(wù)代理和協(xié)議轉(zhuǎn)換等功能。
(5)提供可配置的消息轉(zhuǎn)換翻譯機(jī)制和基于消息內(nèi)容的消息路由服務(wù)。
(6)提供安全和擁有者機(jī)制,保證消息和服務(wù)使用的認(rèn)證、授權(quán)和完整性。

ESB的優(yōu)勢:
(1)擴(kuò)展的、基于標(biāo)準(zhǔn)的連接。
(2)靈活的、服務(wù)導(dǎo)向的應(yīng)用組合。
(3)提高復(fù)用率,降低成本。
(4)減少市場反應(yīng)時(shí)間,提高生產(chǎn)率。(構(gòu)件和服務(wù)的復(fù)用)

三、微服務(wù)

微服務(wù),顧名思義,就是很小的服務(wù),所以它屬于面向服務(wù)架構(gòu)的一種,就像活字印刷術(shù)一樣,每個(gè)服務(wù)就是一個(gè)組件,通過編排組合的方式來使用,從而真正做到了獨(dú)立、解耦、組件化、易維護(hù)、可復(fù)用、可替換、高可用、最終達(dá)到提高交付質(zhì)量、速斷交付周期的效果。

1、核心特點(diǎn)
微服務(wù)的核心特點(diǎn)就是小,且專注于做一件事,輕量級的通信機(jī)制、松耦合、每個(gè)服務(wù)都是獨(dú)立部署的。

2、優(yōu)勢

  • (1)技術(shù)異構(gòu)性:意思就是微服務(wù)的每個(gè)服務(wù)都是一個(gè)獨(dú)立的個(gè)體,所以它可以做新技術(shù)的試驗(yàn)場,比如我們需要在現(xiàn)有的架構(gòu)引入一種新的DB或者使用一種新的編程語言,如果是傳統(tǒng)架構(gòu)的話,這個(gè)影響就非同尋常,需要做大量的測試,但是如果在微服務(wù)架構(gòu)中,你可以選擇的某一個(gè)微服務(wù)或者新增加的微服務(wù)中進(jìn)行試驗(yàn),對整體系統(tǒng)的影響就可以降低到最小。同時(shí),由于不同的微服務(wù)之間可能有不同的質(zhì)量屬性要求,這樣的情況下就可以為不同的微服務(wù)選擇使用適合自身的技術(shù)。

  • (2)彈性:可以進(jìn)行內(nèi)置可用性解決方案和功能降級方案。

  • (3)擴(kuò)展:可以針對單個(gè)服務(wù)進(jìn)行擴(kuò)展,不必?fù)?dān)心單個(gè)服務(wù)的擴(kuò)展對整個(gè)系統(tǒng)造成影響。

  • (4)簡化部署:不需因代碼變動重新部署整個(gè)系統(tǒng),只需要重新部署特定的服務(wù)。

  • (5)與組織結(jié)構(gòu)相匹配

  • (6)可組合性

  • (7)對可替代性的優(yōu)化

3、面臨的挑戰(zhàn)

  • (1)分布式系統(tǒng)的復(fù)雜度
    性能方面微服務(wù)是拆分成多個(gè)服務(wù)進(jìn)行部署,服務(wù)間的通信都是通過網(wǎng)絡(luò),此時(shí)的性能會受影響。同時(shí)可靠性也會受影響。數(shù)據(jù)一致性也要嚴(yán)格控制,成本比單塊系統(tǒng)要高。
  • (2)運(yùn)維成本
    同樣由于分開部署的原因,所以進(jìn)行部署、集成、配置、監(jiān)控或者日志收集等,成本比較高。
  • (3)部署自動化
    用于微服務(wù)的服務(wù)節(jié)點(diǎn)比較多,所以部署的時(shí)候需要用到持續(xù)集成的自動化部署技術(shù),如何有效地構(gòu)建自動化部署流水線,降低部署成本、提高部署效率,是微服務(wù)架構(gòu)下需要面臨的一個(gè)挑戰(zhàn)。
    -(4)DevOps與組織結(jié)構(gòu)
    DevOps作為微服務(wù)架構(gòu)中不可或缺的一部分,如何傳遞DevOps文化的價(jià)值,讓團(tuán)隊(duì)理解DevOps文化的價(jià)值,并構(gòu)建全功能團(tuán)隊(duì),也是一個(gè)不小的挑戰(zhàn)。
  • (5)服務(wù)間依賴測試
    服務(wù)比較多,如何保證服務(wù)的功能正確性,以及服務(wù)間正常地進(jìn)行交互。
  • (6)服務(wù)間依賴管理
    如何進(jìn)行服務(wù)間依賴的管理,清晰有效地展示服務(wù)間的依賴關(guān)系,成為了一個(gè)挑戰(zhàn)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容