這兩服務都是上報統計服務。。寫法功能,代碼邏輯都是類似。

 

下面是PropertyServer的介紹

 

此服務,應該性能瓶頸在db。所以採取的策略是,把上報的數據,放在內存緩存中。後面再異步批量寫入db而且是分多個db。

為了儘量挖掘性能,在內存中,有着一組 繼承於TarsHashMap的 hashMap.雙buff。。

 

PropertyF.tar 實現流程

reportPropMsg 上報屬性統計信息 Prop = property

接到上報數據後,加入上面的雙buff的hashMap中。

 

 

PropertyReapThread 用於執行定時操作的線程類

此線程數為1個

這個線程,輪番拿上面的 雙buff的hashMap 入庫。。

這裏的過程大致是,從hashMap中獲取數據後,輪着往db指定ReapSSDProcThread線程中存放.

 

搞雙buff的好處很明顯。一邊是讀,一邊是寫,不用加鎖。互相不影響。

此線程3s輪詢一次。

 

 

ReapSSDProcThread 向數據庫插入數據的線程類

此線程數為 _dbIpNum * _oneDbHasThreadNum

 

_dbIpNum 取值取決於兩個數, “/tars/multidb/”配的db數 配置文件配了2個,實際視情況而定;還有個是,配在/tars/reapSql<insertThreadByMachine>,代碼默認是4。這兩個值中取更小的那個

_oneDbHasThreadNum 取值取決於兩個數,一個db所對的線程數 /tars/reapSql<insertThreadByDB> 代碼默認是2;還有個數是上麥的配置的multidb數。這兩個值中取更大的那個。

 

數據所插入的表名是配在對應 /tars/multidb/" + vDb[i] + "<tbname> 中的。默認是 "t_propert_0" + TC_Common::tostr(i) + "_")。醬紫的。

 

數據插入是,累積到100條一次批量插入。最後不足100條時,一次插入。

 

如果插入db操作時間超過. 40 * _insertInterval.則,發sendAlarmSMS(sMsg)。。這個是短信告警嗎?

其中_insertInterval 值是 配在/tars/hashmap<insertInterval>中。默認配置是5s.。並且此值不小於5s

 

 

 

上報端 上報詳解

在Application::waitForQuit中。定時5S一次檢測下。距離上次上報超過10s,則執行一次 "統計服務端相應隊列大小的上報的對象"上報.

 

 

StatServer流程類似。

具體上報細節。以後再補