1秒30000QPS,前後端設計思路

来源:http://www.cnblogs.com/programmerVIP/archive/2016/07/20/5687730.html
-Advertisement-
Play Games

Q:現在有這樣一個需求,在一秒中有3萬的支付訂單請求,有什麼比較好的解決方案嗎? PS:我們資料庫用的是oracle 程式是java spring mybatis dubbo mq等技術,現在有這樣一個場景 高併發寫 在一秒中有3萬的支付訂單請求有什麼比較好的解決方案嗎? 主要優化哪方面 A1: 作 ...


Q:現在有這樣一個需求,在一秒中有3萬的支付訂單請求,有什麼比較好的解決方案嗎?

PS:我們資料庫用的是oracle 程式是java spring mybatis dubbo mq等技術,現在有這樣一個場景 高併發寫 在一秒中有3萬的支付訂單請求有什麼比較好的解決方案嗎? 主要優化哪方面

 

 

A1:

 

作者:李道兵

沒做過支付,不考慮細節,隨便聊聊

1. 首先要解決掉資料庫的壓力,3萬qps對應的磁碟 iops 很大,不過現在好的 SSD 能提供很好的 iops, 比如這款: ARK | Intel® SSD DC P3700 Series (800GB, 2.5in PCIe 3.0, 20nm, MLC) 單盤 90000 IOPS,應該能撐住你的資料庫,考慮到主備,以及你的sharding需求,3-9 台資料庫機器,高記憶體,高CPU,SSD磁碟應該能抗住

2. 業務邏輯這一層: Java 系,用線程來抗併發的,如果業務邏輯不太複雜,那麼基本能做到 100ms 內響應,那麼 30000qps, 對應的是 3000併發線程,這部分設計的時候記得保持無狀態,單台支撐 300-1000 併發沒問題,加上一倍的冗餘,那麼 6~20 台業務型機器可以抗住。

3. 緩存層: 支付訂單一般對緩存需求不高,但緩存層一般都會有,避免把查詢壓力壓到資料庫,簡單兩台緩存,或者緩存平行部署在業務型機器上都可以解決,具體看你的情況了。

4. 接入層: nginx 做LVS就可以了,記得 backlog 配大點就可以了, 3萬qps, 假設單個請求的數據在 10KB 左右,那麼是 300MB/s,如果是千兆機,每台4網卡,兩內兩外,加上冗餘,我會部署4台入口機,如果是萬兆機,兩台做主備(心跳或者LVS)即可。

當然,魔鬼在細節,做好機器的監控,慢請求的監控,日誌的匯聚與分析。然後逐步推進服務的 SOA 化來降低複雜度。留一臺業務機打小流量來做線上測試。優化JVM運行參數,等等,要做的事情還很多。

Good Luck     A2:   作者:梁川

從交易角度來看,各種高併發系統可以粗略分為兩大類:交易驅動的系統,內容驅動的系統。其中:
交易驅動的系統:包括支付系統、電信計費系統、銀行核心交易系統等,此類系統強調資料庫事務的ACID原則。
內容驅動的系統:包括SNS、微博、門戶、視頻、搜索引擎等系統,此類系統對資料庫事務ACID的關註不是第一位的,更強調CAP原則:Consistency(一致性), Availability(可用性),Partition tolerance(分區容錯性)。

與此對應,交易驅動的系統與內容驅動的系統在系統優化方法最大的差異在於:
交易驅動的系統:強調事務的ACID,按照CAP原則做選擇,更強調CA(Consistency(一致性)和Availability(可用性);因此交易驅動的系統一般在核心交易上選擇關係型資料庫(包括採用記憶體資料庫、緩存等涉及事務問題),當然這就導致交易系統最大的瓶頸一般都在關係資料庫上。
內容驅動的系統:可以在CAP之間根據業務需要做選擇三選二,因此一般選擇NOSQL為主、RDBMS為輔的方案。

在優化策略上,內容驅動的系統採用的諸多優化手段交易驅動的系統也可以採用,上面各位回答都有所提及,這裡重點說一下因事務導致的業務複雜性的處理。
3萬筆/每秒這個級別的交易訂單這個量級說實話挺大,但即便如此,也有諸多可優化的空間。由於題主未對具體場景說明,只能假定是典型的交易驅動系統,一些思考點:
1、3萬筆/每秒是峰值最大交易量還是持續交易量?
2、3萬筆/每秒是同一類型的訂單還是諸多種類型的訂單?
3、業務能否做拆分,例如從功能、從區域、從優先順序等角度?
4、支付訂單是實時交易還是非實時交易,能否延時入庫?
5、支付訂單能否延時批量處理?
6、支付訂單是否涉及熱點賬戶問題,也即對同一賬戶會有多個併發請求對其屬性(例如賬戶餘額)進行操作?


由此可以展開諸多優化策略,不在此處細述。    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.意圖 在布破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態。這樣以後就可以將對象恢復到原先保存的狀態。 2.別名 Token 3.動機 為了允許用戶取消不確定的操作或從錯誤中恢復過來,需要實現檢查點和取消機制,而要實現這些機制,必須將狀態信息保存在某處,這樣才能將對象恢復到 ...
  • 1.意圖 用一個中介對象來封裝一系列的對象交互。中介者使各個對象不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。 2.動機 通過將集體行為封裝在一個單獨的中介者對象中,中介者負責控制和協調一組對象間的交互。中介者充當一個中介以使組中的對象不再相互顯示引用。這些對象只知道中介 ...
  • 享元(Flyweight)模式是一種經典的結構型設計模式,用於優化重覆、緩慢及數據共用效率較低的代碼。它旨在通過與相關對象共用儘可能多的數據來減少應用程式中記憶體的使用。 應用場景 (1)用於數據層,處理記憶體中保存的大量相似對象的共用數據。 (2)用於DOM層,Flyweight用作中央事件管理器,來 ...
  • 1.意圖 提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內部表示。 2.別名 Cursor-游標。 3.動機 一個聚合對象,應該提供一種方法來讓別人可以訪問它的元素,而又不需暴露它的內部結構。 4.適用性 訪問一個聚合對象的內容而無需暴露它的內部表示。 支持聚合對象的多種遍歷。 為 ...
  • 一、什麼是CS和BS結構? 1.C/S又稱Client/Server或客戶/伺服器模式。伺服器通常採用高性能的PC、工作站或小型機,並採用大型資料庫系統,如Oracle、Sybase、Informix或SQLServer。客戶端需要安裝專用的客戶端軟體。 2.B/S是Brower/Server的縮寫 ...
  • 前言 讀《大象》的這一章節感覺很有指導意義,雖然工程中不能全部實踐,但作為心法來驅動設計是綽綽有餘了。 特質 一切都是對象 在面向對象者的眼裡,一切有名字的東西都是對象,都應該使用對象的觀點來看待它、分析他。哪怕這個東西的名字叫某某業務流程,它仍然應該看作是一個對象,而不是一個過程。這意味著,無論什 ...
  • 簡介 優化是一個持續的過程。所以儘可能的不要有人為的參與。所以能自動化的或者能從架構、框架級別解決的就最更高級別解決。 這樣即能實現面對開發人員是透明的、不響應,又能確保所有資源都是被優化過的。 場景 1. 確保靜態資源是有緩存。 2. 確保靜態資源的大小最小。 3. 確保載入的資源最少。 4. 確 ...
  • 簡介 性能優化的第一准則: 。幾乎絕大部分優化都圍繞這個來進行的。讓用戶最快的看到結果。 性能優化的第二準則: 。絕不提供多餘的信息。比如,靜態資源(圖片、css、js)壓縮,圖片的滾動載入,非同步請求,http請求合併等。 性能優化的第三準則: 。當前,這個的前提是已經把基本優化都做完了,才考慮這個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...