2x.png
不要短時間大量重複讀寫相同的key
server端的原理是網絡收包後,放入到工作隊列(讀寫隊列分離,但都隻有一個),再由工作線程從隊列中取出進行處理。這裡一個問題是,為保證資料的正确性,會對同一個key的讀寫加鎖,而如果存在大量讀寫同一個key的情況,則勢必會阻塞其他線程(鎖不慢,鎖競争才慢),導緻拖慢整個服務端的處理速度。
不要使用時間戳作為key的一部分,容易導緻一段時間内所有流量都通路一台服務端機器,導緻服務端壓力過大而出現大量逾時
Value大小多大合适
value建議不超過50KB,value越大,服務端能承受qps越低,請求耗時越大,當value大小超過1MB時,緩存失效,讀寫性能将嚴重受影響
逾時時間設定多少合适
普通kv接口:單key請求逾時時間建議設定100ms以上,批量請求逾時時間建議設定200ms以上
特殊資料結構接口:逾時時間建議設定500ms左右
逾時是否需要重試
寫逾時:除非服務端壓力過大丢棄請求,否則所有寫請求在服務端都會執行成功,隻是沒有傳回結果給用戶端,除非業務邏輯依賴資料的強一緻性,否則不需要重試
讀逾時:如果是批量接口,建議設定傳回比例(參數為BatchReturnPercent),如果需要重試,建議sleep 100ms左右後重試,重試不要超過3次
批量請求使用注意
批量請求key個數
批量請求key個數建議不要超過100個
batchGet請求如何提升可用性
可以設定批量請求傳回比例(參數為BatchReturnPercent)
複雜資料結構中元素不宜過多
tair目前引擎對于複雜資料結構,如list,set,map,prefix接口,支援的不夠友好。
這些複雜資料結構的元素不要存儲超過2000個,後續服務端會限制元素個數,個數超過後禁止寫入。
作為緩存使用時,不要在擷取資料失敗時直接重寫緩存資料
擷取資料失敗的原因很多,但是隻有在确定資料不存在的情況下,才需要重寫緩存資料。如果沒有正确區分失敗的情況就直接重寫緩存資料,則可能會加劇失敗的可能,同時會對叢集造成更大的壓力。例如在逾時的情況下重寫緩存資料,逾時次數可能會更多,且有雪崩的風險。
隻有出現下面其中一個傳回碼時,才需要重寫緩存資料:
- NOTEXIST (-3998) - 資料不存在
- EXPIRED (-3988) - 資料已過期
Prefix接口相關
不要在同一個pkey下存放過多skey
一個pkey下skey個數建議小于1000,在同一個pkey下存放過多的skey可能會導緻性能問題。同一個pkey下的所有skey資料在實體上都存放在同一個機器上,當skey數量過多時,到同一台機器的請求也會增多。如果存在一個pkey是熱點key, 則熱點流量會集中到一台機器上,且無法通過擴容均衡壓力。一種極端的錯誤使用情況是,整個資料空間隻有一個pkey, 所有資料都作為skey,這個情況下整個叢集的全部流量都集中在叢集中的一台機器上,造成整個叢集的性能降低為隻相當于單機的性能。為了避免這些情況,不要在pkey下存放過多skey, 并且在整個資料空間中需要存在足夠數量的pkey,以将流量均衡到叢集中的各台機器上。
batchPrefixGetMulti接口使用注意
該接口沒有部分傳回機制和重試機制,容易受網絡問題、熱點問題等影響而出現少量逾時,減少每個包中的pkey個數可以緩解
優先使用prefixGet,而不是getRange
prefixGet比getRange擁有更好的性能。prefixGet會優先從記憶體緩存中擷取資料,而getRange隻能通過磁盤掃描來擷取資料。
注意傳入getRange接口的參數
傳入getRange接口的參數,對于getRange接口的性能,以及對叢集造成的壓力都有很重要的影響,是以傳入正确的參數非常重要。
- 盡量設定skey的範圍,即skey_start和skey_end
- offset不宜較大,可以通過設定skey_start,而避免設定offset為較大的數值
可能需要多次調用getRange來擷取全部資料
getRange接口最多傳回1M的資料。如果pkey下面skey的value較大,全部資料大小超過了1M,getRange隻會傳回1M的資料,同時傳回碼為HAS_MORE_DATA。
getRange接口有三個較重要的傳回碼:
- OK (0) - 表示參數中要求的所有資料都已正确擷取
- HAS_MORE_DATA (150) - 隻擷取了參數中要求的部分資料,需要再次調用來擷取剩餘資料。需要注意的是,再次調用時需要調用者調整調用參數。
- NOTEXIST (-3998) - 參數中要求的資料不存在
是以,當getRange接口傳回HAS_MORE_DATA時,則需要調用者根據已經擷取到的資料,調整調用參數,繼續調用getRange來擷取剩餘的資料,直到getRange傳回OK或者NOT_EXIST。
歡迎關注
高廣超的簡書部落格與 收藏文章 !
頭條号:網際網路技術棧!
個人介紹:
高廣超:多年一線網際網路研發與架構設計經驗,擅長設計與落地高可用、高性能、可擴充的網際網路架構。
本文首發在
轉載請注明!