建立弹性支付系统的 10 个技巧

Shopify Engineering 文章解释了构建弹性支付系统的 10 个最有用的提示和技巧。

这是列表:

1、设置低超时:
他们建议尽可能调查并设置低超时。

例如,Ruby 的内置 Net::HTTP 客户端打开连接、写入数据和读取响应的默认超时时间为 60 秒。对于用户等待的在线应用程序来说,这太长了。作者建议将打开超时设置为一秒,并将写入和读取或查询超时设置为五秒作为起点。

2、安装断路器
如 Shopify 的 Semian,一旦检测到服务关闭,就会通过引发异常来保护服务。这样无需等待另一个超时,从而节省了资源。

Semian 使用 Ruby 中的断路器来保护 Net::HTTP、MySQL、Redis 和 gRPC 服务。

3、理解吞吐量:
作者讨论了利特尔定律,该定律指出系统中的平均客户数量等于他们的平均到达率乘以他们的平均时间。

了解队列大小、吞吐量和延迟之间的关系有助于设计能够有效处理负载的系统。

4、监控延迟、流量、错误和饱和度。
监控这些指标可以帮助识别系统何时面临因过载而停机的风险。

5、实现结构化日志:
他们建议使用机器可读格式的结构化日志记录,例如key=value 。

对或 JSON,允许日志聚合系统解析和索引数据。在分布式系统中,传递相关标识符来了解单个 Web 请求或后台作业中发生的情况是有用的。

6、使用幂等键:
为了确保付款或退款恰好发生一次,他们建议使用幂等键,该键会跟踪尝试并只向金融合作伙伴发送单个请求。这可以通过为每个客户端发送唯一的幂等键来实现。

7、复制一致:
对账可确保记录与财务合作伙伴的记录一致。任何差异都会被记录并在可能的情况下自动修复。此流程有助于维护准确的税务记录并为商家生成准确的报告。eventsourcing

8、负载测试:
定期负载测试通过模拟大批量闪购来帮助测试系统的限制和保护机制。Shopify 使用可编写脚本的负载均衡器来限制随时发生的结账数量。

9、紧急事故管理:
Shopify 使用用于管理事件的 Slack 机器人,具有协调事件、公共沟通和恢复稳定的作用。当值班服务所有者收到寻呼时,这个过程就开始了,如果有人注意到问题,可以通过基于监控的自动警报或手动进行寻呼。

10、组织回顾会议:
事件发生后一周内召开回顾会议,以了解发生的情况,纠正错误的假设,并防止同样的事情再次发生。这是从失败中学习和提高系统弹性的关键一步。