0

我有一個場景,我感到困惑的使用線程或進程:用於給定場景的進程或線程?

我有一個會談到由不同的公司提供了幾個其他的第三方網絡應用程序,並從這些應用程序中提取數據的應用程序。所以基本上我的應用程序會碰到這些第三方應用程序提供的api,帶來大量數據並將它們轉儲到數據庫中。

現在有許多因素顯著喜歡這裏 - 網絡延遲,數據庫的讀/寫,快/慢服務器在兩端等,所以基本上是應用在很大程度上耗費時間和資源,其性能取決於多種因素。

現在對於帶來如此巨大的數據什麼可以設計使用進程/線程方面應用的最佳方式是什麼?

我所知道的線程有許多積極的一面一樣 - 快速上下文切換,資源共享,重量輕等。並且過程比線程更重。

從我的應用程序的角度來看,我有以下要求:

  1. 數據庫和網絡是多進程/線程之間共享。
  2. 相互排斥必須在那裏。
  3. 該應用程序必須是防撞的。所以當一個線程崩潰時,它不會影響整個過程。

因此,對於上述情況,建議我該怎麼做 - 線程在相同的進程或多個進程?

請指出我是否在思維過程中遺漏任何案例。

回答

0

首先,恕我直言,你不應該去想的進程和線程級的解決方案。 除此之外,您應該首先想出一個沒有任何可伸縮性,性能和高可用性問題的解決方案。

例如,據我瞭解,你會消耗第三方外部服務與REST客戶端。所以你需要一個http客戶端層。 那麼很可能您會將傳入的數據轉換爲您自己的數據結構。 最後,您將需要一個數據庫層來保存轉換後的數據。

當你有你的解決方案後,你可以測試它,並找出哪些層需要性能改進,可伸縮性和高可用性的調整。

因爲「巨大的」,在「海量數據」是模糊的。不僅數據規模而且處理「巨大數據」所需的時間也很重要。如果您需要在一天內處理100 GB的數據,這可能並不是什麼大不了的事情,但是每分鐘處理100MB的數據可以。

因此,作爲我學到的一個通用優化規則,在對優化和可伸縮性做任何更改之前,您應該清楚地瞭解每個解決方案並確定問題點。否則,你可能會花費很多不必要的時間來優化錯誤的部分,最後你會想出一個不可擴展和逾期的解決方案。