個(gè)推專注為開(kāi)發(fā)者們提供消息推送服務(wù)多年。通過(guò)個(gè)推SDK,手機(jī)終端與服務(wù)器建立長(zhǎng)連接,維持在線狀態(tài)。然而在網(wǎng)絡(luò)異常等情況下,消息無(wú)法實(shí)時(shí)送達(dá)到終端用戶,因而推送服務(wù)器建立了一份離線消息列表,以待用戶重新登錄時(shí),進(jìn)行消息的下發(fā)。這部分?jǐn)?shù)據(jù)存儲(chǔ)在個(gè)推Redis集群,整個(gè)集群包括主從共百余個(gè)實(shí)例,key的數(shù)量在10億級(jí)別,存儲(chǔ)空間在T級(jí)別,帶來(lái)了一定的維護(hù)成本和運(yùn)維挑戰(zhàn)。作為個(gè)推的后端開(kāi)發(fā)工程師,我們也一直在尋找高性價(jià)比的方案。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到竹山網(wǎng)站設(shè)計(jì)與竹山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋竹山地區(qū)。個(gè)推整個(gè)集群的QPS在百萬(wàn)級(jí)別,若選擇使用Aerospike,對(duì)比實(shí)測(cè)下來(lái),我們發(fā)現(xiàn)單臺(tái)搭載單塊Inter SSD 4600的物理機(jī),可以達(dá)到接近10w的QPS,即幾十臺(tái)機(jī)器就可以滿足現(xiàn)有的需求,并能夠支撐未來(lái)較長(zhǎng)一段時(shí)間的業(yè)務(wù)需求。
Aerospike的優(yōu)勢(shì)
Aerospike是一個(gè)高性能、可擴(kuò)展、可靠性強(qiáng)的NoSQL解決方案,支持RAM和SSD作為存儲(chǔ)介質(zhì),并專門(mén)針對(duì)SSD特殊優(yōu)化,廣泛應(yīng)用于實(shí)時(shí)競(jìng)價(jià)等實(shí)時(shí)計(jì)算領(lǐng)域。官方保證99%的操作在1ms內(nèi)完成,并提供集群數(shù)據(jù)自動(dòng)Rebalance、集群感知客戶端等功能,且支持超大規(guī)模數(shù)據(jù)集(100T級(jí)別)的存儲(chǔ)。
作為KV存儲(chǔ),Aerospike提供多種數(shù)據(jù)類型,其操作方式和Redis比較類似。除基礎(chǔ)功能之外,Aerospike還支持AMC控制臺(tái)、API等多種監(jiān)控方式,有集群QPS、健康度、負(fù)載等多項(xiàng)監(jiān)控指標(biāo),對(duì)運(yùn)維比較友好。支持集群內(nèi)數(shù)據(jù)的自動(dòng)Rebalance,和Redis集群方案相比,維護(hù)成本下降不少。
本文主要做一些Aerospike灰度部署、使用方面的經(jīng)驗(yàn)分享,希望對(duì)正在調(diào)研或者已經(jīng)準(zhǔn)備使用Aerospike的讀者提供一些參考。此外,灰度的理念并不限于Aerospike本身,對(duì)其他基礎(chǔ)組件的遷移和規(guī)劃,也能夠帶來(lái)一定的借鑒意義。
數(shù)據(jù)模型說(shuō)明
Aerospike采用無(wú)模式存儲(chǔ),數(shù)據(jù)模型類似RDBMS,因而在理解與使用上相對(duì)親切:
每個(gè)namespace包含多個(gè)set,每個(gè)set包含多條record,每個(gè)record包含多個(gè)bin(數(shù)據(jù)庫(kù)列),可通過(guò)索引key來(lái)查詢r(jià)ecord。不同的業(yè)務(wù)可以使用同一個(gè)集群的不同namespace來(lái)作做資源隔離,從而實(shí)現(xiàn)資源池化、大化利用資源的目的。
灰度上線流程
個(gè)推在離線消息列表存儲(chǔ)這項(xiàng)業(yè)務(wù)中使用了較大規(guī)模的Redis集群。我們先后調(diào)研了ssdb、pika等支持Redis協(xié)議的磁盤(pán)存儲(chǔ),整體計(jì)算下來(lái),Aerospike的性價(jià)比高。
前期我們結(jié)合線上場(chǎng)景模擬實(shí)際讀寫(xiě)比例(分析線上業(yè)務(wù),我們發(fā)現(xiàn)寫(xiě)和讀大致比例在1:1 ~ 1:2之間)進(jìn)行壓測(cè),對(duì)可行性進(jìn)行評(píng)估和驗(yàn)證,然后進(jìn)行投產(chǎn)規(guī)劃。
線上業(yè)務(wù)比較龐雜,直接全量切到Aerospike不太現(xiàn)實(shí),風(fēng)險(xiǎn)也比較大。測(cè)試網(wǎng)模擬驗(yàn)證難以暴露出生產(chǎn)環(huán)境下可能出現(xiàn)的問(wèn)題,因此我們將整個(gè)上線流程劃分為觀察階段和灰度階段。觀察階段顧名思義,原Redis集群仍然承擔(dān)線上讀寫(xiě)業(yè)務(wù),只是將同樣的流量復(fù)制一份導(dǎo)入Aerospike,來(lái)進(jìn)行真實(shí)壓力驗(yàn)證; 灰度階段將線上業(yè)務(wù)逐步切到Aerospike集群,擴(kuò)大灰度保證集群穩(wěn)定運(yùn)行至業(yè)務(wù)完全切到Aerospike。兩個(gè)階段具體操作如下:
觀察階段: Redis操作成功后,對(duì)Redis的讀寫(xiě)操作以異步方式同步到Aerospike,Aerospike不承擔(dān)具體業(yè)務(wù)。下一步是數(shù)據(jù)雙寫(xiě)Redis和Aerospike。該階段主要觀察兩邊數(shù)據(jù)是否一致,Aerospike壓力等。同時(shí)觀察階段可以進(jìn)行節(jié)點(diǎn)重啟、集群擴(kuò)容等運(yùn)維操作,評(píng)估運(yùn)維成本,優(yōu)化配置等。這里可使用AMC頁(yè)面控制臺(tái)、監(jiān)控API來(lái)監(jiān)控集群狀態(tài),客戶端調(diào)用部分記錄必要日志和監(jiān)控信息。
灰度階段: Aerospike開(kāi)始承擔(dān)部分應(yīng)用和任務(wù)的離線消息列表存儲(chǔ)。灰度階段Redis和Aerospike數(shù)據(jù)雙寫(xiě)雙清,保持熱備狀態(tài),直至Redis數(shù)據(jù)完全切換到Aerospike并穩(wěn)定運(yùn)行一段時(shí)間。
觀察階段非常重要,基本上是對(duì)整個(gè)方案可行性進(jìn)行線上評(píng)估。這個(gè)階段觀察點(diǎn)分為客戶端(AS-Client)和服務(wù)端(AS-Server)兩部分??蛻舳酥饕^察:
1.使用metrics監(jiān)控客戶端請(qǐng)求響應(yīng)耗時(shí),利用一段時(shí)間內(nèi)的請(qǐng)求耗時(shí)百分比分布(50%, 90%, 99%, 99.9%),評(píng)估系統(tǒng)SLA。
2.監(jiān)控讀寫(xiě)成功、失敗等情況的計(jì)數(shù)。
3.將慢日志閾值設(shè)定為50ms,統(tǒng)計(jì)高峰期和平常時(shí)段的慢日志情況。
4.異步寫(xiě)Aerospike隊(duì)列監(jiān)控,合理調(diào)整隊(duì)列大小。
服務(wù)端主要觀察:
1.集群的健康度。
2.磁盤(pán)和內(nèi)存占用情況,內(nèi)存空間/磁盤(pán)空間比例。
3.機(jī)器IO負(fù)載、CPU負(fù)載、磁盤(pán)碎片化程度等信息。
4.集群吞吐量,讀寫(xiě)TPS是否能與線上Redis集群相當(dāng)。
5.數(shù)據(jù)一致性檢查。如何檢查觀察階段和灰度階段兩份數(shù)據(jù)的一致情況?逐key比對(duì)差異在性能上難以滿足要求??紤]數(shù)據(jù)完全一致情況下Redis查出的數(shù)據(jù)應(yīng)該和Aerospike查出來(lái)的數(shù)據(jù)完全相同,所以抽樣記錄Redis和Aerospike的數(shù)據(jù)查詢結(jié)果記錄到日志,對(duì)比分析1分鐘、5分鐘、30分鐘、1小時(shí)內(nèi)不一致數(shù)據(jù)占比。如果線上Key的數(shù)量在10億級(jí)別,即便只檢查出萬(wàn)分之一的差異,那么不一致的情況也很顯著了。這種情況下,就需要排查引發(fā)不一致情況的原因并解決。
維護(hù)性方面主要考慮到集群數(shù)據(jù)自動(dòng)Rebalance會(huì)帶來(lái)一定的性能下降,可能對(duì)用戶體驗(yàn)有較大影響,結(jié)合我們的經(jīng)驗(yàn),模擬了一些典型的運(yùn)維場(chǎng)景:
1.模擬單節(jié)點(diǎn)故障導(dǎo)致的集群Rebalance對(duì)系統(tǒng)性能的影響。
2.模擬集群擴(kuò)容導(dǎo)致的集群Rebalance對(duì)系統(tǒng)性能的影響。
3.根據(jù)對(duì)線上業(yè)務(wù)的影響,計(jì)算白天和晚上集群的Rebalance速度,同時(shí)支持cron job更新。
4.節(jié)點(diǎn)重啟。
5.增加SSD掛載。
6.相關(guān)配置的優(yōu)化等。
總結(jié)一下,完整的上線流程分為以下幾步:
0.模擬線上環(huán)境壓測(cè),進(jìn)行可行性驗(yàn)證。
1.將Aerospike客戶端封裝成類Redis的接口,添加必要日志、監(jiān)控項(xiàng),對(duì)Bin的有效性檢查等。
2.消息服務(wù)集成Aerospike客戶端,需要的功能包括: Aerospike異步讀寫(xiě),業(yè)務(wù)數(shù)據(jù)源切換,流量過(guò)濾等。
3.QA功能驗(yàn)證。
4.申請(qǐng)資源,線上部署Aerospike集群。
5.集成Aerospike功能的消息服務(wù)上線。
6.觀察階段驗(yàn)證通過(guò)后,進(jìn)入灰度階段,直至最終上線或中途撤回。
經(jīng)驗(yàn)總結(jié)
在Aerospike使用過(guò)程中,我們遇到了一些問(wèn)題和挑戰(zhàn),總結(jié)為下面幾點(diǎn):
1.Aerospike開(kāi)啟single-bin的模式會(huì)節(jié)省占用空間。
2.Aerospike不會(huì)存儲(chǔ)原始key,實(shí)際索引的是原始key的一個(gè)20字節(jié)hash值,如果業(yè)務(wù)需要使用原始key則必須另外設(shè)置bin存儲(chǔ)。即便key和value值的字節(jié)數(shù)較少,但key本身占據(jù)20個(gè)字節(jié),因而實(shí)際占用的空間會(huì)比較大。
3.Aerospike在節(jié)點(diǎn)宕機(jī)或是增減節(jié)點(diǎn)時(shí)會(huì)Rebalance數(shù)據(jù),這個(gè)過(guò)程會(huì)影響對(duì)外服務(wù)質(zhì)量。但Rebalance速度可以控制,因而需要在保證服務(wù)質(zhì)量和集群快速恢復(fù)二者間做權(quán)衡。
4.社區(qū)版本集群每次重啟都要重建索引,然后加載到內(nèi)存,這會(huì)導(dǎo)致速度比較慢。namespace需要在配置文件中指定,因而最好能按業(yè)務(wù)劃分,預(yù)先分配好將來(lái)可能用到的namespace,減少不必要的重啟。
5.因?yàn)镾SD本身存在碎片和寫(xiě)入放大的問(wèn)題,實(shí)際使用中,我們發(fā)現(xiàn)若磁盤(pán)空間使用量在50%左右,性能下降會(huì)比較嚴(yán)重。故可以結(jié)合實(shí)際業(yè)務(wù)優(yōu)化碎片整理相關(guān)參數(shù)。
6.Aerospike對(duì)HotKey有限制,因而頻繁對(duì)一個(gè)key讀寫(xiě)時(shí),會(huì)返回HotKey錯(cuò)誤(errorcode 14) 。服務(wù)端可以通過(guò)增大 transaction-pending-limit配置來(lái)提高對(duì)同一個(gè)key操作的并發(fā)量,它的默認(rèn)為20,值為0時(shí)表示不限。增大該配置可能會(huì)降低一定性能??蛻舳丝赡苄枰獙?duì)該異常增加重試處理,但重試可能會(huì)進(jìn)一步增大HotKey的風(fēng)險(xiǎn)。
7.這種基礎(chǔ)組件的更迭一定要盡可能使用線上流量做壓力檢驗(yàn),從而盡早暴露潛在問(wèn)題。
8.觀察階段也要評(píng)估運(yùn)維成本,避免從一個(gè)坑跳進(jìn)另一個(gè)坑。
9.使用過(guò)程中還需要注意Aerospike的一些固有限制,如一個(gè)namespace最多有1023個(gè)set 、bin名字長(zhǎng)度最多14個(gè)單字節(jié)字符 、一個(gè)namespace最多支持64塊SSD 等等,具體可參考:aerospike_known_limitations。
結(jié)語(yǔ)
Aerospike作為一個(gè)大容量的NoSql解決方案,并未在國(guó)內(nèi)廠中廣泛商使用。它適合對(duì)容量要求比較大,QPS相對(duì)低一些的場(chǎng)景,一定程度上可以節(jié)省TCO。支持命令上,Aerospike和Redis比較相像,業(yè)務(wù)遷移過(guò)來(lái)也比較容易。它天然地支持集群部署,對(duì)監(jiān)控和運(yùn)維支持比較友好。盡管擁有這么多優(yōu)良特性,但技術(shù)選型時(shí)還是要持審慎態(tài)度,預(yù)先評(píng)估是否符合自己的業(yè)務(wù)場(chǎng)景,性能和成本是否能夠滿足要求等。在官方的某些測(cè)試場(chǎng)景下,它的性能比Redis還要高,實(shí)際上因?yàn)镾SD本身的限制,大部分情況下,它在QPS方面與Redis差距較大。最后,上線前務(wù)必經(jīng)過(guò)線上流量驗(yàn)證,用灰度方式處理實(shí)際線上業(yè)務(wù),最小化影響用戶體驗(yàn)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前名稱:大容量NoSql解決方案:Aerospike實(shí)戰(zhàn)-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://aaarwkj.com/article16/gjpdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、標(biāo)簽優(yōu)化、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容