
Microservice体系结构的观点在软件开发中很普遍。但是,使用它的组织除了在实现业务逻辑方面的困难外,还面临着分布式故障。
分布式计算错误已得到充分记录,但难以检测。结果,构建大规模且可靠的分布式系统架构成为一个复杂的挑战。一旦进入网络,在单片系统上看起来不错的代码可能会成为问题。 Mail.ru云解决方案
团队翻译了一篇文章,该文章的作者多年来一直参与检测生产代码中的典型故障,并研究了导致该结果的原因。本文提供了代码审查指南,作者将其用作基本清单。
远程系统出现故障
无论系统设计得多么认真,它都会在某个时候失效-这是软件投入生产时的事实。
失败的发生有多种原因:错误,基础架构问题,突然的流量激增,疏忽大意,但它们几乎总是发生。整个体系结构的健壮性和可靠性取决于调用模块如何处理错误:
- . . , , . — . , .
- . , . ? ? , ? ? .
这种情况比完全崩溃更糟,因为不知道远程系统是否正在运行。因此,要处理这种情况,您应该始终检查以下问题。
使用Service Mesh技术(例如Istio)可以透明地解决应用程序代码中的某些问题。但是,您需要确保无论使用哪种方法都可以处理此类问题:
- 设置远程系统调用的超时。这也适用于远程API和数据库调用,事件发布的超时。检查是否为呼叫中的所有远程系统设置了拖尾和合理的超时。这样可以避免在远程系统无响应时浪费资源等待。
- -. , — . , .
, - (, ). , , . — , . - (Circuit Breaker). , , Hystrix. . , Circuit Breaker . — .
- - . - — , . , . , -. , .
- . , . , , .
- . , ( API, ), — . : , , . .
,
- , API . - API. , API . API API, — .
- SLA — . SLA , . , .
SLA : — . , SLA. — , , . - API-. SLA — SLA.
- . — , . , , , . .
— «» , «» . , id = 123, id =123. , «» , « ». .
- . , , . , Redis, . , .
- . API (), ? , , ? API ?
- . , , , . . . , , . . .
- 在每个入口点检查输入。在分布式环境中,从安全角度来看,系统的任何部分都可能受到损害或存在错误。因此,每个模块都必须检查它在输入中收到的内容。并且不要假设它将收到干净的,即安全的输入。
- 切勿将凭据存储在代码存储库中。这是一个非常常见的错误,很难消除。但是,凭据应始终从外部(最好是安全的)存储加载到系统运行时中。
我希望您发现这些准则有助于减少分布式系统代码中的常见错误。
祝好运!
还有什么要读的: