本文既包含了微服務的原理、原則,又包含了實際落地中的架構設計模式;既包含可觸類旁通的理念和概念,也包含相似領域驅動設計、Saga實現事務操做、CQRS構建事件驅動系統等具體可套用的示例。本書能夠幫助讀者把傳統的單體巨石型應用按部就班地改造爲微服務架構,從微服務的拆分,微服務架構下業務邏輯的設計以及事務、API、 通訊等的實現,一直到微服務系統的測試與生產上線,幫助讀者創建從無到有的完整微服務系統搭建的生命週期。web
8.1外部API的設計難題編程
爲了探索與API相關的各類問題,讓咱們考慮一下FTGO應用程序。如圖8-1所示,該應用程序的服務由各類客戶端使用。使用服務API的客戶端一共有四種:設計模式
■Web應用程序,如Consumer web 應用程序一爲 消費者實現基於瀏覽器的用戶界面,Restaurant web 應用程序一實 現基於瀏覽器的餐館用戶界面,以及AdminWeb應用程序一實 現供內部管理員使用的用戶界面。瀏覽器
■在瀏覽器中運行的JavaScript應用程序。網絡
■移動應用程序,一個供消費者使用,另外一個供送餐員使用。架構
■由第三方開發人員編寫的應用程序。框架
Web應用程序在防火牆內部運行,所以它們經過高帶寬、低延遲的局域網訪問服務。其餘客戶端在防火牆以外運行,所以它們經過較低帶寬、較高延遲的互聯網或移動網絡訪問服務。less
API的一種設計思路是讓客戶端直接調用服務。從表面上看,這聽起來很是簡單,畢竟,這就是客戶端調用單體應用程序的API的方式。但因爲存在如下弊端,這種方法不多用於微服務架構:編程語言
■細粒度服務API要求客戶端發出多個請求以檢索所需的數據,這樣作效率低,而且可能致使糟糕的用戶體驗。分佈式
■因爲客戶端了解每項服務以及服務的API從而致使封裝不足(緊耦合),所以從此很難更改服務的架構和API。
」服務可能使用對客戶端而言不便或不能使用的進程間通訊機制,尤爲是防火牆外的客戶端。
要了解有關這些弊端的更多信息,讓咱們來看看FTGO移動應用程序如何從服務中檢索數據。
8.1.1 FTGO 移動客戶端API的設計難題
消費者使用FTGO移動客戶端來下訂單和管理他們的訂單。想象一下,你正在開發移動客戶端的View Order視圖,該視圖顯示訂單。如第7章所述,此視圖顯示的信息包括基本訂單信息,如訂單狀態、付款狀態、餐館視角下的訂單狀態,以及送餐狀態(包括其位置和運輸過程當中的預計送餐時間)。
FTGO應用程序的單體版本具備返回訂單詳細信息的API接口。移動客戶端經過發出單一請求來檢索所需的信息。相比之下,在FTGO應用程序的微服務版本中,如前所述,訂單詳細信息分散在多個服務中,包括如下內容:
■Order Service: 基本訂單信息,包括詳細信息和狀態。
■Kitchen Service: 餐館視角下的訂單狀態以及送餐員能夠取餐的預計時間。
■Delivery Service: 訂單的送餐狀態,預計送餐時間和當前位置。
若是移動客戶端直接調用服務,則必須如圖8-2所示,進行屢次調用以檢索此數據。
在此設計中,移動應用程序扮演着API組合器的角色。它調用多個服務並組合結果。儘管這種方法看似合理,但它有幾個嚴重的問題。
...........................
8.1.2其餘類型客戶端API的設計難題
8.2 API Gateway模式
8.2.1什麼是 API Gateway模式
8.2.2 API Gateway模式的好處和弊端
8.2.3以Netlix爲例的API Gateway
8.2.4 API Gateway的設計難題
8.3實現一個 API Gateway
8.3.1使用現成的 API Gateway產品或服務
8.3.2開發本身的API Gateway
8.3.3使用GraphQL實現API Gateway
12.1部署模式: 編程語言特定的發佈包格式
12.1.1使用編程語言特定的發佈包格式進行部署的好處
12.1.2使用編程語 言特定的發佈包格式進行部署的弊端
12.2部署模式: 將服務部署爲虛擬機
12.2.1將服務部署爲虛擬機的好處
12.2.2將服務部署爲虛擬機的弊端
12.3部署模式: 將服務部署爲容器
12.3.1使用 Docker部署服務
12.3.2將服務部署爲容器的好處
12.3.3將服務部署爲容器的弊端
12.4使用Kubernetes部署FTGO應用程序
12.4.1什麼是Kubernetes
12.4.2在 Kubernetes.上部署Restaurant Service
12.4.3部署 API Gateway
12.4.4零停機部署
12.4.5使用服務網格分隔部署與發佈流程
12.5部署模式: Serverless部署
12.5.1使用 AWS Lambda進行Serverless部署
12.5.2開發Lambda函數
12.5.3調用Lambda函數
12.5.4使用Lambda函數的好處
12.5.5使用Lambda函數的弊端
12.6使用AWS Lambda和AWS Gateway部署RESTful服務
12.6.1 AWS Lambda版本的Restaurant Service
12.6.2把服務打包爲ZIP文件
12.6.3使用Serverless 框架部署Lambda函數
這份微服務架構設計模式PDF,小編已經爲你們整理完畢,PDF內容完整,須要免費領取麻煩幫忙轉發一下這篇文章+關注我,而後掃碼免費獲取。
第1章逃離單體地獄
第2章服務的拆分策略
第3章微服務架構中的進程間通訊
第4章使用Saga管理事務
第5章微服務架構中的業務邏輯設計
第6章使用事件溯源開發業務邏輯
第7章在微服務架構中實現查詢
第8章外部API 模式
第9章微服務架構中的測試策略(上)
第10章微服務架構中的測試策略(下)
第11章開發面向生產環境的微服務應用
第12章部署微服務應用
第13章微服務架構的重構策略
最後的最後小編想對讀者朋友們說:
第一,要記住微服務不是解決全部問題的萬能「銀彈」。
第二,編寫整潔的代碼和使用自動化測試相當重要,由於這是現代軟件開發的基礎。
第三,關注微服務的本質,即服務的分解和定義,而不是技術,如容器和其餘工具。
第四,確保你的服務鬆耦合,而且能夠獨立開發、測試和部署,不要搞成分佈式單體(Distributed Monolith),那將會是巨大的災難。
第五,也是最重要的,不能只是在技術上採用微服務架構。擁抱DevOps的原則和實踐,在組織結構上實現跨職能的自治團隊,這必不可少。
還必須記住:實現微服務架構並非你的目標。你的目標是加速大型複雜應用程序的開發。
這份PDF領取方式也簡單,做爲電子版全網首發,須要領取的朋友麻煩幫忙轉發轉發這篇文章+關注小編,而後添加小編vx:kaixindian331免費獲取。