0 大綱
- Lower the Timeouts, and Let the Service Fail Early
- Add Circuit Breakers
- Capacity Planning
- Add monitoring and alerting
- Implement Structured Logging
- Use Idempotency Keys
- Be Consistent with Reconciliation
- Incorporate Load Testing
- Get on top of incident management
- Organize Incident Retrospectives
1 降低超時時間,讓服務(wù)盡早失敗
默認超時時間為 60 秒。根據(jù) Shopify 的經(jīng)驗,5 秒的讀取超時時間和 1 秒的寫入超時時間是不錯的設(shè)置。
超時時間也可以在數(shù)據(jù)存儲中設(shè)置。例如,MySQL 有 MAX_EXECUTION_TIME 優(yōu)化提示,用于以毫秒為單位設(shè)置每個 SELECT 查詢的超時時間。
Go 中的 http.Client 和 Node.JS 中的 http.request 等其他編程語言中的 HTTP 客戶端根本沒有默認超時時間!這意味著一個無響應(yīng)的服務(wù)器可能會無限期地占用您的資源,并不必要地增加基礎(chǔ)架構(gòu)費用。
2 添加斷路器
Shopify 開發(fā)了 Semian 來使用 Ruby 中的斷路器來保護 Net::HTTP、MySQL、Redis 和 gRPC 服務(wù)。
通過在檢測到服務(wù)已關(guān)閉時立即引發(fā)異常,他們通過不等待預(yù)期會發(fā)生的另一次超時來節(jié)省資源。
就像在家中或公寓中會發(fā)現(xiàn)的斷路器一樣,一旦斷路器打開或觸發(fā),就沒有什么可以通過。
3 容量規(guī)劃
如果我們的隊列中有 50 個請求到達,處理一個請求平均需要 100 ms,那吞吐量是每秒 500 個請求。
N+1 查詢會增加請求的延遲并降低吞吐量。
capacity = throughput x latency
4 添加監(jiān)控和告警
谷歌的站點可靠性工程(SRE)書中列出了一個面向用戶的系統(tǒng)應(yīng)該監(jiān)控的四個黃金信號: 延遲、流量、錯誤和飽和度。
5 實現(xiàn)結(jié)構(gòu)化日志記錄
將日志存儲在集中地方,并使它們易于搜索。
指標提供了系統(tǒng)行為的高級概述,而日志記錄允許我們了解單個 Web 請求或后臺作業(yè)內(nèi)部發(fā)生的事情。
在分布式系統(tǒng)中,傳遞某種關(guān)聯(lián)標識符很有用。一個假設(shè)的例子是當買家在結(jié)賬時啟動支付,關(guān)聯(lián)_id 由我們的 Rails 控制器生成。
6 使用冪等鍵
確保支付或退款只發(fā)生一次,盡管偶爾會出現(xiàn)小故障。
請改用通用唯一詞匯排序標識符 (ULID) 作為這些冪等鍵,而不是隨機版本 4 UUID。
在 Shopify 的規(guī)模下,每一百萬次不可靠的支付處理機會意味著它每天發(fā)生很多次。如果這是超時的支付 API 調(diào)用,他們希望重試請求,但要安全地進行重試。
7 與調(diào)節(jié)保持一致
在數(shù)據(jù)庫中存儲與 Shopify 的金融合作伙伴的調(diào)節(jié)中斷。
通過調(diào)節(jié),他們確保自己的記錄與金融合作伙伴的記錄一致。他們調(diào)節(jié)單個記錄,如費用或退款,以及尚未支付給商戶的當前余額等匯總記錄。
8 結(jié)合負載測試
如果傳入工作的數(shù)量足夠大,他們的服務(wù)器甚至會耗盡內(nèi)存來存儲隊列上的工作并崩潰。
Shopify 定期模擬大量搶購活動以獲得基準測試結(jié)果。
9 掌握事件管理
事件通常從值班服務(wù)所有者收到頁面開始,這可能是基于監(jiān)視的自動警報,也可能是如果有人注意到問題,他們會手動發(fā)送。
每個事件通道都有 3 個角色:值班事件管理器(IMOC)、支持響應(yīng)管理器(SRM)和服務(wù)所有者。
10 復(fù)盤
對于每個事件,Shopify 會提出 3 個問題:確切發(fā)生了什么?他們對系統(tǒng)有什么錯誤的假設(shè)?他們可以做些什么來防止這種情況發(fā)生?
一旦了解了這些,通常會分配幾個行動項來實施保護措施,以防止同樣的事情再次發(fā)生。文章來源:http://www.zghlxwxcb.cn/news/detail-747620.html
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-747620.html
到了這里,關(guān)于大道至簡-Shopify 構(gòu)建彈性支付系統(tǒng)的 10 條原則的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!