真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

nosql時(shí)間排序,mysql時(shí)間排序

高并發(fā),你真的理解透徹了嗎?

高并發(fā),幾乎是每個(gè)程序員都想擁有的經(jīng)驗(yàn)。原因很簡(jiǎn)單:隨著流量變大,會(huì)遇到各種各樣的技術(shù)問(wèn)題,比如接口響應(yīng)超時(shí)、CPU load升高、GC頻繁、死鎖、大數(shù)據(jù)量存儲(chǔ)等等,這些問(wèn)題能推動(dòng)我們?cè)诩夹g(shù)深度上不斷精進(jìn)。

為安丘等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及安丘網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、安丘網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

在過(guò)往的面試中,如果候選人做過(guò)高并發(fā)的項(xiàng)目,我通常會(huì)讓對(duì)方談?wù)剬?duì)于高并發(fā)的理解,但是能系統(tǒng)性地回答好此問(wèn)題的人并不多。

大概分成這樣幾類:

1、對(duì)數(shù)據(jù)化的指標(biāo)沒(méi)有概念 :不清楚選擇什么樣的指標(biāo)來(lái)衡量高并發(fā)系統(tǒng)?分不清并發(fā)量和QPS,甚至不知道自己系統(tǒng)的總用戶量、活躍用戶量,平峰和高峰時(shí)的QPS和TPS等關(guān)鍵數(shù)據(jù)。

3、理解片面,把高并發(fā)設(shè)計(jì)等同于性能優(yōu)化 :大談并發(fā)編程、多級(jí)緩存、異步化、水平擴(kuò)容,卻忽視高可用設(shè)計(jì)、服務(wù)治理和運(yùn)維保障。

4、掌握大方案,卻忽視最基本的東西 :能講清楚垂直分層、水平分區(qū)、緩存等大思路,卻沒(méi)意識(shí)去分析數(shù)據(jù)結(jié)構(gòu)是否合理,算法是否高效,沒(méi)想過(guò)從最根本的IO和計(jì)算兩個(gè)維度去做細(xì)節(jié)優(yōu)化。

這篇文章,我想結(jié)合自己的高并發(fā)項(xiàng)目經(jīng)驗(yàn),系統(tǒng)性地總結(jié)下高并發(fā)需要掌握的知識(shí)和實(shí)踐思路,希望對(duì)你有所幫助。內(nèi)容分成以下3個(gè)部分:

高并發(fā)意味著大流量,需要運(yùn)用技術(shù)手段抵抗流量的沖擊,這些手段好比操作流量,能讓流量更平穩(wěn)地被系統(tǒng)所處理,帶給用戶更好的體驗(yàn)。

我們常見(jiàn)的高并發(fā)場(chǎng)景有:淘寶的雙11、春運(yùn)時(shí)的搶票、微博大V的熱點(diǎn)新聞等。除了這些典型事情,每秒幾十萬(wàn)請(qǐng)求的秒殺系統(tǒng)、每天千萬(wàn)級(jí)的訂單系統(tǒng)、每天億級(jí)日活的信息流系統(tǒng)等,都可以歸為高并發(fā)。

很顯然,上面談到的高并發(fā)場(chǎng)景,并發(fā)量各不相同, 那到底多大并發(fā)才算高并發(fā)呢?

1、不能只看數(shù)字,要看具體的業(yè)務(wù)場(chǎng)景。不能說(shuō)10W QPS的秒殺是高并發(fā),而1W QPS的信息流就不是高并發(fā)。信息流場(chǎng)景涉及復(fù)雜的推薦模型和各種人工策略,它的業(yè)務(wù)邏輯可能比秒殺場(chǎng)景復(fù)雜10倍不止。因此,不在同一個(gè)維度,沒(méi)有任何比較意義。

2、業(yè)務(wù)都是從0到1做起來(lái)的,并發(fā)量和QPS只是參考指標(biāo),最重要的是:在業(yè)務(wù)量逐漸變成原來(lái)的10倍、100倍的過(guò)程中,你是否用到了高并發(fā)的處理方法去演進(jìn)你的系統(tǒng),從架構(gòu)設(shè)計(jì)、編碼實(shí)現(xiàn)、甚至產(chǎn)品方案等維度去預(yù)防和解決高并發(fā)引起的問(wèn)題?而不是一味的升級(jí)硬件、加機(jī)器做水平擴(kuò)展。

此外,各個(gè)高并發(fā)場(chǎng)景的業(yè)務(wù)特點(diǎn)完全不同:有讀多寫少的信息流場(chǎng)景、有讀多寫多的交易場(chǎng)景, 那是否有通用的技術(shù)方案解決不同場(chǎng)景的高并發(fā)問(wèn)題呢?

我覺(jué)得大的思路可以借鑒,別人的方案也可以參考,但是真正落地過(guò)程中,細(xì)節(jié)上還會(huì)有無(wú)數(shù)的坑。另外,由于軟硬件環(huán)境、技術(shù)棧、以及產(chǎn)品邏輯都沒(méi)法做到完全一致,這些都會(huì)導(dǎo)致同樣的業(yè)務(wù)場(chǎng)景,就算用相同的技術(shù)方案也會(huì)面臨不同的問(wèn)題,這些坑還得一個(gè)個(gè)趟。

因此,這篇文章我會(huì)將重點(diǎn)放在基礎(chǔ)知識(shí)、通用思路、和我曾經(jīng)實(shí)踐過(guò)的有效經(jīng)驗(yàn)上,希望讓你對(duì)高并發(fā)有更深的理解。

先搞清楚高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo),在此基礎(chǔ)上再討論設(shè)計(jì)方案和實(shí)踐經(jīng)驗(yàn)才有意義和針對(duì)性。

高并發(fā)絕不意味著只追求高性能,這是很多人片面的理解。從宏觀角度看,高并發(fā)系統(tǒng)設(shè)計(jì)的目標(biāo)有三個(gè):高性能、高可用,以及高可擴(kuò)展。

1、高性能:性能體現(xiàn)了系統(tǒng)的并行處理能力,在有限的硬件投入下,提高性能意味著節(jié)省成本。同時(shí),性能也反映了用戶體驗(yàn),響應(yīng)時(shí)間分別是100毫秒和1秒,給用戶的感受是完全不同的。

2、高可用:表示系統(tǒng)可以正常服務(wù)的時(shí)間。一個(gè)全年不停機(jī)、無(wú)故障;另一個(gè)隔三差五出線上事故、宕機(jī),用戶肯定選擇前者。另外,如果系統(tǒng)只能做到90%可用,也會(huì)大大拖累業(yè)務(wù)。

3、高擴(kuò)展:表示系統(tǒng)的擴(kuò)展能力,流量高峰時(shí)能否在短時(shí)間內(nèi)完成擴(kuò)容,更平穩(wěn)地承接峰值流量,比如雙11活動(dòng)、明星離婚等熱點(diǎn)事件。

這3個(gè)目標(biāo)是需要通盤考慮的,因?yàn)樗鼈兓ハ嚓P(guān)聯(lián)、甚至也會(huì)相互影響。

比如說(shuō):考慮系統(tǒng)的擴(kuò)展能力,你會(huì)將服務(wù)設(shè)計(jì)成無(wú)狀態(tài)的,這種集群設(shè)計(jì)保證了高擴(kuò)展性,其實(shí)也間接提升了系統(tǒng)的性能和可用性。

再比如說(shuō):為了保證可用性,通常會(huì)對(duì)服務(wù)接口進(jìn)行超時(shí)設(shè)置,以防大量線程阻塞在慢請(qǐng)求上造成系統(tǒng)雪崩,那超時(shí)時(shí)間設(shè)置成多少合理呢?一般,我們會(huì)參考依賴服務(wù)的性能表現(xiàn)進(jìn)行設(shè)置。

再?gòu)奈⒂^角度來(lái)看,高性能、高可用和高擴(kuò)展又有哪些具體的指標(biāo)來(lái)衡量?為什么會(huì)選擇這些指標(biāo)呢?

2.2.1 性能指標(biāo)

通過(guò)性能指標(biāo)可以度量目前存在的性能問(wèn)題,同時(shí)作為性能優(yōu)化的評(píng)估依據(jù)。一般來(lái)說(shuō),會(huì)采用一段時(shí)間內(nèi)的接口響應(yīng)時(shí)間作為指標(biāo)。

1、平均響應(yīng)時(shí)間:最常用,但是缺陷很明顯,對(duì)于慢請(qǐng)求不敏感。比如1萬(wàn)次請(qǐng)求,其中9900次是1ms,100次是100ms,則平均響應(yīng)時(shí)間為1.99ms,雖然平均耗時(shí)僅增加了0.99ms,但是1%請(qǐng)求的響應(yīng)時(shí)間已經(jīng)增加了100倍。

2、TP90、TP99等分位值:將響應(yīng)時(shí)間按照從小到大排序,TP90表示排在第90分位的響應(yīng)時(shí)間, 分位值越大,對(duì)慢請(qǐng)求越敏感。

3、吞吐量:和響應(yīng)時(shí)間呈反比,比如響應(yīng)時(shí)間是1ms,則吞吐量為每秒1000次。

通常,設(shè)定性能目標(biāo)時(shí)會(huì)兼顧吞吐量和響應(yīng)時(shí)間,比如這樣表述:在每秒1萬(wàn)次請(qǐng)求下,AVG控制在50ms以下,TP99控制在100ms以下。對(duì)于高并發(fā)系統(tǒng),AVG和TP分位值必須同時(shí)要考慮。

另外,從用戶體驗(yàn)角度來(lái)看,200毫秒被認(rèn)為是第一個(gè)分界點(diǎn),用戶感覺(jué)不到延遲,1秒是第二個(gè)分界點(diǎn),用戶能感受到延遲,但是可以接受。

因此,對(duì)于一個(gè) 健康 的高并發(fā)系統(tǒng),TP99應(yīng)該控制在200毫秒以內(nèi),TP999或者TP9999應(yīng)該控制在1秒以內(nèi)。

2.2.2 可用性指標(biāo)

高可用性是指系統(tǒng)具有較高的無(wú)故障運(yùn)行能力,可用性 = 正常運(yùn)行時(shí)間 / 系統(tǒng)總運(yùn)行時(shí)間,一般使用幾個(gè)9來(lái)描述系統(tǒng)的可用性。

對(duì)于高并發(fā)系統(tǒng)來(lái)說(shuō),最基本的要求是:保證3個(gè)9或者4個(gè)9。原因很簡(jiǎn)單,如果你只能做到2個(gè)9,意味著有1%的故障時(shí)間,像一些大公司每年動(dòng)輒千億以上的GMV或者收入,1%就是10億級(jí)別的業(yè)務(wù)影響。

2.2.3 可擴(kuò)展性指標(biāo)

面對(duì)突發(fā)流量,不可能臨時(shí)改造架構(gòu),最快的方式就是增加機(jī)器來(lái)線性提高系統(tǒng)的處理能力。

對(duì)于業(yè)務(wù)集群或者基礎(chǔ)組件來(lái)說(shuō),擴(kuò)展性 = 性能提升比例 / 機(jī)器增加比例,理想的擴(kuò)展能力是:資源增加幾倍,性能提升幾倍。通常來(lái)說(shuō),擴(kuò)展能力要維持在70%以上。

但是從高并發(fā)系統(tǒng)的整體架構(gòu)角度來(lái)看,擴(kuò)展的目標(biāo)不僅僅是把服務(wù)設(shè)計(jì)成無(wú)狀態(tài)就行了,因?yàn)楫?dāng)流量增加10倍,業(yè)務(wù)服務(wù)可以快速擴(kuò)容10倍,但是數(shù)據(jù)庫(kù)可能就成為了新的瓶頸。

像MySQL這種有狀態(tài)的存儲(chǔ)服務(wù)通常是擴(kuò)展的技術(shù)難點(diǎn),如果架構(gòu)上沒(méi)提前做好規(guī)劃(垂直和水平拆分),就會(huì)涉及到大量數(shù)據(jù)的遷移。

因此,高擴(kuò)展性需要考慮:服務(wù)集群、數(shù)據(jù)庫(kù)、緩存和消息隊(duì)列等中間件、負(fù)載均衡、帶寬、依賴的第三方等,當(dāng)并發(fā)達(dá)到某一個(gè)量級(jí)后,上述每個(gè)因素都可能成為擴(kuò)展的瓶頸點(diǎn)。

了解了高并發(fā)設(shè)計(jì)的3大目標(biāo)后,再系統(tǒng)性總結(jié)下高并發(fā)的設(shè)計(jì)方案,會(huì)從以下兩部分展開:先總結(jié)下通用的設(shè)計(jì)方法,然后再圍繞高性能、高可用、高擴(kuò)展分別給出具體的實(shí)踐方案。

通用的設(shè)計(jì)方法主要是從「縱向」和「橫向」兩個(gè)維度出發(fā),俗稱高并發(fā)處理的兩板斧:縱向擴(kuò)展和橫向擴(kuò)展。

3.1.1 縱向擴(kuò)展(scale-up)

它的目標(biāo)是提升單機(jī)的處理能力,方案又包括:

1、提升單機(jī)的硬件性能:通過(guò)增加內(nèi)存、 CPU核數(shù)、存儲(chǔ)容量、或者將磁盤 升級(jí)成SSD 等堆硬件的方式來(lái)提升。

2、提升單機(jī)的軟件性能:使用緩存減少IO次數(shù),使用并發(fā)或者異步的方式增加吞吐量。

3.1.2 橫向擴(kuò)展(scale-out)

因?yàn)閱螜C(jī)性能總會(huì)存在極限,所以最終還需要引入橫向擴(kuò)展,通過(guò)集群部署以進(jìn)一步提高并發(fā)處理能力,又包括以下2個(gè)方向:

1、做好分層架構(gòu):這是橫向擴(kuò)展的提前,因?yàn)楦卟l(fā)系統(tǒng)往往業(yè)務(wù)復(fù)雜,通過(guò)分層處理可以簡(jiǎn)化復(fù)雜問(wèn)題,更容易做到橫向擴(kuò)展。

上面這種圖是互聯(lián)網(wǎng)最常見(jiàn)的分層架構(gòu),當(dāng)然真實(shí)的高并發(fā)系統(tǒng)架構(gòu)會(huì)在此基礎(chǔ)上進(jìn)一步完善。比如會(huì)做動(dòng)靜分離并引入CDN,反向代理層可以是LVS+Nginx,Web層可以是統(tǒng)一的API網(wǎng)關(guān),業(yè)務(wù)服務(wù)層可進(jìn)一步按垂直業(yè)務(wù)做微服務(wù)化,存儲(chǔ)層可以是各種異構(gòu)數(shù)據(jù)庫(kù)。

2、各層進(jìn)行水平擴(kuò)展:無(wú)狀態(tài)水平擴(kuò)容,有狀態(tài)做分片路由。業(yè)務(wù)集群通常能設(shè)計(jì)成無(wú)狀態(tài)的,而數(shù)據(jù)庫(kù)和緩存往往是有狀態(tài)的,因此需要設(shè)計(jì)分區(qū)鍵做好存儲(chǔ)分片,當(dāng)然也可以通過(guò)主從同步、讀寫分離的方案提升讀性能。

下面再結(jié)合我的個(gè)人經(jīng)驗(yàn),針對(duì)高性能、高可用、高擴(kuò)展3個(gè)方面,總結(jié)下可落地的實(shí)踐方案。

3.2.1 高性能的實(shí)踐方案

1、集群部署,通過(guò)負(fù)載均衡減輕單機(jī)壓力。

2、多級(jí)緩存,包括靜態(tài)數(shù)據(jù)使用CDN、本地緩存、分布式緩存等,以及對(duì)緩存場(chǎng)景中的熱點(diǎn)key、緩存穿透、緩存并發(fā)、數(shù)據(jù)一致性等問(wèn)題的處理。

3、分庫(kù)分表和索引優(yōu)化,以及借助搜索引擎解決復(fù)雜查詢問(wèn)題。

4、考慮NoSQL數(shù)據(jù)庫(kù)的使用,比如HBase、TiDB等,但是團(tuán)隊(duì)必須熟悉這些組件,且有較強(qiáng)的運(yùn)維能力。

5、異步化,將次要流程通過(guò)多線程、MQ、甚至延時(shí)任務(wù)進(jìn)行異步處理。

6、限流,需要先考慮業(yè)務(wù)是否允許限流(比如秒殺場(chǎng)景是允許的),包括前端限流、Nginx接入層的限流、服務(wù)端的限流。

7、對(duì)流量進(jìn)行 削峰填谷 ,通過(guò) MQ承接流量。

8、并發(fā)處理,通過(guò)多線程將串行邏輯并行化。

9、預(yù)計(jì)算,比如搶紅包場(chǎng)景,可以提前計(jì)算好紅包金額緩存起來(lái),發(fā)紅包時(shí)直接使用即可。

10、 緩存預(yù)熱 ,通過(guò)異步 任務(wù) 提前 預(yù)熱數(shù)據(jù)到本地緩存或者分布式緩存中。

11、減少IO次數(shù),比如數(shù)據(jù)庫(kù)和緩存的批量讀寫、RPC的批量接口支持、或者通過(guò)冗余數(shù)據(jù)的方式干掉RPC調(diào)用。

12、減少IO時(shí)的數(shù)據(jù)包大小,包括采用輕量級(jí)的通信協(xié)議、合適的數(shù)據(jù)結(jié)構(gòu)、去掉接口中的多余字段、減少緩存key的大小、壓縮緩存value等。

13、程序邏輯優(yōu)化,比如將大概率阻斷執(zhí)行流程的判斷邏輯前置、For循環(huán)的計(jì)算邏輯優(yōu)化,或者采用更高效的算法。

14、各種池化技術(shù)的使用和池大小的設(shè)置,包括HTTP請(qǐng)求池、線程池(考慮CPU密集型還是IO密集型設(shè)置核心參數(shù))、數(shù)據(jù)庫(kù)和Redis連接池等。

15、JVM優(yōu)化,包括新生代和老年代的大小、GC算法的選擇等,盡可能減少GC頻率和耗時(shí)。

16、鎖選擇,讀多寫少的場(chǎng)景用樂(lè)觀鎖,或者考慮通過(guò)分段鎖的方式減少鎖沖突。

上述方案無(wú)外乎從計(jì)算和 IO 兩個(gè)維度考慮所有可能的優(yōu)化點(diǎn),需要有配套的監(jiān)控系統(tǒng)實(shí)時(shí)了解當(dāng)前的性能表現(xiàn),并支撐你進(jìn)行性能瓶頸分析,然后再遵循二八原則,抓主要矛盾進(jìn)行優(yōu)化。

3.2.2 高可用的實(shí)踐方案

1、對(duì)等節(jié)點(diǎn)的故障轉(zhuǎn)移,Nginx和服務(wù)治理框架均支持一個(gè)節(jié)點(diǎn)失敗后訪問(wèn)另一個(gè)節(jié)點(diǎn)。

2、非對(duì)等節(jié)點(diǎn)的故障轉(zhuǎn)移,通過(guò)心跳檢測(cè)并實(shí)施主備切換(比如redis的哨兵模式或者集群模式、MySQL的主從切換等)。

3、接口層面的超時(shí)設(shè)置、重試策略和冪等設(shè)計(jì)。

4、降級(jí)處理:保證核心服務(wù),犧牲非核心服務(wù),必要時(shí)進(jìn)行熔斷;或者核心鏈路出問(wèn)題時(shí),有備選鏈路。

5、限流處理:對(duì)超過(guò)系統(tǒng)處理能力的請(qǐng)求直接拒絕或者返回錯(cuò)誤碼。

6、MQ場(chǎng)景的消息可靠性保證,包括producer端的重試機(jī)制、broker側(cè)的持久化、consumer端的ack機(jī)制等。

7、灰度發(fā)布,能支持按機(jī)器維度進(jìn)行小流量部署,觀察系統(tǒng)日志和業(yè)務(wù)指標(biāo),等運(yùn)行平穩(wěn)后再推全量。

8、監(jiān)控報(bào)警:全方位的監(jiān)控體系,包括最基礎(chǔ)的CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)的監(jiān)控,以及Web服務(wù)器、JVM、數(shù)據(jù)庫(kù)、各類中間件的監(jiān)控和業(yè)務(wù)指標(biāo)的監(jiān)控。

9、災(zāi)備演練:類似當(dāng)前的“混沌工程”,對(duì)系統(tǒng)進(jìn)行一些破壞性手段,觀察局部故障是否會(huì)引起可用性問(wèn)題。

高可用的方案主要從冗余、取舍、系統(tǒng)運(yùn)維3個(gè)方向考慮,同時(shí)需要有配套的值班機(jī)制和故障處理流程,當(dāng)出現(xiàn)線上問(wèn)題時(shí),可及時(shí)跟進(jìn)處理。

3.2.3 高擴(kuò)展的實(shí)踐方案

1、合理的分層架構(gòu):比如上面談到的互聯(lián)網(wǎng)最常見(jiàn)的分層架構(gòu),另外還能進(jìn)一步按照數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層對(duì)微服務(wù)做更細(xì)粒度的分層(但是需要評(píng)估性能,會(huì)存在網(wǎng)絡(luò)多一跳的情況)。

2、存儲(chǔ)層的拆分:按照業(yè)務(wù)維度做垂直拆分、按照數(shù)據(jù)特征維度進(jìn)一步做水平拆分(分庫(kù)分表)。

3、業(yè)務(wù)層的拆分:最常見(jiàn)的是按照業(yè)務(wù)維度拆(比如電商場(chǎng)景的商品服務(wù)、訂單服務(wù)等),也可以按照核心接口和非核心接口拆,還可以按照請(qǐng)求源拆(比如To C和To B,APP和H5 )。

高并發(fā)確實(shí)是一個(gè)復(fù)雜且系統(tǒng)性的問(wèn)題,由于篇幅有限,諸如分布式Trace、全鏈路壓測(cè)、柔性事務(wù)都是要考慮的技術(shù)點(diǎn)。另外,如果業(yè)務(wù)場(chǎng)景不同,高并發(fā)的落地方案也會(huì)存在差異,但是總體的設(shè)計(jì)思路和可借鑒的方案基本類似。

高并發(fā)設(shè)計(jì)同樣要秉承架構(gòu)設(shè)計(jì)的3個(gè)原則:簡(jiǎn)單、合適和演進(jìn)。"過(guò)早的優(yōu)化是萬(wàn)惡之源",不能脫離業(yè)務(wù)的實(shí)際情況,更不要過(guò)度設(shè)計(jì),合適的方案就是最完美的。

作者簡(jiǎn)介:985碩士,前亞馬遜工程師,現(xiàn)大廠技術(shù)管理者。

java web開發(fā)緩存方案,ehcache和redis哪個(gè)更好

Ehcache在java項(xiàng)目廣泛的使用。它是一個(gè)開源的、設(shè)計(jì)于提高在數(shù)據(jù)從RDBMS中取出來(lái)的高花費(fèi)、高延遲采取的一種緩存方案。正因?yàn)镋hcache具有健壯性(基于java開發(fā))、被認(rèn)證(具有apache2.0license)、充滿特色(稍后會(huì)詳細(xì)介紹),所以被用于大型復(fù)雜分布式webapplication的各個(gè)節(jié)點(diǎn)中。1.夠快Ehcache的發(fā)行有一段時(shí)長(zhǎng)了,經(jīng)過(guò)幾年的努力和不計(jì)其數(shù)的性能測(cè)試,Ehcache終被設(shè)計(jì)于large,highconcurrencysystems.2.夠簡(jiǎn)單開發(fā)者提供的接口非常簡(jiǎn)單明了,從Ehcache的搭建到運(yùn)用運(yùn)行僅僅需要的是你寶貴的幾分鐘。其實(shí)很多開發(fā)者都不知道自己用在用Ehcache,Ehcache被廣泛的運(yùn)用于其他的開源項(xiàng)目比如:hibernate3.夠袖珍關(guān)于這點(diǎn)的特性,官方給了一個(gè)很可愛(ài)的名字smallfootprint,一般Ehcache的發(fā)布版本不會(huì)到2M,V2.2.3才668KB。4.夠輕量核心程序僅僅依賴slf4j這一個(gè)包,沒(méi)有之一!5.好擴(kuò)展Ehcache提供了對(duì)大數(shù)據(jù)的內(nèi)存和硬盤的存儲(chǔ),最近版本允許多實(shí)例、保存對(duì)象高靈活性、提供LRU、LFU、FIFO淘汰算法,基礎(chǔ)屬性支持熱配置、支持的插件多6.監(jiān)聽器緩存管理器監(jiān)聽器(CacheManagerListener)和緩存監(jiān)聽器(CacheEvenListener),做一些統(tǒng)計(jì)或數(shù)據(jù)一致性廣播挺好用的如何使用?夠簡(jiǎn)單就是Ehcache的一大特色,自然用起來(lái)justsoeasy!redisredis是在memcache之后編寫的,大家經(jīng)常把這兩者做比較,如果說(shuō)它是個(gè)key-valuestore的話但是它具有豐富的數(shù)據(jù)類型,我想暫時(shí)把它叫做緩存數(shù)據(jù)流中心,就像現(xiàn)在物流中心那樣,order、package、store、classification、distribute、end?,F(xiàn)在還很流行的LAMPPHP架構(gòu)不知道和redis+mysql或者redis+mongodb的性能比較(聽群里的人說(shuō)mongodb分片不穩(wěn)定)。先說(shuō)說(shuō)reidis的特性1.支持持久化redis的本地持久化支持兩種方式:RDB和AOF。RDB在redis.conf配置文件里配置持久化觸發(fā)器,AOF指的是redis沒(méi)增加一條記錄都會(huì)保存到持久化文件中(保存的是這條記錄的生成命令),如果不是用redis做DB用的話還會(huì)不要開AOF,數(shù)據(jù)太龐大了,重啟恢復(fù)的時(shí)候是一個(gè)巨大的工程!2.豐富的數(shù)據(jù)類型redis支持String、Lists、sets、sortedsets、hashes多種數(shù)據(jù)類型,新浪微博會(huì)使用redis做nosql主要也是它具有這些類型,時(shí)間排序、職能排序、我的微博、發(fā)給我的這些功能List和sortedset的強(qiáng)大操作功能息息相關(guān)3.高性能這點(diǎn)跟memcache很想象,內(nèi)存操作的級(jí)別是毫秒級(jí)的比硬盤操作秒級(jí)操作自然高效不少,較少了磁頭尋道、數(shù)據(jù)讀取、頁(yè)面交換這些高開銷的操作!這也是NOSQL冒出來(lái)的原因吧,應(yīng)該是高性能是基于RDBMS的衍生產(chǎn)品,雖然RDBMS也具有緩存結(jié)構(gòu),但是始終在app層面不是我們想要的那么操控的。4.replicationredis提供主從復(fù)制方案,跟mysql一樣增量復(fù)制而且復(fù)制的實(shí)現(xiàn)都很相似,這個(gè)復(fù)制跟AOF有點(diǎn)類似復(fù)制的是新增記錄命令,主庫(kù)新增記錄將新增腳本發(fā)送給從庫(kù),從庫(kù)根據(jù)腳本生成記錄,這個(gè)過(guò)程非??欤涂淳W(wǎng)絡(luò)了,一般主從都是在同一個(gè)局域網(wǎng),所以可以說(shuō)redis的主從近似及時(shí)同步,同事它還支持一主多從,動(dòng)態(tài)添加從庫(kù),從庫(kù)數(shù)量沒(méi)有限制。主從庫(kù)搭建,我覺(jué)得還是采用網(wǎng)狀模式,如果使用鏈?zhǔn)剑╩aster-slave-slave-slave-slave·····)如果第一個(gè)slave出現(xiàn)宕機(jī)重啟,首先從master接收數(shù)據(jù)恢復(fù)腳本,這個(gè)是阻塞的,如果主庫(kù)數(shù)據(jù)幾TB的情況恢復(fù)過(guò)程得花上一段時(shí)間,在這個(gè)過(guò)程中其他的slave就無(wú)法和主庫(kù)同步了。5.更新快這點(diǎn)好像從我接觸到redis到目前為止已經(jīng)發(fā)了大版本就4個(gè),小版本沒(méi)算過(guò)。redis作者是個(gè)非常積極的人,無(wú)論是郵件提問(wèn)還是論壇發(fā)帖,他都能及時(shí)耐心的為你解答,維護(hù)度很高。有人維護(hù)的話,讓我們用的也省心和放心。目前作者對(duì)redis的主導(dǎo)開發(fā)方向是redis的集群方向。所以如果希望簡(jiǎn)單就用ehcache,如果開發(fā)任務(wù)比較復(fù)雜,希望得到比較多的支持什么的就redis

如何打造高性能大數(shù)據(jù)分析平臺(tái)

1.大數(shù)據(jù)是什么?

大數(shù)據(jù)是最近IT界最常用的術(shù)語(yǔ)之一。然而對(duì)大數(shù)據(jù)的定義也不盡相同,所有已知的論點(diǎn)例如結(jié)構(gòu)化的和非結(jié)構(gòu)化、大規(guī)模的數(shù)據(jù)等等都不夠完整。大數(shù)據(jù)系統(tǒng)通常被認(rèn)為具有數(shù)據(jù)的五個(gè)主要特征,通常稱為數(shù)據(jù)的5 Vs。分別是大規(guī)模,多樣性,高效性、準(zhǔn)確性和價(jià)值性。

據(jù)Gartner稱,大規(guī)??梢员欢x為“在本(地)機(jī)數(shù)據(jù)采集和處理技術(shù)能力不足以為用戶帶來(lái)商業(yè)價(jià)值。當(dāng)現(xiàn)有的技術(shù)能夠針對(duì)性的進(jìn)行改造后來(lái)處理這種規(guī)模的數(shù)據(jù)就可以說(shuō)是一個(gè)成功的大數(shù)據(jù)解決方案。

這種大規(guī)模的數(shù)據(jù)沒(méi)將不僅僅是來(lái)自于現(xiàn)有的數(shù)據(jù)源,同時(shí)也會(huì)來(lái)自于一些新興的數(shù)據(jù)源,例如常規(guī)(手持、工業(yè))設(shè)備,日志,汽車等,當(dāng)然包括結(jié)構(gòu)化的和非結(jié)構(gòu)化的數(shù)據(jù)。

據(jù)Gartner稱,多樣性可以定義如下:“高度變異的信息資產(chǎn),在生產(chǎn)和消費(fèi)時(shí)不進(jìn)行嚴(yán)格定義的包括多種形式、類型和結(jié)構(gòu)的組合。同時(shí)還包括以前的歷史數(shù)據(jù),由于技術(shù)的變革歷史數(shù)據(jù)同樣也成為多樣性數(shù)據(jù)之一 “。

高效性可以被定義為來(lái)自不同源的數(shù)據(jù)到達(dá)的速度。從各種設(shè)備,傳感器和其他有組織和無(wú)組織的數(shù)據(jù)流都在不斷進(jìn)入IT系統(tǒng)。由此,實(shí)時(shí)分析和對(duì)于該數(shù)據(jù)的解釋(展示)的能力也應(yīng)該隨之增加。

根據(jù)Gartner,高效性可以被定義如下:“高速的數(shù)據(jù)流I/O(生產(chǎn)和消費(fèi)),但主要聚焦在一個(gè)數(shù)據(jù)集內(nèi)或多個(gè)數(shù)據(jù)集之間的數(shù)據(jù)生產(chǎn)的速率可變上”。

準(zhǔn)確性,或真實(shí)性或叫做精度是數(shù)據(jù)的另一個(gè)重要組成方面。要做出正確的商業(yè)決策,當(dāng)務(wù)之急是在數(shù)據(jù)上進(jìn)行的所有分析必須是正確和準(zhǔn)確(精確)的。

大數(shù)據(jù)系統(tǒng)可以提供巨大的商業(yè)價(jià)值。像電信,金融,電子商務(wù),社交媒體等,已經(jīng)認(rèn)識(shí)到他們的數(shù)據(jù)是一個(gè)潛在的巨大的商機(jī)。他們可以預(yù)測(cè)用戶行為,并推薦相關(guān)產(chǎn)品,提供危險(xiǎn)交易預(yù)警服務(wù),等等。

與其他IT系統(tǒng)一樣,性能是大數(shù)據(jù)系統(tǒng)獲得成功的關(guān)鍵。本文的中心主旨是要說(shuō)明如何讓大數(shù)據(jù)系統(tǒng)保證其性能。

2.大數(shù)據(jù)系統(tǒng)應(yīng)包含的功能模塊

大數(shù)據(jù)系統(tǒng)應(yīng)該包含的功能模塊,首先是能夠從多種數(shù)據(jù)源獲取數(shù)據(jù)的功能,數(shù)據(jù)的預(yù)處理(例如,清洗,驗(yàn)證等),存儲(chǔ)數(shù)據(jù),數(shù)據(jù)處理、數(shù)據(jù)分析等(例如做預(yù)測(cè)分析,生成在線使用建議等等),最后呈現(xiàn)和可視化的總結(jié)、匯總結(jié)果。

下圖描述了大數(shù)據(jù)系統(tǒng)的這些高層次的組件:

2.1各種各樣的數(shù)據(jù)源

當(dāng)今的IT生態(tài)系統(tǒng),需要對(duì)各種不同種類來(lái)源的數(shù)據(jù)進(jìn)行分析。這些來(lái)源可能是從在線Web應(yīng)用程序,批量上傳或feed,流媒體直播數(shù)據(jù),來(lái)自工業(yè)、手持、家居傳感的任何東西等等。

顯然從不同數(shù)據(jù)源獲取的數(shù)據(jù)具有不同的格式、使用不同的協(xié)議。例如,在線的Web應(yīng)用程序可能會(huì)使用SOAP / XML格式通過(guò)HTTP發(fā)送數(shù)據(jù),feed可能會(huì)來(lái)自于CSV文件,其他設(shè)備則可能使用MQTT通信協(xié)議。

由于這些單獨(dú)的系統(tǒng)的性能是不在大數(shù)據(jù)系統(tǒng)的控制范圍之內(nèi),并且通常這些系統(tǒng)都是外部應(yīng)用程序,由第三方供應(yīng)商或團(tuán)隊(duì)提供并維護(hù),所以本文將不會(huì)在深入到這些系統(tǒng)的性能分析中去。

2.2數(shù)據(jù)采集

第一步,獲取數(shù)據(jù)。這個(gè)過(guò)程包括分析,驗(yàn)證,清洗,轉(zhuǎn)換,去重,然后存到適合你們公司的一個(gè)持久化設(shè)備中(硬盤、存儲(chǔ)、云等)。

在下面的章節(jié)中,本文將重點(diǎn)介紹一些關(guān)于如何獲取數(shù)據(jù)方面的非常重要的技巧。請(qǐng)注意,本文將不討論各種數(shù)據(jù)采集技術(shù)的優(yōu)缺點(diǎn)。

2.3存儲(chǔ)數(shù)據(jù)

第二步,一旦數(shù)據(jù)進(jìn)入大數(shù)據(jù)系統(tǒng),清洗,并轉(zhuǎn)化為所需格式時(shí),這些過(guò)程都將在數(shù)據(jù)存儲(chǔ)到一個(gè)合適的持久化層中進(jìn)行。

在下面的章節(jié)中,本文將介紹一些存儲(chǔ)方面的最佳實(shí)踐(包括邏輯上和物理上)。在本文結(jié)尾也會(huì)討論一部分涉及數(shù)據(jù)安全方面的問(wèn)題。

2.4數(shù)據(jù)處理和分析

第三步,在這一階段中的一部分干凈數(shù)據(jù)是去規(guī)范化的,包括對(duì)一些相關(guān)的數(shù)據(jù)集的數(shù)據(jù)進(jìn)行一些排序,在規(guī)定的時(shí)間間隔內(nèi)進(jìn)行數(shù)據(jù)結(jié)果歸集,執(zhí)行機(jī)器學(xué)習(xí)算法,預(yù)測(cè)分析等。

在下面的章節(jié)中,本文將針對(duì)大數(shù)據(jù)系統(tǒng)性能優(yōu)化介紹一些進(jìn)行數(shù)據(jù)處理和分析的最佳實(shí)踐。

2.5數(shù)據(jù)的可視化和數(shù)據(jù)展示

最后一個(gè)步驟,展示經(jīng)過(guò)各個(gè)不同分析算法處理過(guò)的數(shù)據(jù)結(jié)果。該步驟包括從預(yù)先計(jì)算匯總的結(jié)果(或其他類似數(shù)據(jù)集)中的讀取和用一種友好界面或者表格(圖表等等)的形式展示出來(lái)。這樣便于對(duì)于數(shù)據(jù)分析結(jié)果的理解。

3.數(shù)據(jù)采集中的性能技巧

數(shù)據(jù)采集是各種來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)進(jìn)入大數(shù)據(jù)系統(tǒng)的第一步。這個(gè)步驟的性能將會(huì)直接決定在一個(gè)給定的時(shí)間段內(nèi)大數(shù)據(jù)系統(tǒng)能夠處理的數(shù)據(jù)量的能力。

數(shù)據(jù)采集過(guò)程基于對(duì)該系統(tǒng)的個(gè)性化需求,但一些常用執(zhí)行的步驟是 – 解析傳入數(shù)據(jù),做必要的驗(yàn)證,數(shù)據(jù)清晰,例如數(shù)據(jù)去重,轉(zhuǎn)換格式,并將其存儲(chǔ)到某種持久層。

涉及數(shù)據(jù)采集過(guò)程的邏輯步驟示如下圖所示:

下面是一些性能方面的技巧:

●來(lái)自不同數(shù)據(jù)源的傳輸應(yīng)該是異步的??梢允褂梦募?lái)傳輸、或者使用面向消息的(MoM)中間件來(lái)實(shí)現(xiàn)。由于數(shù)據(jù)異步傳輸,所以數(shù)據(jù)采集過(guò)程的吞吐量可以大大高于大數(shù)據(jù)系統(tǒng)的處理能力。 異步數(shù)據(jù)傳輸同樣可以在大數(shù)據(jù)系統(tǒng)和不同的數(shù)據(jù)源之間進(jìn)行解耦。大數(shù)據(jù)基礎(chǔ)架構(gòu)設(shè)計(jì)使得其很容易進(jìn)行動(dòng)態(tài)伸縮,數(shù)據(jù)采集的峰值流量對(duì)于大數(shù)據(jù)系統(tǒng)來(lái)說(shuō)算是安全的。

●如果數(shù)據(jù)是直接從一些外部數(shù)據(jù)庫(kù)中抽取的,確保拉取數(shù)據(jù)是使用批量的方式。

●如果數(shù)據(jù)是從feed file解析,請(qǐng)務(wù)必使用合適的解析器。例如,如果從一個(gè)XML文件中讀取也有不同的解析器像JDOM,SAX,DOM等。類似地,對(duì)于CSV,JSON和其它這樣的格式,多個(gè)解析器和API是可供選擇。選擇能夠符合需求的性能最好的。

●優(yōu)先使用內(nèi)置的驗(yàn)證解決方案。大多數(shù)解析/驗(yàn)證工作流程的通常運(yùn)行在服務(wù)器環(huán)境(ESB /應(yīng)用服務(wù)器)中。大部分的場(chǎng)景基本上都有現(xiàn)成的標(biāo)準(zhǔn)校驗(yàn)工具。在大多數(shù)的情況下,這些標(biāo)準(zhǔn)的現(xiàn)成的工具一般來(lái)說(shuō)要比你自己開發(fā)的工具性能要好很多。

●類似地,如果數(shù)據(jù)XML格式的,優(yōu)先使用XML(XSD)用于驗(yàn)證。

●即使解析器或者校等流程使用自定義的腳本來(lái)完成,例如使用java優(yōu)先還是應(yīng)該使用內(nèi)置的函數(shù)庫(kù)或者開發(fā)框架。在大多數(shù)的情況下通常會(huì)比你開發(fā)任何自定義代碼快得多。

●盡量提前濾掉無(wú)效數(shù)據(jù),以便后續(xù)的處理流程都不用在無(wú)效數(shù)據(jù)上浪費(fèi)過(guò)多的計(jì)算能力。

●大多數(shù)系統(tǒng)處理無(wú)效數(shù)據(jù)的做法通常是存放在一個(gè)專門的表中,請(qǐng)?jiān)谙到y(tǒng)建設(shè)之初考慮這部分的數(shù)據(jù)庫(kù)存儲(chǔ)和其他額外的存儲(chǔ)開銷。

●如果來(lái)自數(shù)據(jù)源的數(shù)據(jù)需要清洗,例如去掉一些不需要的信息,盡量保持所有數(shù)據(jù)源的抽取程序版本一致,確保一次處理的是一個(gè)大批量的數(shù)據(jù),而不是一條記錄一條記錄的來(lái)處理。一般來(lái)說(shuō)數(shù)據(jù)清洗需要進(jìn)行表關(guān)聯(lián)。數(shù)據(jù)清洗中需要用到的靜態(tài)數(shù)據(jù)關(guān)聯(lián)一次,并且一次處理一個(gè)很大的批量就能夠大幅提高數(shù)據(jù)處理效率。

●數(shù)據(jù)去重非常重要這個(gè)過(guò)程決定了主鍵的是由哪些字段構(gòu)成。通常主鍵都是時(shí)間戳或者id等可以追加的類型。一般情況下,每條記錄都可能根據(jù)主鍵進(jìn)行索引來(lái)更新,所以最好能夠讓主鍵簡(jiǎn)單一些,以保證在更新的時(shí)候檢索的性能。

●來(lái)自多個(gè)源接收的數(shù)據(jù)可以是不同的格式。有時(shí),需要進(jìn)行數(shù)據(jù)移植,使接收到的數(shù)據(jù)從多種格式轉(zhuǎn)化成一種或一組標(biāo)準(zhǔn)格式。

●和解析過(guò)程一樣,我們建議使用內(nèi)置的工具,相比于你自己從零開發(fā)的工具性能會(huì)提高很多。

●數(shù)據(jù)移植的過(guò)程一般是數(shù)據(jù)處理過(guò)程中最復(fù)雜、最緊急、消耗資源最多的一步。因此,確保在這一過(guò)程中盡可能多的使用并行計(jì)算。

●一旦所有的數(shù)據(jù)采集的上述活動(dòng)完成后,轉(zhuǎn)換后的數(shù)據(jù)通常存儲(chǔ)在某些持久層,以便以后分析處理,綜述,聚合等使用。

●多種技術(shù)解決方案的存在是為了處理這種持久(RDBMS,NoSQL的分布式文件系統(tǒng),如Hadoop和等)。

●謹(jǐn)慎選擇一個(gè)能夠最大限度的滿足需求的解決方案。

4.數(shù)據(jù)存儲(chǔ)中的性能技巧

一旦所有的數(shù)據(jù)采集步驟完成后,數(shù)據(jù)將進(jìn)入持久層。

在本節(jié)中將討論一些與數(shù)據(jù)數(shù)據(jù)存儲(chǔ)性能相關(guān)的技巧包括物理存儲(chǔ)優(yōu)化和邏輯存儲(chǔ)結(jié)構(gòu)(數(shù)據(jù)模型)。這些技巧適用于所有的數(shù)據(jù)處理過(guò)程,無(wú)論是一些解析函數(shù)生的或最終輸出的數(shù)據(jù)還是預(yù)計(jì)算的匯總數(shù)據(jù)等。

●首先選擇數(shù)據(jù)范式。您對(duì)數(shù)據(jù)的建模方式對(duì)性能有直接的影響,例如像數(shù)據(jù)冗余,磁盤存儲(chǔ)容量等方面。對(duì)于一些簡(jiǎn)單的文件導(dǎo)入數(shù)據(jù)庫(kù)中的場(chǎng)景,你也許需要保持?jǐn)?shù)據(jù)原始的格式,對(duì)于另外一些場(chǎng)景,如執(zhí)行一些分析計(jì)算聚集等,你可能不需要將數(shù)據(jù)范式化。

●大多數(shù)的大數(shù)據(jù)系統(tǒng)使用NoSQL數(shù)據(jù)庫(kù)替代RDBMS處理數(shù)據(jù)。

●不同的NoSQL數(shù)據(jù)庫(kù)適用不同的場(chǎng)景,一部分在select時(shí)性能更好,有些是在插入或者更新性能更好。

●數(shù)據(jù)庫(kù)分為行存儲(chǔ)和列存儲(chǔ)。

●具體的數(shù)據(jù)庫(kù)選型依賴于你的具體需求(例如,你的應(yīng)用程序的數(shù)據(jù)庫(kù)讀寫比)。

●同樣每個(gè)數(shù)據(jù)庫(kù)都會(huì)根據(jù)不同的配置從而控制這些數(shù)據(jù)庫(kù)用于數(shù)據(jù)庫(kù)復(fù)制備份或者嚴(yán)格保持?jǐn)?shù)據(jù)一致性。

●這些設(shè)置會(huì)直接影響數(shù)據(jù)庫(kù)性能。在數(shù)據(jù)庫(kù)技術(shù)選型前一定要注意。

●壓縮率、緩沖池、超時(shí)的大小,和緩存的對(duì)于不同的NoSQL數(shù)據(jù)庫(kù)來(lái)說(shuō)配置都是不同的,同時(shí)對(duì)數(shù)據(jù)庫(kù)性能的影響也是不一樣的。

●數(shù)據(jù)Sharding和分區(qū)是這些數(shù)據(jù)庫(kù)的另一個(gè)非常重要的功能。數(shù)據(jù)Sharding的方式能夠?qū)ο到y(tǒng)的性能產(chǎn)生巨大的影響,所以在數(shù)據(jù)Sharding和分區(qū)時(shí)請(qǐng)謹(jǐn)慎選擇。

●并非所有的NoSQL數(shù)據(jù)庫(kù)都內(nèi)置了支持連接,排序,匯總,過(guò)濾器,索引等。

●如果有需要還是建議使用內(nèi)置的類似功能,因?yàn)樽约洪_發(fā)的還是不靈。

●NoSQLs內(nèi)置了壓縮、編解碼器和數(shù)據(jù)移植工具。如果這些可以滿足您的部分需求,那么優(yōu)先選擇使用這些內(nèi)置的功能。這些工具可以執(zhí)行各種各樣的任務(wù),如格式轉(zhuǎn)換、壓縮數(shù)據(jù)等,使用內(nèi)置的工具不僅能夠帶來(lái)更好的性能還可以降低網(wǎng)絡(luò)的使用率。

●許多NoSQL數(shù)據(jù)庫(kù)支持多種類型的文件系統(tǒng)。其中包括本地文件系統(tǒng),分布式文件系統(tǒng),甚至基于云的存儲(chǔ)解決方案。

●如果在交互式需求上有嚴(yán)格的要求,否則還是盡量嘗試使用NoSQL本地(內(nèi)置)文件系統(tǒng)(例如HBase 使用HDFS)。

●這是因?yàn)椋绻褂靡恍┩獠课募到y(tǒng)/格式,則需要對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的編解碼/數(shù)據(jù)移植。它將在整個(gè)讀/寫過(guò)程中增加原本不必要的冗余處理。

●大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)模型一般來(lái)說(shuō)需要根據(jù)需求用例來(lái)綜合設(shè)計(jì)。與此形成鮮明對(duì)比的是RDMBS數(shù)據(jù)建模技術(shù)基本都是設(shè)計(jì)成為一個(gè)通用的模型,用外鍵和表之間的關(guān)系用來(lái)描述數(shù)據(jù)實(shí)體與現(xiàn)實(shí)世界之間的交互。

●在硬件一級(jí),本地RAID模式也許不太適用。請(qǐng)考慮使用SAN存儲(chǔ)。

5.數(shù)據(jù)處理分析中的性能技巧

數(shù)據(jù)處理和分析是一個(gè)大數(shù)據(jù)系統(tǒng)的核心。像聚合,預(yù)測(cè),聚集,和其它這樣的邏輯操作都需要在這一步完成。

本節(jié)討論一些數(shù)據(jù)處理性能方面的技巧。需要注意的是大數(shù)據(jù)系統(tǒng)架構(gòu)有兩個(gè)組成部分,實(shí)時(shí)數(shù)據(jù)流處理和批量數(shù)據(jù)處理。本節(jié)涵蓋數(shù)據(jù)處理的各個(gè)方面。

●在細(xì)節(jié)評(píng)估和數(shù)據(jù)格式和模型后選擇適當(dāng)?shù)臄?shù)據(jù)處理框架。

●其中一些框架適用于批量數(shù)據(jù)處理,而另外一些適用于實(shí)時(shí)數(shù)據(jù)處理。

●同樣一些框架使用內(nèi)存模式,另外一些是基于磁盤io處理模式。

●有些框架擅長(zhǎng)高度并行計(jì)算,這樣能夠大大提高數(shù)據(jù)效率。

●基于內(nèi)存的框架性能明顯優(yōu)于基于磁盤io的框架,但是同時(shí)成本也可想而知。

●概括地說(shuō),當(dāng)務(wù)之急是選擇一個(gè)能夠滿足需求的框架。否則就有可能既無(wú)法滿足功能需求也無(wú)法滿足非功能需求,當(dāng)然也包括性能需求。

●一些這些框架將數(shù)據(jù)劃分成較小的塊。這些小數(shù)據(jù)塊由各個(gè)作業(yè)獨(dú)立處理。協(xié)調(diào)器管理所有這些獨(dú)立的子作業(yè)

●在數(shù)據(jù)分塊是需要當(dāng)心。

●該數(shù)據(jù)快越小,就會(huì)產(chǎn)生越多的作業(yè),這樣就會(huì)增加系統(tǒng)初始化作業(yè)和清理作業(yè)的負(fù)擔(dān)。

●如果數(shù)據(jù)快太大,數(shù)據(jù)傳輸可能需要很長(zhǎng)時(shí)間才能完成。這也可能導(dǎo)致資源利用不均衡,長(zhǎng)時(shí)間在一臺(tái)服務(wù)器上運(yùn)行一個(gè)大作業(yè),而其他服務(wù)器就會(huì)等待。

●不要忘了查看一個(gè)任務(wù)的作業(yè)總數(shù)。在必要時(shí)調(diào)整這個(gè)參數(shù)。

●最好實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)塊的傳輸。在本機(jī)機(jī)型io的效率會(huì)更高,這么做也會(huì)帶來(lái)一個(gè)副作用就是需要將數(shù)據(jù)塊的冗余參數(shù)提高(一般hadoop默認(rèn)是3份)這樣又會(huì)反作用使得系統(tǒng)性能下降。

●此外,實(shí)時(shí)數(shù)據(jù)流需要與批量數(shù)據(jù)處理的結(jié)果進(jìn)行合并。設(shè)計(jì)系統(tǒng)時(shí)盡量減少對(duì)其他作業(yè)的影響。

●大多數(shù)情況下同一數(shù)據(jù)集需要經(jīng)過(guò)多次計(jì)算。這種情況可能是由于數(shù)據(jù)抓取等初始步驟就有報(bào)錯(cuò),或者某些業(yè)務(wù)流程發(fā)生變化,值得一提的是舊數(shù)據(jù)也是如此。設(shè)計(jì)系統(tǒng)時(shí)需要注意這個(gè)地方的容錯(cuò)。

●這意味著你可能需要存儲(chǔ)原始數(shù)據(jù)的時(shí)間較長(zhǎng),因此需要更多的存儲(chǔ)。

●數(shù)據(jù)結(jié)果輸出后應(yīng)該保存成用戶期望看到的格式。例如,如果最終的結(jié)果是用戶要求按照每周的時(shí)間序列匯總輸出,那么你就要將結(jié)果以周為單位進(jìn)行匯總保存。

●為了達(dá)到這個(gè)目標(biāo),大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)庫(kù)建模就要在滿足用例的前提下進(jìn)行。例如,大數(shù)據(jù)系統(tǒng)經(jīng)常會(huì)輸出一些結(jié)構(gòu)化的數(shù)據(jù)表,這樣在展示輸出上就有很大的優(yōu)勢(shì)。

●更常見(jiàn)的是,這可能會(huì)這將會(huì)讓用戶感覺(jué)到性能問(wèn)題。例如用戶只需要上周的數(shù)據(jù)匯總結(jié)果,如果在數(shù)據(jù)規(guī)模較大的時(shí)候按照每周來(lái)匯總數(shù)據(jù),這樣就會(huì)大大降低數(shù)據(jù)處理能力。

●一些框架提供了大數(shù)據(jù)查詢懶評(píng)價(jià)功能。在數(shù)據(jù)沒(méi)有在其他地方被使用時(shí)效果不錯(cuò)。

●實(shí)時(shí)監(jiān)控系統(tǒng)的性能,這樣能夠幫助你預(yù)估作業(yè)的完成時(shí)間。

6.數(shù)據(jù)可視化和展示中的性能技巧

精心設(shè)計(jì)的高性能大數(shù)據(jù)系統(tǒng)通過(guò)對(duì)數(shù)據(jù)的深入分析,能夠提供有價(jià)值戰(zhàn)略指導(dǎo)。這就是可視化的用武之地。良好的可視化幫助用戶獲取數(shù)據(jù)的多維度透視視圖。

需要注意的是傳統(tǒng)的BI和報(bào)告工具,或用于構(gòu)建自定義報(bào)表系統(tǒng)無(wú)法大規(guī)模擴(kuò)展?jié)M足大數(shù)據(jù)系統(tǒng)的可視化需求。同時(shí),許多COTS可視化工具現(xiàn)已上市。

本文將不會(huì)對(duì)這些個(gè)別工具如何進(jìn)行調(diào)節(jié),而是聚焦在一些通用的技術(shù),幫助您能打造可視化層。

●確??梢暬瘜语@示的數(shù)據(jù)都是從最后的匯總輸出表中取得的數(shù)據(jù)。這些總結(jié)表可以根據(jù)時(shí)間短進(jìn)行匯總,建議使用分類或者用例進(jìn)行匯總。這么做可以避免直接從可視化層讀取整個(gè)原始數(shù)據(jù)。

●這不僅最大限度地減少數(shù)據(jù)傳輸,而且當(dāng)用戶在線查看在報(bào)告時(shí)還有助于避免性能卡頓問(wèn)題。

●重分利用大化可視化工具的緩存。緩存可以對(duì)可視化層的整體性能產(chǎn)生非常不錯(cuò)的影響。

●物化視圖是可以提高性能的另一個(gè)重要的技術(shù)。

●大部分可視化工具允許通過(guò)增加線程數(shù)來(lái)提高請(qǐng)求響應(yīng)的速度。如果資源足夠、訪問(wèn)量較大那么這是提高系統(tǒng)性能的好辦法。

●盡量提前將數(shù)據(jù)進(jìn)行預(yù)處理,如果一些數(shù)據(jù)必須在運(yùn)行時(shí)計(jì)算請(qǐng)將運(yùn)行時(shí)計(jì)算簡(jiǎn)化到最小。

●可視化工具可以按照各種各樣的展示方法對(duì)應(yīng)不同的讀取策略。其中一些是離線模式、提取模式或者在線連接模式。每種服務(wù)模式都是針對(duì)不同場(chǎng)景設(shè)計(jì)的。

●同樣,一些工具可以進(jìn)行增量數(shù)據(jù)同步。這最大限度地減少了數(shù)據(jù)傳輸,并將整個(gè)可視化過(guò)程固化下來(lái)。

●保持像圖形,圖表等使用最小的尺寸。

●大多數(shù)可視化框架和工具的使用可縮放矢量圖形(SVG)。使用SVG復(fù)雜的布局可能會(huì)產(chǎn)生嚴(yán)重的性能影響。

7.數(shù)據(jù)安全以及對(duì)于性能的影響

像任何IT系統(tǒng)一樣安全性要求也對(duì)大數(shù)據(jù)系統(tǒng)的性能有很大的影響。在本節(jié)中,我們討論一下安全對(duì)大數(shù)據(jù)平臺(tái)性能的影響。

– 首先確保所有的數(shù)據(jù)源都是經(jīng)過(guò)認(rèn)證的。即使所有的數(shù)據(jù)源都是安全的,并且沒(méi)有針對(duì)安全方面的需求,那么你可以靈活設(shè)計(jì)一個(gè)安全模塊來(lái)配置實(shí)現(xiàn)。

– 數(shù)據(jù)進(jìn)過(guò)一次認(rèn)證,那么就不要進(jìn)行二次認(rèn)證。如果實(shí)在需要進(jìn)行二次認(rèn)證,那么使用一些類似于token的技術(shù)保存下來(lái)以便后續(xù)繼續(xù)使用。這將節(jié)省數(shù)據(jù)一遍遍認(rèn)證的開銷。

– 您可能需要支持其他的認(rèn)證方式,例如基于PKI解決方案或Kerberos。每一個(gè)都有不同的性能指標(biāo),在最終方案確定前需要將其考慮進(jìn)去。

– 通常情況下數(shù)據(jù)壓縮后進(jìn)入大數(shù)據(jù)處理系統(tǒng)。這么做好處非常明顯不細(xì)說(shuō)。

– 針對(duì)不同算法的效率、對(duì)cpu的使用量你需要進(jìn)行比較來(lái)選出一個(gè)傳輸量、cpu使用量等方面均衡的壓縮算法。

– 同樣,評(píng)估加密邏輯和算法,然后再選擇。

– 明智的做法是敏感信息始終進(jìn)行限制。

– 在審計(jì)跟蹤表或登錄時(shí)您可能需要維護(hù)記錄或類似的訪問(wèn),更新等不同的活動(dòng)記錄。這可能需要根據(jù)不同的監(jiān)管策略和用戶需求個(gè)性化的進(jìn)行設(shè)計(jì)和修改。

– 注意,這種需求不僅增加了數(shù)據(jù)處理的復(fù)雜度,但會(huì)增加存儲(chǔ)成本。

– 盡量使用下層提供的安全技術(shù),例如操作系統(tǒng)、數(shù)據(jù)庫(kù)等。這些安全解決方案會(huì)比你自己設(shè)計(jì)開發(fā)性能要好很多。

8.總結(jié)

本文介紹了各種性能方面的技巧,這些技術(shù)性的知道可以作為打造大數(shù)據(jù)分析平臺(tái)的一般準(zhǔn)則。大數(shù)據(jù)分析平臺(tái)非常復(fù)雜,為了滿足這種類型系統(tǒng)的性能需求,需要我們從開始建設(shè)的時(shí)候進(jìn)行考量。

本文介紹的技術(shù)準(zhǔn)則可以用在大數(shù)據(jù)平臺(tái)建設(shè)的各個(gè)不同階段,包括安全如何影響大數(shù)據(jù)分析平臺(tái)的性能。

nosql是什么

NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,而非關(guān)系型的數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來(lái)的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。

雖然NoSQL流行語(yǔ)火起來(lái)才短短一年的時(shí)間,但是不可否認(rèn),現(xiàn)在已經(jīng)開始了第二代運(yùn)動(dòng)。盡管早期的堆棧代碼只能算是一種實(shí)驗(yàn),然而現(xiàn)在的系統(tǒng)已經(jīng)更加的成熟、穩(wěn)定。不過(guò)現(xiàn)在也面臨著一個(gè)嚴(yán)酷的事實(shí):技術(shù)越來(lái)越成熟——以至于原來(lái)很好的NoSQL數(shù)據(jù)存儲(chǔ)不得不進(jìn)行重寫,也有少數(shù)人認(rèn)為這就是所謂的2.0版本。這里列出一些比較知名的工具,可以為大數(shù)據(jù)建立快速、可擴(kuò)展的存儲(chǔ)庫(kù)。

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。

對(duì)于NoSQL并沒(méi)有一個(gè)明確的范圍和定義,但是他們都普遍存在下面一些共同特征:

不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同的屬性和格式。當(dāng)插入數(shù)據(jù)時(shí),并不需要預(yù)先定義它們的模式。

無(wú)共享架構(gòu):相對(duì)于將所有數(shù)據(jù)存儲(chǔ)的存儲(chǔ)區(qū)域網(wǎng)絡(luò)中的全共享架構(gòu)。NoSQL往往將數(shù)據(jù)劃分后存儲(chǔ)在各個(gè)本地服務(wù)器上。因?yàn)閺谋镜卮疟P讀取數(shù)據(jù)的性能往往好于通過(guò)網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能,從而提高了系統(tǒng)的性能。

彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時(shí)候,動(dòng)態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),數(shù)據(jù)可以自動(dòng)遷移。

分區(qū):相對(duì)于將數(shù)據(jù)存放于同一個(gè)節(jié)點(diǎn),NoSQL數(shù)據(jù)庫(kù)需要將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個(gè)節(jié)點(diǎn)上面。并且通常分區(qū)的同時(shí)還要做復(fù)制。這樣既提高了并行性能,又能保證沒(méi)有單點(diǎn)失效的問(wèn)題。

異步復(fù)制:和RAID存儲(chǔ)系統(tǒng)不同的是,NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫入一個(gè)節(jié)點(diǎn),而不會(huì)被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不總是能保證一致性,這樣的方式在出現(xiàn)故障的時(shí)候,可能會(huì)丟失少量的數(shù)據(jù)。

BASE:相對(duì)于事務(wù)嚴(yán)格的ACID特性,NoSQL數(shù)據(jù)庫(kù)保證的是BASE特性。BASE是最終一致性和軟事務(wù)。

NoSQL數(shù)據(jù)庫(kù)并沒(méi)有一個(gè)統(tǒng)一的架構(gòu),兩種NoSQL數(shù)據(jù)庫(kù)之間的不同,甚至遠(yuǎn)遠(yuǎn)超過(guò)兩種關(guān)系型數(shù)據(jù)庫(kù)的不同??梢哉f(shuō),NoSQL各有所長(zhǎng),成功的NoSQL必然特別適用于某些場(chǎng)合或者某些應(yīng)用,在這些場(chǎng)合中會(huì)遠(yuǎn)遠(yuǎn)勝過(guò)關(guān)系型數(shù)據(jù)庫(kù)和其他的NoSQL。

為什么大部分NoSQL不提供分布式事務(wù)

像MongoDB, Cassandra, HBase, DynamoDB, 和

Riak這些NoSQL缺乏傳統(tǒng)的原子事務(wù)機(jī)制,所謂原子事務(wù)機(jī)制是可以保證一系列寫操作要么全部完成,要么全部不會(huì)完成,不會(huì)發(fā)生只完成一系列中一兩個(gè)

寫操作;因?yàn)閿?shù)據(jù)庫(kù)不提供這種事務(wù)機(jī)制支持,開發(fā)者需要自己編寫代碼來(lái)確保一系列寫操作的事務(wù)機(jī)制,比較復(fù)雜和測(cè)試。

這些NoSQL數(shù)據(jù)庫(kù)不提供事務(wù)機(jī)制原因在于其分布式特點(diǎn),一系列寫操作中訪問(wèn)的數(shù)據(jù)可能位于不同的分區(qū)服務(wù)器,這樣的事務(wù)就變成分布式事務(wù),在分

布式事務(wù)中實(shí)現(xiàn)原子性需要彼此協(xié)調(diào),而協(xié)調(diào)是耗費(fèi)時(shí)間的,每臺(tái)機(jī)器在一個(gè)大事務(wù)過(guò)程中必須依次確認(rèn),這就需要一種協(xié)議確保一個(gè)事務(wù)中沒(méi)有任何一臺(tái)機(jī)器寫操

作失敗。

這種協(xié)調(diào)是昂貴的,會(huì)增加延遲時(shí)間,關(guān)鍵問(wèn)題是,當(dāng)協(xié)調(diào)沒(méi)有完成時(shí),其他操作是不能讀取事務(wù)中寫操作結(jié)果的,這是因?yàn)槭聞?wù)的all-or-

nothing原理導(dǎo)致,萬(wàn)一協(xié)調(diào)過(guò)程發(fā)現(xiàn)某個(gè)寫操作不能完成,那么需要將其他寫操作成功的進(jìn)行回滾。針對(duì)分布式事務(wù)的分布式協(xié)調(diào)對(duì)整體數(shù)據(jù)庫(kù)性能有嚴(yán)重

影響,不只是吞吐量還包括延遲時(shí)間,這樣大部分NoSQL數(shù)據(jù)庫(kù)因?yàn)樾阅軉?wèn)題就選擇不提供分布式事務(wù)。

MongoDB, Riak, HBase, 和 Cassandra提供基于單一鍵的事務(wù),這是因?yàn)樗行畔⒍己鸵粋€(gè)鍵key有關(guān),這個(gè)鍵是存儲(chǔ)在單個(gè)服務(wù)器上,這樣基于單鍵的事務(wù)不會(huì)帶來(lái)復(fù)雜的分布式協(xié)調(diào)。

那么看來(lái)擴(kuò)展性性能和分布式事務(wù)是一對(duì)矛盾,總要有取舍?實(shí)際上是不完全是,現(xiàn)在完全有可能提供高擴(kuò)展的性能同時(shí)提供分布式原子事務(wù)。

FIT是這樣一個(gè)在分布式系統(tǒng)提供原子事務(wù)的策略,在fairness公平性, isolation隔離性, 和throughput吞吐量(簡(jiǎn)稱FIT)可以權(quán)衡。

一個(gè)支持分布式事務(wù)的可伸縮分布式系統(tǒng)能夠完成這三個(gè)屬性中兩個(gè),公平是事務(wù)之間不會(huì)相互影響造成延遲;隔離性提供一種幻覺(jué)好像整個(gè)數(shù)據(jù)庫(kù)只有它自

己一個(gè)事務(wù),隔離性保證當(dāng)任何同時(shí)發(fā)生的事務(wù)發(fā)生沖突時(shí),能夠保證彼此能看到彼此的寫操作結(jié)果,因此減輕了程序員為避免事務(wù)讀寫沖突的強(qiáng)邏輯推理要求;吞

吐量是指每單元時(shí)間數(shù)據(jù)庫(kù)能夠并發(fā)處理多少事務(wù)。

FIT是如下進(jìn)行權(quán)衡:

保證公平性fairness 和隔離性isolation, 但是犧牲吞吐量

保證公平性fairness和吞吐量, 犧牲隔離性isolation

保證隔離性isolation和吞吐量throughput, 但是犧牲公平性fairness.

犧牲公平性:放棄公平性,數(shù)據(jù)庫(kù)能有更多機(jī)會(huì)降低分布式事務(wù)的成本,主要成本是分布式協(xié)調(diào)帶來(lái)的,也就是說(shuō),不需要在每個(gè)事務(wù)過(guò)程內(nèi)對(duì)每個(gè)機(jī)器都依

次確認(rèn)事務(wù)完成,這樣排隊(duì)式的確認(rèn)commit事務(wù)是很浪費(fèi)時(shí)間的,放棄公平性,意味著可以在事務(wù)外面進(jìn)行協(xié)調(diào),這樣就只是增加了協(xié)調(diào)時(shí)間,不會(huì)增加互相

沖突事務(wù)因?yàn)楸舜藳_突而不能運(yùn)行所耽擱的時(shí)間,當(dāng)系統(tǒng)不需要公平性時(shí),需要根據(jù)事務(wù)的優(yōu)先級(jí)或延遲等標(biāo)準(zhǔn)進(jìn)行指定先后執(zhí)行順序,這樣就能夠獲得很好的吞吐

量。

G-Store是一種放棄公平性的 Isolation-Throughput

的分布式key-value存儲(chǔ),支持多鍵事務(wù)(multi-key transactions),MongoDB 和

HBase在鍵key在同樣分區(qū)上也支持多鍵事務(wù),但是不支持跨分區(qū)的事務(wù)。

總之:傳統(tǒng)分布式事務(wù)性能不佳的原因是確保原子性(分布式協(xié)調(diào))和隔離性同時(shí)重疊,創(chuàng)建一個(gè)高吞吐量分布式事務(wù)的關(guān)鍵是分離這兩種關(guān)注,這種分離原

子性和隔離性的視角將導(dǎo)致兩種類型的系統(tǒng),第一種選擇是弱隔離性能讓沖突事務(wù)并行執(zhí)行和確認(rèn)提交;第二個(gè)選擇重新排序原子性和隔離性機(jī)制保證它們不會(huì)某個(gè)

時(shí)間重疊,這是一種放棄公平的事務(wù)執(zhí)行,所謂放棄公平就是不再同時(shí)照顧原子性和隔離性了,有所傾斜,放棄高標(biāo)準(zhǔn)道德要求就會(huì)帶來(lái)高自由高效率。


新聞名稱:nosql時(shí)間排序,mysql時(shí)間排序
路徑分享:http://weahome.cn/article/hohpep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部