[問題] api連資料庫的問題

作者: PowerKid (暴力小孩)   2018-07-08 21:05:03
目前我用servlet寫了一個api 類似/api/getinfo?para=X
但是目前遇到一個問題
因為資料庫允許session連線數大概最多500而已
但可能有同時讀取這個api 30000次(1秒內有30000次的呼叫)
(這邊計算的方式不知道有沒有算錯
我的算法是假設X是1~10000
那用POST呼叫
POST 127.0.0.1/api/getinfo?para=1
POST 127.0.0.1/api/getinfo?para=2
.............
POST 127.0.0.1/api/getinfo?para=10000
這樣算呼叫10000次吧?
)
但這會造成把這個資料庫塞滿 後面的API都讀取不到內容
如果我用同步的方式 是可以的 但讀取api時間又過久
(一分鐘只完成18個thread的讀取)
不知道有沒有什麼好方法
謝謝
作者: jej (晃奶大馬桶)   2018-07-08 21:20:00
這是架構的問題吧 先不考慮資料庫 同時1萬筆網路 可以算ddos先讓consumer 和producer 分離吧
作者: PowerKid (暴力小孩)   2018-07-08 22:26:00
J大請問是什麼意思那如果來源都是同一個IP tomcat會算同個thread還是不算
作者: iFEELing (ing)   2018-07-08 23:41:00
你的API做什麼事做完不放掉CONNECTION?查的資料異動不大的話打個CACHE在中間擋吧
作者: PowerKid (暴力小孩)   2018-07-09 07:52:00
做完有放掉 但是因為同時10000個進來 造成資料庫連線直暴增到一萬 如果是非同時 做完關掉 後面的再進就不會有問題了cache 是只放在資料庫還是程式?
作者: ssccg (23)   2018-07-09 09:12:00
資料庫通常會用connection pool,設定上限,不會同時開一萬
作者: jej (晃奶大馬桶)   2018-07-10 18:48:00
連線和資料處理沒分離 採取串聯的方式只要其中一個慢 整個都會慢不知道系統限制是什麼 若能直接用procedure解決 10萬筆算小咖不能用procedure 就看client是不是要即時回應結果若是client要知道結果 可以分析是否可以先給局部結果這樣分析就可以知道接下來要怎麼加速這個系統了舉一個例子 若可以使用mq 資訊可以在queue中排隊資料的處理只剩下程式碼的優化 或加開伺服器

Links booklink

Contact Us: admin [ a t ] ucptt.com