一、引言
在當前快速發展的互聯網環境中,許多企業和服務都面臨着高併發場景的挑戰。隨着用戶規模不斷增長,對於同一時間內大量用戶請求的處理能力、系統性能、穩定性和容錯性的要求也日益提高。高併發場景對系統架構設計、數據庫設計、緩存策略、自動化運維、安全防護、成本、效率等方面提出了重大挑戰,需要綜合考慮各項因素並採取有效的措施。本次分享將結合春晚案例,剖析如何應對高併發問題,以確保系統的穩定性和可擴展性。
二、背景
營銷權益平臺在2024春晚期間,主要承接抽獎場景支付券的投放和裂變互動場景主態、客態錢包餘額的發放。爲晚會活動提供科技券權益驗資、權益領取、權益查詢能力。
1、權益驗資流程
驗資的主要功能是判定用戶是否可以領取指定權益,當用戶點擊“開始刮獎”時零售UMC會調用驗資接口,批量獲取當前用戶可領的權益。該過程會對運營投放的每個活動進行基礎信息的校驗、庫存校驗、領取規則校驗、資格校驗、風控校驗等,最後返回用戶可領的權益集合,具體流程如下:
2、權益發放流程
驗資流程結束後,零售umc會拿到用戶可領的所有權益,包含支付券、紅包、東券、實物等,umc會根據策略下發本次抽獎用戶具體命中的權益給SOA,SOA發起權益的領取操作,如命中支付券,此時會調用權益發放接口,權益發放接口會對當前要領取的活動進行基礎校驗、規則校驗、風控校驗、完成以上校驗後,進行活動庫存扣減、用戶資格扣減、權益入賬(寫庫),並返回最終的領取結果。
三、挑戰
1、成本與服務
2、三高保障
四、實現
1、限流
合理的限流對系統穩定性和資源投入起到至關重要的作用,限流值的評估直接影響到系統複雜度、成本效率、業務達成、以及用戶體驗。
限流評估優先級原則:用戶體驗>業務目標>系統壓力(系統複雜度、成本效率)
1)基於業務需求分析
2)基於歷史數據分析
以數據驅動,參考營銷日常、大促、跨晚、會場活動等發放數據情況,結合業務目標,評估合理的限流值。
2、重緩存
使用緩存可以顯著提高系統性能,降低數據源壓力,改善用戶體驗,是保障系統高性能的有效方式。營銷系統大量使用本地及redis緩存,緩存架構如下:
本地緩存的構建的兩種方式:
兩種模式的選取,需要考慮集羣規模、數據大小、數據庫性能、等因素(空間和時間的權衡)。
3、合併
合理的業務流程設計,將能夠並行處理的邏輯通過多線程進行並行處理,通過批量請求的方式降低網絡開銷減少IO操作,保障系統性能的同時能有有效保護下游系統。
4、拆分
拆分是比較常用的解決方案,是一種空間換時間的思想。庫存熱點問題在本次春晚活動中尤爲明顯,通過合理的拆分得到解決。以下介紹營銷系統使用的庫存管理方案:
1)傳統方式(日常領券鏈路)
讀鏈路使用get命令,寫鏈路使用lua實現庫存控制,理論可支持(讀+寫)共4w/s。流量小,一致性要求高的場景推薦使用。
優點:簡單、性能有保障、強一致性。
缺點:單節點併發瓶頸。
2)本地庫存方式(收銀臺鏈路)
讀鏈路預取庫存在本地進行庫存扣減,寫鏈路使用lua實現庫存控制,寫最高2w,讀理論無上限。一致性要求強,庫存量級大、讀多寫少場景使用。
優點:讀鏈路可實現橫向擴展、強一致性。
缺點:庫存較少時可能會產生單節點瓶頸。
3)分片庫存(春晚版本)
讀鏈路通過本地庫存標識判斷是否庫存充足,寫鏈路按照pin對庫存進行分片,通過hashtag訪問庫存,弱一致性,庫存量級大、讀多寫多場景使用。
優點:讀寫高併發。
缺點:弱一致性,少賣,庫存和流量的量級要求要達標。
5、隔離
隔離在架構設計中能夠提高系統的安全性、故障隔離能力、性能保護、管理便捷性,是設計健壯系統架構的重要手段。
五、總結
高併發場景下的解決方案往往需要綜合考慮系統架構、技術選型、性能優化和容量規劃等方面的問題,需要對業務和系統的整體情況有較深入的理解和把握。另外,高併發下的系統設計不是一成不變的,需要不斷地根據業務發展和系統性能進行優化和調整,以適應不斷變化的需求。同時,高併發場景下的系統設計需要注重容錯和安全性,充分考慮異常情況下的應對措施,保障系統的穩定性和可靠性。綜上所述,高併發場景下的系統設計需要綜合考慮技術、業務和運維等多方面因素,是一個具有挑戰性但又充滿樂趣的工作。
作者:京東科技 謝凌東
來源:京東雲開發者社區