互聯(lián)網(wǎng)/程序員/技術/資料共享
來自:blog.csdn.net/zpoison/article/details/80729052
1.SOA架構和微服務架構的區(qū)別
首先SOA和微服務架構一個層面的東西,而對于ESB和微服務網(wǎng)關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現(xiàn)工具或組件。1.SOA(Service Oriented Architecture)“面向服務的架構”: 他是一種設計方法,其中包含多個服務, 服務之間通過相互依賴最終提供一系列的功能。一個服務 通常以獨立的形式存在與操作系統(tǒng)進程中。各個服務之間 通過網(wǎng)絡調(diào)用。2.微服務架構: 其實和 SOA 架構類似,微服務是在 SOA 上做的升華,微服務架構強調(diào)的一個重點是“業(yè)務需要徹底的組件化和服務化”,原有的單個業(yè)務系統(tǒng)會拆分為多個可以獨立開發(fā)、設計、運行的小應用。這些小應用之間通過服務完成交互和集成。微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想2.ESB和微服務API網(wǎng)關。
1.ESB(企業(yè)服務總線): 簡單 來說 ESB 就是一根管道,用來連接各個服務節(jié)點。為了集 成不同系統(tǒng),不同協(xié)議的服務,ESB 做了消息的轉化解釋和路由工作,讓不同的服務互聯(lián)互通;2.API網(wǎng)關: API網(wǎng)關是一個服務器,是系統(tǒng)的唯一入口。從面向?qū)ο笤O計的角度看,它與外觀模式類似。API網(wǎng)關封裝了系統(tǒng)內(nèi)部架構,為每個客戶端提供一個定制的API。它可能還具有其它職責,如身份驗證、監(jiān)控、負載均衡、緩存、請求分片與管理、靜態(tài)響應處理。API網(wǎng)關方式的核心要點是,所有的客戶端和消費端都通過統(tǒng)一的網(wǎng)關接入微服務,在網(wǎng)關層處理所有的非業(yè)務功能。通常,網(wǎng)關也是提供REST/HTTP的訪問API。服務端通過API-GW注冊和管理服務。3.SOA架構特點
系統(tǒng)集成: 站在系統(tǒng)的角度,解決企業(yè)系統(tǒng)間的通信問 題,把原先散亂、無規(guī)劃的系統(tǒng)間的網(wǎng)狀結構,梳理成 規(guī)整、可治理的系統(tǒng)間星形結構,這一步往往需要引入 一些產(chǎn)品,比如 ESB、以及技術規(guī)范、服務管理規(guī)范;這一步解決的核心問題是【有序】系統(tǒng)的服務化: 站在功能的角度,把業(yè)務邏輯抽象成 可復用、可組裝的服務,通過服務的編排實現(xiàn)業(yè)務的 快速再生,目的:把原先固有的業(yè)務功能轉變?yōu)橥ㄓ?的業(yè)務服務,實現(xiàn)業(yè)務邏輯的快速復用;這一步解決 的核心問題是【復用】業(yè)務的服務化: 站在企業(yè)的角度,把企業(yè)職能抽象成 可復用、可組裝的服務;把原先職能化的企業(yè)架構轉變?yōu)榉栈钠髽I(yè)架構,進一步提升企業(yè)的對外服務能力;“前面兩步都是從技術層面來解決系統(tǒng)調(diào)用、系統(tǒng)功能復用的問題”。第三步,則是以業(yè)務驅(qū)動把一個業(yè)務單元封裝成一項服務。這一步解決的核心問題是【高效】4.微服務架構特點:
1.通過服務實現(xiàn)組件化
開發(fā)者不再需要協(xié)調(diào)其它服務部署對本服務的影響。2.按業(yè)務能力來劃分服務和開發(fā)團隊
開發(fā)者可以自由選擇開發(fā)技術,提供 API 服務3.去中心化
- 每個微服務有自己私有的數(shù)據(jù)庫持久化業(yè)務數(shù)據(jù)
- 每個微服務只能訪問自己的數(shù)據(jù)庫,而不能訪問其它服務的數(shù)據(jù)庫
- 某些業(yè)務場景下,需要在一個事務中更新多個數(shù)據(jù)庫。這種情況也不能直接訪問其它微服務的數(shù)據(jù)庫,而是通過對于微服務進行操作。
- 數(shù)據(jù)的去中心化,進一步降低了微服務之間的耦合度,不同服務可以采用不同的數(shù)據(jù)庫技術(SQL、NoSQL等)。在復雜的業(yè)務場景下,如果包含多個微服務,通常在客戶端或者中間層(網(wǎng)關)處理。
4.基礎設施自動化(devops、自動化部署)
Java EE部署架構,通過展現(xiàn)層打包WARs,業(yè)務層劃分到JARs最后部署為EAR一個大包,而微服務則打開了這個黑盒子,把應用拆分成為一個一個的單個服務,應用Docker技術,不依賴任何服務器和數(shù)據(jù)模型,是一個全棧應用,可以通過自動化方式獨立部署,每個服務運行在自己的進程中,通過輕量的通訊機制聯(lián)系,經(jīng)常是基于HTTP資源API,這些服務基于業(yè)務能力構建,能實現(xiàn)集中化管理(因為服務太多啦,不集中管理就無法DevOps啦)。5.主要區(qū)別
6.Dubbo服務的最佳實踐
分包
- 服務接口、請求服務模型、異常信息都放在api里面,符合重用發(fā)布等價原則,共同重用原則
- api里面放入spring 的引用配置。也可以放在模塊的包目錄下。
粒度
- 盡可能把接口設置成粗粒度,每個服務方法代表一個獨立的功能,而不是某個功能的步驟。否則就會涉及到分布式事務
- 服務接口建議以業(yè)務場景為單位劃分。并對相近業(yè)務做抽象,防止接口暴增
- 不建議使用過于抽象的通用接口 T T<泛型>,接口沒有明確的語義,帶來后期的維護
版本
- 每個接口都應該定義版本,為后續(xù)的兼容性提供前瞻性的考慮 version (maven -snapshot)
- 建議使用兩位版本號,因為第三位版本號表示的兼容性升級,只有不兼容時才需要變更服務版本
- 當接口做到不兼容升級的時候,先升級一半或者一臺提供者為新版本,再將消費全部升級新版本,然后再將剩下的一半提供者升級新版本
預發(fā)布環(huán)境
推薦用法
- 在provider端盡可能配置consumer端的屬性
- 比如timeout、retires、線程池大小、LoadBalance
配置管理員信息
- application上面配置的owner 、 owner建議配置2個人以上。因為owner都能夠在監(jiān)控中心看到
配置dubbo緩存文件
推薦閱讀:
【190期】MQ消息中間件,面試能問寫什么?
【189期】delete后加 limit是個好習慣么
【188期】面試官:delete、truncate、drop的區(qū)別有哪些,該如何選擇
5T技術資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復「2048」,即可免費獲?。。?/span>微信掃描二維碼,關注我的公眾號
朕已閱 