大道至簡-Shopify 構建彈性支付系統的 10 條原則

来源:https://www.cnblogs.com/JavaEdge/archive/2023/11/29/17864591.html
-Advertisement-
Play Games

0 大綱 Lower the Timeouts, and Let the Service Fail Early Add Circuit Breakers Capacity Planning Add monitoring and alerting Implement Structured Loggin ...


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 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • and dest,src將目標與源做與操作 or dest,src將目標與源做或操作 add 加得數的值超出範圍即會溢出 inc 彙編語言中的自增指令,相當於++ div指令 不會給出被除數 切記提前在預設的寄存器中設置好被除數,且預設寄存器不做別的用處 dup設置記憶體空間,與db、dw、dd等數據 ...
  • 概述 - Overview 在我初學 C++ 時,static、inline、extern 可能是最令我迷惑的 C++ 說明符,原因是它們在不同的語境下會發揮不同的作用,而且某些說明符的含義已經和以前不同,這加劇了我在查詢資料時的困擾。所以今天決定好好總結一下。 首先要介紹 C++ 的兩個概念:存儲 ...
  • 哈嘍大家好,我是鹹魚 當我們在學習 Python 的時候,可能會經常遇到單下劃線 _ 和雙下劃線 __ 這兩種命名方式 單下劃線 _ 和雙下劃線 __ 不僅僅是只是一種簡單的命名習慣,它們在 Python 中有著特殊的含義,對於代碼的可讀性和功能實現有著關鍵的作用。 那麼今天我們來看一看在 Pyth ...
  • LinkedList是Java中的一個雙向鏈表。它實現了List和Deque介面,在使用時可以像List一樣使用元素索引,也可以像Deque一樣使用隊列操作。LinkedList每個節點都包含了前一個和後一個節點的引用,因此可以很方便地在其中進行節點的插入、刪除和移動。相比於ArrayList,Li... ...
  • gRPC(gRPC Remote Procedure Call)是由 Google 開發的開源 RPC 框架,它基於 HTTP/2 標準,使用 Protocol Buffers 作為介面定義語言(IDL)。gRPC 提供了一種高效、跨語言、跨平臺的遠程過程調用(RPC)解決方案,被廣泛應用於構建分佈 ...
  • Zlib是一個開源的數據壓縮庫,提供了一種通用的數據壓縮和解壓縮演算法。它最初由Jean-Loup Gailly和Mark Adler開發,旨在成為一個高效、輕量級的壓縮庫,其被廣泛應用於許多領域,包括網路通信、文件壓縮、資料庫系統等。其壓縮演算法是基於DEFLATE演算法,這是一種無損數據壓縮演算法,通常... ...
  • 大家好,我是棧長。 沒錯,就在昨天,Spring Boot 2.x 停止維護了。。 Spring Boot 最後一個 2.x 的版本 2.7.x 已經停止維護,3.0.x 也停止維護了,商業支持的版本也只有 2.6.x 了,2.5.x 以下的版本徹底退出歷史舞臺。。 從路線圖可以看到每個版本的終止時 ...
  • 目前倉儲中台和京喜BP的合作主要通過SPI擴展點的方式。好處就是對修改封閉、對擴展開放,中台不需要關心BP的業務實現細節,通過對不同BP配置擴展點的介面來達到個性化的目的。目前京喜BP主要提供兩種方式的介面實現,一種是jar包的方式,一種是提供jsf介面。 下邊來分別介紹下兩種方式的定義和實現。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...