微服务和分布式的基础学识
分布式系统的CAP定理指出,任何分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)中的两项。微服务是一种软件架构风格,将单一应用程序划分为一组小型服务,每个服务运行在独立的进程中,通过轻量级机制(如HTTP/REST)通信。每个服务围绕业务能力构建,可独立部署、扩展和技术异构。分布式系统由多台计算机通
·
微服务基础概念
微服务是一种软件架构风格,将单一应用程序划分为一组小型服务,每个服务运行在独立的进程中,通过轻量级机制(如HTTP/REST)通信。每个服务围绕业务能力构建,可独立部署、扩展和技术异构。
微服务的核心特征包括:
- 单一职责原则:每个服务专注于单一功能
- 自治性:服务可独立开发、部署和扩展
- 去中心化治理:允许使用不同技术栈
- 容错设计:服务故障隔离
- 演进式设计:支持逐步重构
分布式系统基础
分布式系统由多台计算机通过网络连接,协调完成共同任务。核心特性包括:
- 并发性:多节点并行处理
- 缺乏全局时钟:节点间时间同步困难
- 部分故障:系统可能部分失效
- 透明性:对用户隐藏分布式特性
分布式系统的CAP定理指出,任何分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)中的两项。
服务通信机制
微服务间常用通信方式:
- 同步通信:REST(HTTP+JSON)、gRPC(基于HTTP/2)
- 异步通信:消息队列(Kafka/RabbitMQ)、事件驱动
- 服务发现:Consul/Eureka/Nacos实现动态服务定位
- API网关:统一入口处理路由、认证和限流
RESTful接口示例:
@RestController
@RequestMapping("/orders")
public class OrderController {
@GetMapping("/{id}")
public Order getOrder(@PathVariable String id) {
// 实现逻辑
}
}
数据一致性方案
分布式事务处理模式:
- 两阶段提交(2PC):协调者管理事务提交过程
- 补偿事务(TCC):Try-Confirm-Cancel模式
- Saga模式:长事务分解为本地事务序列
- 事件溯源:通过事件日志重建状态
Saga实现示例:
def create_order_saga():
try:
reserve_items()
process_payment()
complete_order()
except Exception:
compensate_payment()
restore_inventory()
容错与弹性设计
常见容错模式:
- 熔断器模式:Hystrix/Sentinel实现故障隔离
- 限流:令牌桶/漏桶算法控制流量
- 降级:故障时提供基本功能
- 重试:指数退避策略处理临时故障
熔断器配置示例:
hystrix.ConfigureCommand("my_command", hystrix.CommandConfig{
Timeout: 1000,
MaxConcurrentRequests: 100,
ErrorPercentThreshold: 25,
})
服务监控与可观测性
关键监控维度:
- 指标(Metrics):Prometheus收集QPS、延迟等数据
- 日志(Logging):ELK栈实现集中日志管理
- 追踪(Tracing):Jaeger/Zipkin实现分布式追踪
- 健康检查:Kubernetes存活/就绪探针
PromQL查询示例:
http_requests_total{status=~"5.."} rate(5m)
容器化与编排技术
部署方案:
- Docker:轻量级容器打包应用
- Kubernetes:自动化部署、扩展和管理
- Service Mesh:Istio/Linkerd处理服务间通信
- CI/CD:GitOps实现持续交付
Kubernetes部署描述示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 3
selector:
matchLabels:
app: order
template:
metadata:
labels:
app: order
spec:
containers:
- name: order
image: registry/order:v1.2
ports:
- containerPort: 8080
领域驱动设计应用
微服务划分原则:
- 界限上下文:识别业务领域边界
- 充血模型:业务逻辑集中在领域层
- 防腐层:隔离外部系统影响
- CQRS模式:读写分离架构
领域事件示例代码:
public class OrderCreatedEvent : IDomainEvent
{
public Guid OrderId { get; }
public DateTime OccurredOn { get; }
public OrderCreatedEvent(Guid orderId)
{
OrderId = orderId;
OccurredOn = DateTime.UtcNow;
}
}
更多推荐
所有评论(0)