典型的微服務架構圖
下圖展示了一個典型的微服務架構。
- 負載均衡器:它將傳入流量分配到多個后端服務。
- CDN(內容交付網絡):CDN 是一組地理上分布的服務器,用于保存靜態內容以實現更快的交付。客戶端首先在 CDN 中查找內容,然后再進行后端服務。
- API 網關:處理傳入請求并將它們路由到相關服務。它與身份提供者和服務發現進行對話。
- 身份提供者:負責處理用戶的身份驗證和授權。
- 服務注冊和發現:微服務注冊和發現發生在該組件中,API網關在此組件中查找相關服務進行通信。
- 管理:該組件負責監控服務。
- 微服務:微服務是在不同的領域中設計和部署的。每個域都有自己的數據庫。API網關通過REST API或其他協議與微服務通信,同一域內的微服務使用RPC(遠程過程調用)相互通信。
微服務的好處:
- 它們可以快速設計、部署和水平擴展。
- 每個域都可以由專門的團隊獨立維護。
- 業務需求可以在每個領域進行定制,從而得到更好的支持。
?微服務最佳實踐
當我們開發微服務時,需要遵循以下最佳實踐:
- 為每個微服務使用單獨的數據存儲
- 使代碼保持相似的成熟度
- 為每個微服務單獨構建
- 為每個微服務分配單一職責
- 部署到容器中
- 設計無狀態服務
- 采用領域驅動設計
- 設計微前端
- 編排微服務
微服務通常使用哪些技術堆棧
下面您將看到一張顯示微服務技術堆棧的圖表,包括開發階段和生產階段。
𝐏𝐫𝐞-𝐏𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧
- 定義 API - 這在前端和后端之間建立了契約。為此,我們可以使用 Postman 或 OpenAPI。
- 開發 - Node.js 或 React 在前端開發中很流行,而 java/python/go 在后端開發中很流行。另外,我們需要根據API定義更改API網關中的配置。
- 持續集成 - JUnit 和 Jenkins 用于自動化測試。代碼打包成 Docker 鏡像并部署為微服務。
𝐏𝐫𝐨𝐝𝐮𝐜𝐭𝐢𝐨𝐧
- NGinx 是負載均衡器的常見選擇。Cloudflare 提供 CDN(內容分發網絡)。
- API網關-我們可以使用spring boot作為網關,并使用Eureka/Zookeeper進行服務發現。
- 微服務部署在云上。我們可以選擇 AWS、Microsoft Azure 或 Google GCP。緩存和全文搜索 - Redis 是緩存鍵值對的常見選擇。Elasticsearch 用于全文搜索。
- 通信 - 為了使服務能夠相互通信,我們可以使用 Kafka 或 RPC 基礎設施中的消息傳遞。
- 持久性 - 我們可以使用 MySQL 或 PostgreSQL 作為關系數據庫,使用 Amazon S3 作為對象存儲。如有必要,我們還可以使用 Cassandra 進行寬列存儲。
- 管理和監控 - 為了管理如此多的微服務,常見的運維工具包括 Prometheus、Elastic Stack 和 Kubernetes。