簡體   English   中英

如何規模化? 使 Rest API 調用數千次並更新數據庫

[英]How to scale? Make Rest API calls thousands times and update database

for (Transaction id : transactionIds) {

    1. db update call
    2. response =  post request Rest API call
    3. catch excepetion and update the db (transactoin failed)
    4. db update call with above response

}

問題陳述 - 我使用需要按上面給出的處理的 cron 作業從 transactionIds 中的 db 獲得 5000 多個事務。 使用上述方法,而我的上一個循環正在進行,接下來 5000 多個事務進入循環,因為 cron 作業在 2 分鍾內運行。 我已經檢查了多個解決方案( .parallelStream() 與 ForkJoinPool / ListenableFuture ,但無法確定哪個是擴展上述代碼的最佳解決方案。

解決這個問題的一種方法是使用 Kafka 來消費消息。 您可以增加 pod 的數量(希望您使用的是微服務),並且每個 pod 都可以成為消費者組的一部分。 這將有效地消除代碼中的循環,並且可以根據需要增加消費者以處理任何規模。

基於消息的方法的另一個優點是您可以有多種交付模式(至少一次,最多一次等),並且有很多開源庫可用於查看主題的統計信息(消息消費和生產之間的滯后在一個主題中)。

如果這是不可能的,

  1. rest 調用不應發生在每筆交易中,您需要將交易作為批次發布。 API 調用總是很昂貴,因此較少的往返將使您完成循環所需的時間有很大差異。
  2. 不用在API調用前后直接更新DB,可以改循環使用repository.saveAll(yourentitycollection) //循環后只調用一個DB,可以批量
  3. 建議您在不久的將來轉向生產者-消費者策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM