面試官:SOA架構和微服務架構的區別是什麼?


點擊關注上方「程序員私房菜」,設爲「置頂或星標」,第一時間送達技術乾貨。程序員


做者:zpoisonweb

blog.csdn.net/zpoison/article/details/80729052spring

1.SOA架構和微服務架構的區別

首先SOA和微服務架構一個層面的東西,而對於ESB和微服務網關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現工具或組件。數據庫

1.SOA(Service Oriented Architecture)「面向服務的架構」:他是一種設計方法,其中包含多個服務, 服務之間經過相互依賴最終提供一系列的功能。一個服務 一般以獨立的形式存在於操做系統進程中。各個服務之間 經過網絡調用。編程

2.微服務架構:其實和 SOA 架構相似,微服務是在 SOA 上作的昇華,微服務架構強調的一個重點是「業務須要完全的組件化和服務化」,原有的單個業務系統會拆分爲多個能夠獨立開發、設計、運行的小應用。這些小應用之間經過服務完成交互和集成。api

微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想緩存

2.ESB和微服務API網關。

1.ESB(企業服務總線),簡單 來講 ESB 就是一根管道,用來鏈接各個服務節點。爲了集 成不一樣系統,不一樣協議的服務,ESB 作了消息的轉化解釋和路由工做,讓不一樣的服務互聯互通;服務器

2.API網關:API網關是一個服務器,是系統的惟一入口。從面向對象設計的角度看,它與外觀模式相似。API網關封裝了系統內部架構,爲每一個客戶端提供一個定製的API。它可能還具備其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜態響應處理。API網關方式的核心要點是,全部的客戶端和消費端都經過統一的網關接入微服務,在網關層處理全部的非業務功能。一般,網關也是提供REST/HTTP的訪問API。服務端經過API-GW註冊和管理服務。
微信


3.SOA架構特色:

系統集成:站在系統的角度,解決企業系統間的通訊問 題,把原先散亂、無規劃的系統間的網狀結構,梳理成 規整、可治理的系統間星形結構,這一步每每須要引入 一些產品,好比 ESB、以及技術規範、服務管理規範;這一步解決的核心問題是【有序】網絡

系統的服務化:站在功能的角度,把業務邏輯抽象成 可複用、可組裝的服務,經過服務的編排實現業務的 快速再生,目的:把原先固有的業務功能轉變爲通用 的業務服務,實現業務邏輯的快速複用;這一步解決 的核心問題是【複用】

業務的服務化:站在企業的角度,把企業職能抽象成 可複用、可組裝的服務;把原先職能化的企業架構轉變爲服務化的企業架構,進一步提高企業的對外服務能力;「前面兩步都是從技術層面來解決系統調用、系統功能複用的問題」。第三步,則是以業務驅動把一個業務單元封裝成一項服務。這一步解決的核心問題是【高效】

4.微服務架構特色:

1.經過服務實現組件化

  • 開發者再也不須要協調其它服務部署對本服務的影響。

2.按業務能力來劃分服務和開發團隊

  • 開發者能夠自由選擇開發技術,提供 API 服務

3.去中心化

  • 每一個微服務有本身私有的數據庫持久化業務數據

  • 每一個微服務只能訪問本身的數據庫,而不能訪問其它服務的數據庫

  • 某些業務場景下,須要在一個事務中更新多個數據庫。這種狀況也不能直接訪問其它微服務的數據庫,而是經過對於微服務進行操做。

  • 數據的去中心化,進一步下降了微服務之間的耦合度,不一樣服務能夠採用不一樣的數據庫技術(SQL、NoSQL等)。在複雜的業務場景下,若是包含多個微服務,一般在客戶端或者中間層(網關)處理。

4.基礎設施自動化(devops、自動化部署)

Java EE部署架構,經過展示層打包WARs,業務層劃分到JARs最後部署爲EAR一個大包,而微服務則打開了這個黑盒子,把應用拆分紅爲一個一個的單個服務,應用Docker技術,不依賴任何服務器和數據模型,是一個全棧應用,能夠經過自動化方式獨立部署,每一個服務運行在本身的進程中,經過輕量的通信機制聯繫,常常是基於HTTP資源API,這些服務基於業務能力構建,能實現集中化管理(由於服務太多啦,不集中管理就沒法DevOps啦)。

5.主要區別:

6.Dubbo服務的最佳實踐

分包

  • 服務接口、請求服務模型、異常信息都放在api裏面,符合重用發佈等價原則,共同重用原則

  • api裏面放入spring 的引用配置。也能夠放在模塊的包目錄下。

粒度

  • 儘量把接口設置成粗粒度,每一個服務方法表明一個獨立的功能,而不是某個功能的步驟。不然就會涉及到分佈式事務

  • 服務接口建議以業務場景爲單位劃分。並對相近業務作抽象,防止接口暴增

  • 不建議使用過於抽象的通用接口 T T<泛型>,接口沒有明確的語義,帶來後期的維護

版本

  • 每一個接口都應該定義版本,爲後續的兼容性提供前瞻性的考慮 version (maven -snapshot)

  • 建議使用兩位版本號,由於第三位版本號表示的兼容性升級,只有不兼容時才須要變動服務版本

  • 當接口作到不兼容升級的時候,先升級一半或者一臺提供者爲新版本,再將消費所有升級新版本,而後再將剩下的一半提供者升級新版本

預發佈環境

推薦用法

  • 在provider端儘量配置consumer端的屬性

  • 好比timeout、retires、線程池大小、LoadBalance

配置管理員信息

  • application上面配置的owner 、 owner建議配置2我的以上。由於owner都可以在監控中心看到

配置dubbo緩存文件

  • 註冊中心的列表

  • 服務提供者列表



END

若有收穫,請劃至底部,點擊「在看」,謝



近期熱門推薦👇


1.211 渣碩菜鳥的秋招之路!

2.如何去寫一手好SQL ?

3.從一個程序員的角度告訴你:12306有多牛逼?

4.程序員除了會CRUD以外,還要知道CQRS!

5.2018年全部精華文章彙總,錯過了血虧!


關注公衆號,回覆「BAT」
送進軍BAT超全優質視頻資源


點贊是最大的支持 


本文分享自微信公衆號 - 武哥聊編程(eson_15)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索