一文帶你了解微服務架構和設計

2020-09-24 Java架構師技術棧分享

最近幾年微服務很火,大家都在建設微服務,如果不懂點微服務相關的技術,都不好意思跟同行打招呼了,也見過身邊很多人在微服務踩過很多坑,我從 16 年開始接觸微服務,有多家大型企業的微服務分布式系統的架構經驗,所以就打算跟大家做一期關於微服務的分享,不過微服務和涉及的分布式計算非常的複雜,絕非是一篇文章就可以講清楚的,本文只是從最簡單的概念的基本使用帶你入門,如果後續還有興趣的話,可以查閱相關的文獻和技術書籍去深入學習

本文的微服務分享以下三部分,總體大綱如下:

  • 微服務的概念和原則(理論)
  • Spring Cloud 如何低成本的實現微服務(實現)
  • Spring Cloud 大型項目的架構方案(真實案例)

微服務的概念和原則

什麼是微服務?

簡單舉例:看軍事新聞的同學應該都知道,一艘航空母艦作戰能力雖然很強,但是弱點太明顯,就是防禦能力太差,單艘的航空母艦很少單獨行動,通常航空母艦戰鬥群才是主要軍事力量,你可以把單艘航母理解為的單體應用(防禦差,機動性不好),把航母戰鬥群(調度複雜,維護費用高)理解為微服務。

簡單講特徵就是:

  • 單體應用:簡單,脆弱(某個模塊出問題,整個系統不可用),戰鬥力弱,維護成本低
  • 微服務架構:複雜,健壯(某個模塊出問題,不會影響系統整體的可用性),戰鬥力強,維護成本高

單體作戰的應用(圖)

微服務戰鬥群(圖)

大部分的開發者經歷和開發過單體應用,無論是傳統的 SSM,還是現在的 SpringBoot/Rails,它們都是單體應用,那麼長期陪伴我們的單體應用有什麼弊端?我們是面臨了什麼問題,導致我們要拋棄單體應用轉向微服務架構?個人總結主要問題如下:

  • 部署成本高(無論是修改1行代碼,還是10行代碼,都要全量部署替換)
  • 改動影響大,風險高,測試成本高(不論代碼改動多小,成本都相同)
  • 因為成本高,風險高,所以導致部署頻率低(無法滿足快速交付客戶需求)

當然還有例如無法滿足快速擴容,彈性伸縮,無法適應雲環境特性等問題

但我們不一一詳談了,以上的問題,都是微服務架構要解決的問題,至於具體是怎麼解決的,我們先放到後面再聊

歷代應用程式的架構變遷(圖)

解決什麼問題,又引入了什麼問題?

我們先看看微服務能帶給我們什麼?微服務架構的特點:

  • 針對特定服務發布,影響小,風險小,成本低
  • 頻繁發布版本,快速交付需求
  • 低成本擴容,彈性伸縮,適應雲環境

我們知道一個樸素的理念,沒有任何事物是完美的,任何東西都有兩面性,有得必有失

那麼在選擇微服務在解決了快速響應和彈性伸縮的問題同時,它又給我們帶來了什麼問題?個人總結如下:

  • 分布式系統的複雜性
  • 部署,測試和監控的成本問題
  • 分布式事務和 CAP 的相關問題

系統應用由原來的單體變成幾十到幾百個不同的工程,會所產生例如包括服務間的依賴,服務如何拆封,內部接口規範,數據傳遞等等問題,尤其是服務拆分,需要團隊熟悉業務流程,懂得取捨,要保證拆分的粒度服務既符合「高內聚,低耦合」的基本原則,還要兼顧業務的發展以及公司的願景,要還要說服團隊成員為之努力,並且積極投入,在多方中間取得平衡。

對於分布式系統,部署,測試和監控都需要大量的中間件來支撐,而且中間件本身也要維護,原先單體應用很簡單的事務問題 ,轉到分布式環境就變得很複雜,分布式事務是採用簡單的重試+補償機制,還是採用二階段提交協議等強一致性方法來解決,就要取決對業務場景的熟悉加上反覆的權衡了,相同問題還包括對 CAP 模型的權衡,總之微服務對團隊整體的技術棧水平整體要求更高

微服務又應該遵循哪些原則?

古人云:兵馬未動,糧草先行。建設微服務是需要建立長遠規劃,不是像寫 CMS 那樣建好資料庫表,然後就開始幹活,這樣十有八九是會失敗的。我們要進行微服務改造前,架構師要提前做好規劃,我們把這裡分為三步,前期階段,設計階段,技術階段

前期階段,大致要做好如下事情:

  • 和多方充分溝通,確保能符合客戶和組織的需求,並且得到認同
  • 和團隊溝通,讓隊友(開發/測試/運維)理解,並且積極投入
  • 和業務部門溝通,指定版本計劃和上線時間

設計階段,參考 Sam Newman 的著作《微服務設計》,單微服務必須要滿足以下的條件,才符合微服務的基本要求:

  • 標準的 REST 風格接口(基於 HTTP 和 JSON 格式)
  • 獨立部署,避免共享資料庫(避免因為資料庫而影響整個分布式系統)
  • 業務上的高內聚,減少依賴(從設計上要避免服務過大或者太小)

龐大的分布式系統,需要強大基礎設施來支撐,微服務涉及哪些基礎設施?

  • CI/CD和自動化(分布式系統幾乎不可能通過人工手動發布)
  • 虛擬化技術(要保證微服務運行環境隔離,目前行業主流的是使用 Docker 容器)
  • 日誌聚合,全鏈路監控(高度可觀察和分析診斷問題)

說了那麼多,那什麼樣的情況下,你的團隊不適合建設微服務?(請勿對號入座)

  1. 開發團隊不具備自主性,所在組織對開發團隊限制非常多(具體請參考 康威定律)
  2. 團隊不熟悉業務,無法識別出服務的邊界,進行合理的拆分(請參考 DDD 領域驅動設計)

微服務設計其實是很早就有的設計思想,因為隨著虛擬化技術的崛起,微服務可以低成本的實現,所以也開始流行和興起。

微服務的內涵很深,其中就包括,自動化,去中心化,獨立性等等,其中細節無法用一篇文章概述清楚,我們在做技術選型或者方案的時候,儘可能多去了解技術的本身和起源再結合我們業務的特點,進行更好的選擇。

如何低成本的實現微服務的 ?

Spring Cloud 為什麼是國內最流行的微服務框架,它提供哪些開箱即用的組件 ?概覽如下:

  • Srping Boot 服務應用
  • Spring Cloud Config 配置中心
  • Spring Cloud Eureka 服務發現
  • Spring Cloud Hystrix 熔斷保護
  • Spring Cloud Zuul 服務網關
  • Spring Cloud OAuth 2 服務保護
  • Spring Cloud Stream 消息驅動
  • 分布式全鏈路跟蹤
  • 部署微服務

建議參考資料:微服務架構集成,雲計算最佳實踐

Spring Boot 微服務基石

SpringBoot是構建微服務的理想框架,主要得益於 SpringBoot 可以打包成為單個可執行JAR文件交付服務,Spring Actuator 公開服務健康信息都是微服務的基石,為什麼這麼說 ?

我們先看看構建微服務的 4 個重要原則

  • 服務應該是獨立和可獨立部署的
  • 應該從中央(配置中心)讀取配置
  • 對客戶端是透明的
  • 傳達健康信息

微服務有優點和缺點,並非所有應用都適合用微服務架構,架構師需要能做到以下要求:

  • 分解業務問題:描述業務問題,注意動詞,尋找數據內容
  • 建立服務粒度:講大服務重構到更小的服務,重點關注服務如何相互交互,服務職責隨時間改變
  • 定義服務接口:擁抱REST的理念,使用URI來傳達意圖,使用HTTP狀態碼傳達結果

糟糕的微服務有哪些特徵?

  • 過於粗粒度:服務承擔過多的職責,服務跨大量表來管理數據,測試用例太多
  • 過於細粒度:服務彼此依賴嚴重,服務內部沒有邏輯

何時不應該使用微服務 ?

  • 不願投入(需要高度成熟的運維,伸縮,複雜性問題)
  • 管理 / 監控散亂的伺服器也需要很高的成本
  • 小型應用不適合,太昂貴
  • 數據事務(分布式系統處理事務非常困難)

Spring Cloud Config 配置服務

Spring Config 是 Spring 提供的配置中心輕量級實現,基於 Git 存儲,

國內用戶大多推薦使用 Alibaba 開源的 Nacos (集成配置中心和註冊中心)都是非常不錯的配置中心的實現

微服務程序對於配置中心的幾點管理原則:

  • 應用程式的配置和部署的實際代碼分離(配置中心和應用程式分離)
  • 集中(將配置中心集中在少量的存儲庫中)
  • 穩定(配置中心要保證高可用)

Spring Config 這款配置中心提供的核心功能:

  • 配置伺服器允許使用環境特定值
  • 使用Spring Profile區分環境值
  • 可以使用基於文件或基於Git存儲屬性
  • 允許對稱加密和非對稱加密

Spring Cloud Eureka 服務發現

服務發現是微服務架構中非常重要的概念,也稱註冊中心類似我們生活中的房地產中介的角色,買房賣房都要通過它,所以是所有微服務上線/下線的必經之路,也掌握微服務的生殺大權,註冊中心會根據 CAP 策略和對微服務的健康檢查,作出對具體服務剔除,下線,恢復上線等操作,主要還有以下幾個核心功能:

  • 快速對環境中服務數量水平伸縮(功能和 k8s 有些重合,不過也可以設定具體服務的運行時數量)
  • 抽象服務的物理位置(微服務通常運行在 Docker 容器內,沒有固定 IP,只能通過註冊中心才能找到它)
  • 提高程序的彈性,自動伸縮
  • 信息共享, 健康檢測

微服務架構裡面要實現註冊中心,需要達到哪些基本要求?

  • 高可用,註冊信息共享(註冊中心集群部署),不可能因為註冊中心掛了,導致所有集群不可用
  • 負載均衡(對服務間的動態請求負載均衡),合理在服務間分配流量
  • 有彈性(客戶端緩存服務信息)
  • 容錯,健康檢查(檢測壞掉的服務自動移除,無需人工幹預)

Spring Eureka 提供的服務發現實現,具備哪些特點 ?

  • 服務發現抽象服務的物理位置
  • 無感知添加和移除服務
  • 為服務間調用提供負載均衡
  • 使用 3種不同機制來調用服務:DiscoveryClient,支持Ribbon的RestTemplate,Netflix的FeignClient

Spring Cloud Hystrix 熔斷保護

熔斷的概念非常好理解,比如當我們家裡的消耗電量負載太高,到達設定的閾值的時候,電路系統就會啟動熔斷機制,也叫過載保護,通過跳閘,強行斷電的方式,來保護整體電路的穩定,熔斷在微服務中的概念也是一樣,是保護是微服務穩定的防火牆,避免單個服務潰崩或者異常導致出現整個集群系統的雪崩和連鎖反應現象

為什麼微服務進行熔斷 ?當一個服務出現問題:

  • 通常都是從小部分開始,到耗盡線程徹底崩潰
  • 服務間調用會長時間阻塞
  • 服務未關閉就會一直被調用,導致連鎖效應
  • 一個性能不佳的服務可以迅速拖垮整個應用

為什麼熔斷很重要 ?

  • 每個節點(調用服務和資料庫)實現斷路器,可以避免服務崩潰的連鎖效應
  • 實現只有出問題的服務受影響,其餘的服務功能都是完整的(影響範圍降到最小)
  • 熔斷是伺服器的靈活的基礎

斷路器提供的關鍵能力

  • 快速失敗
  • 功能降級(替代方案)
  • 無縫恢復(斷路器定期檢查,自動恢復服務)

Netflix 研發和出品的 Hystrix 實現是一款成熟穩定的熔斷實現,在 Netflix 在生產實踐和運行多年,非常可靠,後面加入 Spring Cloud 體系,成為 Spring Cloud 微服務生態鏈的一員,使用起來也非常的簡單和方便

Hystrix 支持 4 種斷路模式:

  • 客戶端負載均衡模式(檢測服務出錯,移除服務)
  • 斷路器模式(出現超時拋出異常強行失敗,超過閾值強行失敗所有調用)
  • 後備模式(不是拋出異常而是執行替代方案,例如排隊,稍後再試等)
  • 艙壁模式(把遠程調用的資源分配到獨立的線程池中,調用出問題只是線程池飽和並停止請求)

跳閘會導致的3種結果:

  • 服務B立即知道服務C有問題,不必等待,立即失敗
  • 服務B執行服務C的替代代碼來採取行動(後備模式)
  • 服務C可以在跳閘後,檢查問題,快速恢復

熔斷的幾個處理原則:

  • 設計分布式應用必須考慮彈性
  • 服務的徹底故障是很容易檢測和處理,只是需要時間,斷路器給了這個時間窗口
  • 一個服務性能不佳,可能導致集群崩潰,因為相互調用會阻塞線程,耗盡資源
  • Hystrix支持兩種隔離模型,即 THREAD 和 SEMAPHORE

Spring Cloud Zuul 網關

網關是整個微服務分布式集群的入口,對於用戶來說,用戶無需知道你每個服務的地址,只需要記住網關地址就可以了,這樣理解可能比較抽象,舉一個生活的例子,微服務集群是一個大型公司,公司內部有很多個不同的職能部門(對應每個微服務),但是你如果要訪問具體的職能部門,你必須先到前臺登記,再由前臺帶你到你想訪問的具體職能部門去辦理實際的業務(智能路由)

微服務對於網關實現的規範:

  • 一個獨立負責所有服務調用過濾和路由的服務
  • 服務和客戶端的中間人,簡化客戶端開發

網關通常要做哪些事情:

  • 靜態路由,從註冊中心獲取每個微服務的具體位置
  • 動態路由(根據參數特點,調用特定服務,少量用戶體驗新功能,通常用於灰度發布)
  • 驗證和授權:驗證訪客的身份信息(統一驗證,服務只需要關注業務邏輯)
  • 數據收集和日誌(收集調用次數和響應時間等)

Zuul 網關的具體運行參考圖:

Spring Cloud Zuul 是初期版本的 API 網關實現,提供以下功能:

  • 結合 Spring Cloud Eureka 將服務發現的註冊地址加入到 Zuul 路由
  • Zuul 可以給所有服務輕鬆的添加 /api 之類的前綴路由地址
  • 在全局上定製 Zuul 的 Spring Cloud Hystrix 和 Spring Cloud Ribbon (調度策略)的超時
  • 實現動態路由,不同版本進行A/B測試
  • 檢查參數合法性等,例如 JWT,時間戳等等

Spring Cloud OAuth 2 服務保護

Oauth 2 是用於保證請求的合法和正確性,為了讓微服務本身更加專注於業務,所以 OAuth 2 類似配置中心被單獨抽離出來作為基礎組件的統一認證中心來使用,OAuth 2 的作用類似我們生活中的公安局的角色,當我們需要去正規機構辦理業務的時候,我們需要提供有效的身份證(合法的身份認證標示),如果沒有你就需要去公安局(OAuth)申請一張在有效期內的身份證(Token),然後帶著這張身份證我們才能去購買機票,酒店等其他社會服務(微服務),社會服務機構在拿到你提供的身份證(Token)後,也會向公安局(OAuth)聯網發送信息,來驗證你的身份證的合法性(Token 合法性校驗),身份認證不通過就會被拒絕服務,合法的身份才能進行業務的辦理,關於 OAuth 的工作流程,可以結合下圖來理解:

微服務對於 OAuth2 規範的4種類型授權:密碼/客戶端憑據/授權碼/隱式

Spring Cloud OAuth 2 為我們提供哪些便利?

  • 安全框架,提供令牌生成,驗證等邏輯
  • 開箱即用,和其他服務無縫集成
  • 行業標準,輕鬆與雲服務商集成

OAuth 2:/auth/oauth/token的返回信息

  • access_token(OAuth2令牌,每次調用出示)
  • token_type(令牌類型,常用bearer token)
  • refresh_token(續約令牌)
  • expires_in(過期描述,默認12H)
  • scope(令牌有效作用域)

OAuth 2 支持 JWT (JSON Web Token)的規範,關於 JWT 的原理就不特別解釋了,簡單的 JWT 有以下幾個特點

  • 小巧(Base64編碼)
  • 密碼籤名(防篡改)
  • 自包含(不需要調用驗證服務確認內容,通過相同的密鑰進行對稱解密)
  • 可擴展(可在令牌內包含額外的信息)

OAuth 2 的簡單總結:

  • OAuth2 是一個令牌驗證框架
  • 使用OAuth2 需要建立OAuth2驗證服務
  • 調用受保護的資源都要通過OAuth2驗證

Spring Cloud Stream 消息驅動

我們和世界的互動不是同步的,很多時候是基於消息異步驅動模型,比如郵件,點餐,訂票等等,想要了解 Spring Cloud Stream,必須先要理解基於事件(MQ)編程的模型,基於消息驅動有利於開發構建高度解耦的系統,因為 Spring Cloud Stream 並不是自己實現了消息中間件,而是對於市場上主流(例如 RabbitMQ,KafKa)的 MQ 產品做了一層封裝和抽象,Spring Cloud Stream 做的事情並不是什麼新鮮的事情,非常類似 ORM 所做的事情,了解 ORM 框架的同學應該都熟悉對於多種資料庫(MySQL,Oracle,SQL Server)產品的抽象是何等重要,面向 ORM 進行資料庫訪問,可以讓你脫離對於指定資料庫產品的深度依賴和綁定,而且可以不用特意去學習不同資料庫的本地化特性和方言,降低學習成本,假如你想從 Oracle 遷移到 MySQL 上面,幾乎是不需要改動一行代碼,只需要改動 ORM 的配置就可以實現了,參考下圖簡單了解一下 ORM:

Spring Cloud Stream 類似 ORM,你只需要基於 Spring Cloud Stream 提供的消息模型進行編程,至於底層的消息組件是用的 RabbitMQ 還是 kafka 還是其他的消息中間件產品,都沒有關係,甚至更換底層消息組件也不會對你的應用產生任何影響,這就是標準化所帶來的收益,關於如何更好的理解 Spring Cloud Stream 工作模型可以簡單參考下圖:

微服務中使用的的兩種服務通信方式對比:

  1. 同步:通過REST端點接口進行請求:服務之間緊耦合(強依賴),服務之間的脆弱性(連鎖效應),增加新的消費者不靈活
  2. 異步:基於消息中間件通信:鬆耦合(無接口直接調用的依賴),耐久性(服務重啟後可以消費歷史消息),可伸縮性(消息過多可啟動多服務來處理消息),靈活性(輕鬆添加新的消費者)

消息傳遞架構的缺點:

  1. 消息處理語義:消息順序處理,消息異常處理
  2. 消息可見性:消息不會立刻被處理,事務關聯ID在消息中的傳遞

消息中放置什麼數據 ?

  1. 消息體要儘可能的小,減少傳輸成本:通常只返回action類型和id,然後用id獲取最新數據
  2. 只使用消息傳遞狀態:在消息中包含版本號和時間戳,處理數據服務可以檢查數據的版本號

Spring Cloud Stream 的消息模型和概念:

  • 發射器(Source):接收對象(對象表示要發布的消息),序列化對象,將消息發布到通道
  • 通道(Channel):隊列的抽象,通道寫在配置文件,更改配置切換通道(讀取和寫入隊列)
  • 綁定器(Binder):與消息平臺對話的 Spring 代碼,不必依賴特定的API來發布和消費消息
  • 接收器(Sink):從隊列接收消息,將消息反序列化為POJO

Spring Cloud Stream 的簡單總結:

  • 使用消息傳遞的異步通信是微服務架構的關鍵部分
  • 使用消息傳遞可以使服務能夠伸縮並且更具有容錯性
  • Spring Cloud Stream 通過簡單的註解抽象底層的消息平臺細節

Sleuth 和 Zipkin 分布式跟蹤

微服務分布式架構帶來了複雜度,成本最高的就是跟蹤檢查和運維,分布式意味要在多個服務,機器跟蹤一個事務,Sleuth 和 Zipkin 都是用於 Spring Cloud 服務體系的分布式跟蹤技術,先直接看下最終效果,下圖一個簡單的可視化鏈路跟蹤調用,ZipKin 可以清晰的看到一個客戶端請求在每個服務上面處理所消耗的事情,點擊進去可以看到具體的事務執行內容,方便排查錯誤

Spring Cloud Sleuth 的工作流程:

  1. 透明地創建並注入一個關聯ID到服務調用中
  2. 管理關聯ID到出站服務調用的傳播
  3. 將關聯信息添加到Spring的MDC日誌記錄(應用/跟蹤ID/跨度ID/數據發送)
  4. 將服務調用中的跟蹤信息發布到Zipkin跟蹤平臺

Open Zipkin 的簡單概述:

  1. 調用鏈使用一張乾淨簡潔的圖片,比一百萬條日誌要好看的多
  2. 分布式跟蹤平臺,用於跟蹤多個服務調用的事務
  3. 圖形的方式查看事務佔用的時間量,分解每個服務所用的時間
  4. 4種不同的數據存儲:內存數據/MySQL/Cassandra/Elasticsearch

關於微服務全鏈路跟蹤的總結:

  • SpringCloudSleuth 可以無縫將關聯ID添加到微服務中
  • 可以使用關聯ID查看事務涉及的所有服務行為
  • 關聯ID需要與日誌聚合結合使用
  • 日誌平臺很重要,但是可視化跟蹤事務也是有價值的工具

部署微服務

構建和部署管道是微服務架構中最要的部分,微服務的主要特點是快速構建,修改,發布

符合微服務特徵的部署要達到以下幾個要求:

  1. 自動的(自動構建和部署代碼
  2. 完整的(軟體成品是鏡像),不可變(發布過程不可人為幹預)
  3. 良好的微服務部署管道應該允許在幾分鐘部署新功能和修復bug

Spring Cloud 大型項目的架構方案

真實案例講解

這是一個真實用於國內某大型企業的微服務架構體系,支撐日均百萬訂單的項目,因為已經過了2年的保密期,所以可以拿出來分享

剛好可以結合前面凌亂的知識點,看看 Spring Cloud 這套組件是如何搭建起來的,整套微服務就是下面這張架構圖:

具體每個組件的作用就不在這裡詳細說明了,在這套架構方案裡面

我們沒有完全照搬 Spring Cloud 全家桶的組件,還是根據自己的需求對其中組件進行的更換例如:

  • 配置中心從 Spring Cloud Config 更換為 Apollo ,除了有更好的性能,還有更加簡化的操作頁面,修改配置文件毫秒級響應
  • 服務發現 Eureka 官網已經停止維護,我們後面更換為 Alibaba Nacos,服務註冊和心跳檢測都提升到毫秒級,Eureka 是90秒輪詢
  • 分布式任務調度引入了 XXL-JOB,這是國內主流的分布式任務調度平臺,沒有特別需要說明的地方
  • 日誌聚合也是用了主流的 ELK 技術方案,用於收集和檢索日誌

相關焦點

  • 一文詳解微服務架構
    專注於Java領域優質技術,歡迎關注作者:古霜卡比本文將介紹微服務架構和相關的組件,介紹他們是什麼以及為什麼要使用微服務架構和這些組件。本文側重於簡明地表達微服務架構的全局圖景,因此不會涉及具體如何使用組件等細節。要理解微服務,首先要先理解不是微服務的那些。
  • 阿里資深架構師帶你深入了解微服務架構實戰
    「微服務 」一詞源於Martin Fowler 的名為 Microservices 的博文,簡單地說, 微服務是系統架構上的一種設計風格經過多年的發展, Martin Fowler 在 Microservices 一文中,提煉出了微服務架構的九大特性, 用於指導大家設計架構。
  • 大牛帶你實時解讀微服務架構改造案例:天氣預報系統的架構設計
    天氣預報系統的架構設計到目前為止,天氣預報系統已經初具規模了。我們不但實現了天氣數據的採集,還實現了數據的緩存、天氣數據的API服務及天氣預報UI界面等功能。天氣預報系統就是一個大而全的單塊架構系統,裡面混雜了太多的功能,可以預見的是,如果越往後發展,則系統會變得越來越難以管理和維護。
  • 微服務架構設計實踐總結和思考
    今天繼續談下在微服務架構設計中的一些實踐和思考。對於SOA和微服務,我前面很多文章都進行了詳細的闡述,今天這篇文章重點還是放在一些架構設計和實踐的一些關鍵點思考上面。  在微服務架構實踐中經常看到的情況就是前期架構設計不充分,相關的邊界劃分不明確,接口定義不明確,導致後期微服務在設計開發過程中持續大量的交互,同時隨意的增加和定義新的API接口,這種場景下必然帶來後續接口交互和管控治理的混亂。
  • 微服務架構及設計模式還能這麼理解,不愧是阿里架構師
    以微服務架構為例,市面上關於微服務架構的資料有太多太多,但真正能系統的讓讀者對微服務架構腦子裡有一個很好的概念的資料並不多。而我今天要與大家介紹的文檔大家肯定可以從中獲益,了解微服務架構,掌握微服務架構,自己實踐微服務架構。
  • 阿里微服務布道師:詳解微服務架構設計
    (設計系統的組織,其產生的設計和架構等價於組織間的溝通結構。)微服務也指一種種鬆耦合的、有一定的有界上下文的面向服務架構。也就是說,如果每個服務都要同時修改,那麼它們就不是微服務,因為它們緊耦合在一起;如果你需要掌握一個服務太多的上下文場景使用條件,那麼它就是一個有上下文邊界的服務,這個定義來自DDD領域驅動設計。
  • IBM高級架構師結合Java多線程和Socket,帶你實戰微服務架構
    微服務架構的概念,現在對於大家應該都不陌生,無論使用 Apache Dubbo、還是 Spring Cloud,都可以去嘗試微服務,把複雜而龐大的業務系統拆分成一些更小粒度且獨立部署的 Rest 服務。但是你了解微服務的發展背景嗎?接下來,咱們一塊深入微服務的發展背景,也幫大家夯實一下微服務架構的技術發展。
  • 還不了解什麼是架構?阿里P8資深架構師帶你從分布式到微服務
    什麼是架構?軟體架構(software architecture)是一系列相關的抽象 模式,用於指導大型 軟體系統各個方面的設計。軟體架構是一個系統的草圖。軟體架構描述的 對象是直接構成系統的抽象組件。各個組件之間的連接則明確和相對細緻地描述組件之間的通訊。
  • 帶你了解 2020 年微服務現狀
    同時專家們還預測,到了 2022 年,90% 的應用程式將會使用微服務架構進行開發。本文將幫助你了解什麼是微服務,以及目前的公司如何使用它的。微服務已經在全球範圍內被廣泛使用。但是,微服務到底是什麼?微服務是一種基於許多小型、互聯服務的體系結構模式。它們基於 單一責任原則。根據 Robert C.
  • 美國克裡斯·理查森的微服務架構設計模式藍光版PDF免費開源
    架構的關鍵是什麼?架構就是取捨,進而架構師就是做出取捨的人。大家都認同,做架構的人的特徵之一應該是「Independent」(獨立),這也是我選擇做獨立解決方案進而設計產品的重要原因。在我們看來,只有獨立才有可能讓我們在做架構設計時做出中立和獨特的方案。
  • Netflix 微服務架構設計解析
    Netflix 還是微服務架構背後的首批主要推動者之一。微服務鼓勵關注點分離來解決單體軟體設計存在的問題。在這種架構中,大型程序通過模塊化和獨立的數據封裝被分解為許多較小的軟體組件。微服務還通過水平擴展和工作負載分區來提升可擴展性。
  • 詳解微服務架構(一):什麼是微服務
    解析微服務架構系列文章將分幾篇描述微服務的定義、特點、應用場景、企業集成架構的演進以及微服務轉型思路和技術決策考慮等內容,並以IBM技術為例介紹如何實現微服務架構轉型。為什麼需要微服務架構「微服務」架構是近期軟體應用領域非常熱門的概念。
  • 可容錯的微服務架構設計
    本文介紹了基於RisingStack 的 Node.js 諮詢和開發經驗構建和操作高可用性微服務系統的最常見技術和架構模式。如果你不熟悉本文中的模式,那並不一定意味著你做錯了。建立可靠的系統總是會帶來額外的成本。
  • 一文帶你詳解微服務與網關技術,為你的開發庫擴容
    在微服務設計中如何界定一個微服務,就是使用鬆耦合&高內聚原則,把因相同因素變化的事情聚集在一起,把因不同因素變化的事情區隔開來。二、微服務架構特性微服務,其實是一種架構風格...2.3 擴展龐大的單體服務只能作為一個整體進行擴展,即使系統中只有一小部分模塊存在性能問題,也需要對整個系統進行擴展。而微服務架構可以根據性能需要對不同的模塊進行水平擴展,微服務的彈性也可以很好地處理服務不可用和功能降級問題。
  • AliP9整理出微服務筆記:Spring微服務不止架構和設計
    微服務是一種架構風格,也是一種針對現代業務需求的軟體開發方法。微服務並非發明出來的,確切地說是從之前的架構風格演進而來的。但是深入介紹Spring Boot、Spring Cloud、Docker、 Mesos和Marathon掌握響應式微服務設計原則,輕鬆構建大規模、可擴展的網際網路級微服務的文章近乎沒有。本文各章的內容都很實用,細緻講授了如何將微服務技術與業務相結合。
  • 武漢課工場JAVA培訓:一文帶你了解雲原生
    武漢課工場JAVA培訓:一文帶你了解雲原生自進入雲計算時代後,大量的新概念這可不止是簡單的把原先在物理伺服器上的應用遷移到虛擬機裡,不止是基礎設施和運行平臺在雲上,應用架構、應用開發方式、應用部署方式、應用維護方式全都要做出改變。 雲原生的四大核心要素便是微服務技術、DevOps、持續交付、容器化。
  • 全面解析 Netflix 的微服務架構設計
    儘管 Netflix 必須重建整個技術體系,以使其能在 AWS 雲上平穩運行,但作為回報,系統的可擴展性和服務可用性得到顯著提高。Netflix 還是微服務架構背後的首批主要推動者之一。微服務鼓勵關注點分離來解決單體軟體設計存在的問題。在這種架構中,大型程序通過模塊化和獨立的數據封裝被分解為許多較小的軟體組件。
  • 精讀| 什麼是微服務架構?
    你考慮過嗎?什麼是微服務,為什麼越來越多的企業,為了使自己構建的應用滿足客戶的期望,而和微服務架構進行整合呢?這篇博文可以幫助你理解,開發者們是如何根據自己的需求,使用微服務來擴展應用的。在這篇文章中,你將了解到:● 為什麼要用微服務?● 什麼是微服務?
  • Github標星67.9k的微服務架構以及架構設計模式筆記我粉了
    微服務架構是什麼?我們都知道微服務架構是一種架構概念,旨在通過將功能分解到各個離散的服務中以實現對解決方案的解耦。你可以將其看作是在架構層次而非獲取服務的類上應用很多SOLID原則。微服務架構是個很有趣的概念,它的主要作用是將功能分解到離散的各個服務當中,從而降低系統的耦合性,並提供更加靈活的服務支持。
  • 分布式微服務架構設計原理
    一、單體服務架構1、JEE架構:UI、EJB邏輯層、資料庫2、去中心化服務治理微服務架構倡導去中心化的服務管理和治理,儘量不要設置中心化的管理服務,最差在中心化管理服務癱瘓時有替代方案和設計。4、微服務的分解和組合模式分解:微服務架構需求分析和架構設計中,通常用領域的動詞和名詞來劃分。拆分後,系統具有敏捷性、靈活性、可伸縮性。