1单体 vs 微服务
单体架构将所有功能打包在一个应用中,而微服务将应用拆分为多个独立的服务。
微服务的优势: - 独立部署:每个服务可以独立更新 - 技术多样性:不同服务可以使用不同技术栈 - 故障隔离:单个服务故障不影响整体 - 团队自治:小团队负责完整服务
微服务的挑战: - 分布式复杂性:网络延迟、数据一致性 - 运维成本:需要更多基础设施 - 服务间通信:需要设计良好的 API
理解微服务架构的核心理念与设计原则
单体架构将所有功能打包在一个应用中,而微服务将应用拆分为多个独立的服务。
微服务的优势: - 独立部署:每个服务可以独立更新 - 技术多样性:不同服务可以使用不同技术栈 - 故障隔离:单个服务故障不影响整体 - 团队自治:小团队负责完整服务
微服务的挑战: - 分布式复杂性:网络延迟、数据一致性 - 运维成本:需要更多基础设施 - 服务间通信:需要设计良好的 API
服务拆分是微服务设计的核心问题。常用的拆分策略:
1. **按业务能力拆分**:根据业务领域划分服务边界 2. **按子域拆分**:使用 DDD 的限界上下文 3. **按数据拆分**:每个服务拥有自己的数据存储
拆分原则: - 高内聚低耦合 - 单一职责 - 服务粒度适中 - 避免循环依赖
API Gateway 是微服务架构的入口,负责请求路由、认证、限流等功能。
1package main2 3import (4 "net/http"5 "net/http/httputil"6 "net/url"7)8 9type Gateway struct {10 routes map[string]*url.URL11}12 13func (g *Gateway) ServeHTTP(w http.ResponseWriter, r *http.Request) {14 // 路由匹配15 target, ok := g.routes[r.URL.Path]16 if !ok {17 http.NotFound(w, r)18 return19 }20 21 // 反向代理22 proxy := httputil.NewSingleHostReverseProxy(target)23 proxy.ServeHTTP(w, r)24}