大道至简-Shopify 构建弹性支付系统的 10 条原则

这篇具有很好参考价值的文章主要介绍了大道至简-Shopify 构建弹性支付系统的 10 条原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 大纲

  1. Lower the Timeouts, and Let the Service Fail Early
  2. Add Circuit Breakers
  3. Capacity Planning
  4. Add monitoring and alerting
  5. Implement Structured Logging
  6. Use Idempotency Keys
  7. Be Consistent with Reconciliation
  8. Incorporate Load Testing
  9. Get on top of incident management
  10. Organize Incident Retrospectives

1 降低超时时间,让服务尽早失败

默认超时时间为 60 秒。根据 Shopify 的经验,5 秒的读取超时时间和 1 秒的写入超时时间是不错的设置。

超时时间也可以在数据存储中设置。例如,MySQL 有 MAX_EXECUTION_TIME 优化提示,用于以毫秒为单位设置每个 SELECT 查询的超时时间。

Go 中的 http.Client 和 Node.JS 中的 http.request 等其他编程语言中的 HTTP 客户端根本没有默认超时时间!这意味着一个无响应的服务器可能会无限期地占用您的资源,并不必要地增加基础架构费用。

2 添加断路器

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

通过在检测到服务已关闭时立即引发异常,他们通过不等待预期会发生的另一次超时来节省资源。

就像在家中或公寓中会发现的断路器一样,一旦断路器打开或触发,就没有什么可以通过。

3 容量规划

如果我们的队列中有 50 个请求到达,处理一个请求平均需要 100 ms,那吞吐量是每秒 500 个请求。

N+1 查询会增加请求的延迟并降低吞吐量。

capacity = throughput x latency

4 添加监控和告警

谷歌的站点可靠性工程(SRE)书中列出了一个面向用户的系统应该监控的四个黄金信号: 延迟、流量、错误和饱和度。

5 实现结构化日志记录

将日志存储在集中地方,并使它们易于搜索。

指标提供了系统行为的高级概述,而日志记录允许我们了解单个 Web 请求或后台作业内部发生的事情。

在分布式系统中,传递某种关联标识符很有用。一个假设的例子是当买家在结账时启动支付,关联_id 由我们的 Rails 控制器生成。

6 使用幂等键

确保支付或退款只发生一次,尽管偶尔会出现小故障。

请改用通用唯一词汇排序标识符 (ULID) 作为这些幂等键,而不是随机版本 4 UUID。

在 Shopify 的规模下,每一百万次不可靠的支付处理机会意味着它每天发生很多次。如果这是超时的支付 API 调用,他们希望重试请求,但要安全地进行重试。

7 与调节保持一致

在数据库中存储与 Shopify 的金融合作伙伴的调节中断。

通过调节,他们确保自己的记录与金融合作伙伴的记录一致。他们调节单个记录,如费用或退款,以及尚未支付给商户的当前余额等汇总记录。

8 结合负载测试

如果传入工作的数量足够大,他们的服务器甚至会耗尽内存来存储队列上的工作并崩溃。

Shopify 定期模拟大量抢购活动以获得基准测试结果。

9 掌握事件管理

事件通常从值班服务所有者收到页面开始,这可能是基于监视的自动警报,也可能是如果有人注意到问题,他们会手动发送。

每个事件通道都有 3 个角色:值班事件管理器(IMOC)、支持响应管理器(SRM)和服务所有者。

10 复盘

对于每个事件,Shopify 会提出 3 个问题:确切发生了什么?他们对系统有什么错误的假设?他们可以做些什么来防止这种情况发生?

一旦了解了这些,通常会分配几个行动项来实施保护措施,以防止同样的事情再次发生。

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-747620.html

到了这里,关于大道至简-Shopify 构建弹性支付系统的 10 条原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中东 Shopify 如何使用 Bytebase 构建一站式数据库开发工作流

    Salla 是一家 2016 年成立,位于沙特麦加的自建站电商平台。 作为中东 Shopify,其最大的特点是支持阿拉伯语建站,并且提供更多适应中东地区特点的本地化服务。截止目前,已有 47,000 家店铺入驻 Salla,商品销售总额达到了 43 亿美元,近三年保持了接近 100% 的增速。 与 Sall

    2024年02月09日
    浏览(47)
  • 【虹科干货】如何构建弹性、高可用的微服务?

    基于微服务的应用程序可实现战略性数字转型和云迁移计划,对于开发团队来说,这种架构十分重要。那么,如何来构建弹性、高可用的微服务呢? Redis Enterprise 给出了一个完美的方案。   文况速览:   什么是微服务架构? 为什么微服务很重要? Redis Enterprise :微服务的完美

    2024年02月05日
    浏览(62)
  • 为Android构建现代应用——设计原则

    为Android构建现代应用——设计原则 - 掘金      state”是声明性观点的核心 在通过Compose或SwiftUI等框架设计声明性视图时,我们必须明确的第一个范式是State(状态)。UI组件结合了它的图形表示(View)和它的State(状态)。UI组件中发生变化的任何属性或数据都可以表示为状态。例如

    2024年02月16日
    浏览(35)
  • 云原生入门指南:构建未来的弹性、高效和可靠应用

    什么是云原生? 云原生的定义 :云原生是一种构建和 运行在云端 的应用开发和部署方法论,旨在提高应用的弹性、可伸缩性、可观察性和容错性。 云原生与传统应用开发的区别:传统应用通常被设计和优化为运行在特定环境中,而云原生应用则利用云计算和容器化技术,

    2024年02月10日
    浏览(39)
  • 企业中台建设的关键思维与构建原则

         中台建设是一个复杂且持续迭代的过程。结合用户数字中台项目的实践,我们总结出中台建设过程中企业管理者应该明确的3个关键思维。    思维1:中台一定需要技术平台的支撑             没有一个相对完整的技术平台是很难把中台架构搭建起来的,企业在构

    2024年02月13日
    浏览(68)
  • 构建 Kubernetes Operator 的原则是什么?

    Kubernetes(简称K8s)上数据服务的自动化越来越受欢迎。在K8s上运行有状态的工作负载意味着使用Operator。然而,它发展演化到今天已经变得非常复杂,像Operator这样的应用模式和扩展方式对于开发者与运维者而言愈发受到欢迎。 但工程师们经常对编写K8s Operator的复杂性感到吃

    2024年02月03日
    浏览(33)
  • 微服务的艺术:构建可扩展和弹性的分布式应用

    🎉欢迎来到架构设计专栏~微服务的艺术:构建可扩展和弹性的分布式应用 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平

    2024年02月07日
    浏览(211)
  • 云原生+AI算力:构建高效、弹性的智能化基础设施

    导言: 当谈到构建高效、弹性的智能化基础设施时,云原生和AI算力的融合成为了无可忽视的关键要素。云原生技术作为一种现代化的软件开发和部署方法,以其高效性和弹性成为构建智能化基础设施的理想选择。而AI算力作为人工智能应用的核心,为智能化基础设施的实现

    2024年04月16日
    浏览(66)
  • Jenkins分布式实现: 构建弹性和可扩展的CI/CD环境!

    Jenkins是一个流行的开源持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)工具,它通过自动化构建、测试和部署过程,帮助开发团队更高效地交付软件。Jenkins的分布式实现允许将任务分散到多个计算机上执行,从而提高系统的弹性和可扩展性。本文将深入

    2024年02月01日
    浏览(60)
  • 构建弹性可扩展的微服务架构:基于Spring Cloud Alibaba 的实践

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 随着互联网业务的不断发展,传统的单体应用逐渐无法满足日益复杂的业务需求和

    2024年02月14日
    浏览(260)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包