在分布式架构中,错误处理应是集中化的、可预测的,并且对各种类型的故障具有抵抗力,这在使用网络服务时是不可避免的。推荐使用一些模式,如重试、熔断器、超时、后备和集中日志记录/监控。
原则:
以下是使用pybreaker库在Python中的熔断器示例:
import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=60) @breaker def get_data(): return requests.get('http://service/api/data', timeout=3) try: response = get_data() except pybreaker.CircuitBreakerError: # 后备:返回占位符或错误 response = '后备数据'
关键特点:
发生错误时可以向客户提供所有异常的详细信息吗?
不可以。无法透露异常的细节——这是一种安全威胁。响应中仅返回一般信息,技术细节记录在内部系统中。
在服务之间的网络错误中仅实现“重试”是否足够?
不可以,“纯粹”的重试可能会加剧问题——建议实现带有退避策略(逐步延迟)的策略,而不是强制重复尝试。
日志最好保存在每个微服务的本地硬盘上吗?
不可以。最佳方案是集中收集日志(例如,通过ELK、Loki、Grafana),以便在一个点上能够搜索和分析所有日志。