一、高性能計(jì)算

公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出荔城免費(fèi)做網(wǎng)站回饋大家。
Hadoop:Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。
Spark:Spark是UC Berkeley AMP lab所開(kāi)源的類Hadoop MapReduce的通用的并行,Spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫(xiě)HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。
CUDA:CUDA(Compute Unified Device Architecture),是顯卡廠商N(yùn)VIDIA推出的運(yùn)算平臺(tái)。 CUDA是一種由NVIDIA推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問(wèn)題。 它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計(jì)算引擎。 開(kāi)發(fā)人員現(xiàn)在可以使用C語(yǔ)言來(lái)為CUDA架構(gòu)編寫(xiě)程序,C語(yǔ)言是應(yīng)用最廣泛的一種高級(jí)編程語(yǔ)言。所編寫(xiě)出的程序于是就可以在支持CUDA的處理器上以超高性能運(yùn)行。CUDA3.0已經(jīng)開(kāi)始支持C++和FORTRAN。
二、Hadoop生態(tài)系統(tǒng)
(1)海量數(shù)據(jù)怎么存,當(dāng)然是用分布式文件系統(tǒng)——HDFS。
(2)數(shù)據(jù)怎么用呢,分析、處理MapReduce框架,讓你通過(guò)編寫(xiě)代碼來(lái)實(shí)現(xiàn)對(duì)大數(shù)據(jù)的分析工作。
(3)非結(jié)構(gòu)化數(shù)據(jù)(日志)收集處理——Fuse、WebDAV、Chukwa、Flume和Scribe。
(4)數(shù)據(jù)導(dǎo)入HDFS中,RDBMS也可以加入HDFS的狂歡了——HIHO、Sqoop。
(5)MaoReduce太麻煩,用熟悉的方式操作Hadoop里的數(shù)據(jù)——Pig、Hive、Jaql。
(6)讓你的數(shù)據(jù)可見(jiàn)——Drilldown、Intellicus。
(7)用高級(jí)語(yǔ)言管理你的任務(wù)流——Oozie、Cascading。
(8)Hadoop自己的監(jiān)控管理工具——Hue、Karmasphere、Eclipse Plugin、Cacti、Ganglia。
(9)數(shù)據(jù)序列化處理與任務(wù)調(diào)度——Avro、ZooKeeper。
(10)更多構(gòu)建在Hadoop上層的服務(wù)——Mahout、Elastic Map Reduce。
(11)OLTP存儲(chǔ)系統(tǒng)——HBase。
(12)基于Hadoop的實(shí)時(shí)分析——Impala。
既然是分布式系統(tǒng),系統(tǒng)間通信的技術(shù)就不可避免的要掌握。
首先,我們必須掌握一些基本知識(shí),例如網(wǎng)絡(luò)通信協(xié)議(例如TCP / UDP等),網(wǎng)絡(luò)IO(Blocking-IO,NonBlocking-IO,Asyn-IO),網(wǎng)卡(多隊(duì)列等)。? ?了解有關(guān)連接重用,序列化/反序列化,RPC,負(fù)載平衡等的信息。
在學(xué)習(xí)了這些基本知識(shí)之后,您基本上可以在分布式系統(tǒng)中編寫(xiě)一個(gè)簡(jiǎn)單的通信模塊,但這實(shí)際上還遠(yuǎn)遠(yuǎn)不夠。 現(xiàn)在,您已經(jīng)進(jìn)入了分布式字段,您已經(jīng)對(duì)規(guī)模有很多要求。 這意味著需要一種通信程序,該程序可以支持大量連接,高并發(fā)性和低資源消耗。
大量的連接通常會(huì)有兩種方式:
大量client連一個(gè)server
當(dāng)前在NonBlocking-IO非常成熟的情況下,支持大量客戶端的服務(wù)器并不難編寫(xiě),但是在大規(guī)模且通常是長(zhǎng)連接的情況下,有一點(diǎn)需要特別注意 ,即服務(wù)器掛起時(shí)不可能所有客戶端都在某個(gè)時(shí)間點(diǎn)啟動(dòng)重新連接。 那基本上是一場(chǎng)災(zāi)難。 我見(jiàn)過(guò)一些沒(méi)有經(jīng)驗(yàn)的類似案例。 客戶端規(guī)模擴(kuò)大后,服務(wù)器基本上會(huì)在重新啟動(dòng)后立即刷新。 大量傳入連接中斷(當(dāng)然,服務(wù)器的積壓隊(duì)列首先應(yīng)設(shè)置為稍大一些)。 可以使用的通常方法是在客戶端重新連接之前睡眠一段隨機(jī)的時(shí)間。 另外,重連間隔采用避讓算法。
一個(gè)client連大量的server
有些場(chǎng)景也會(huì)出現(xiàn)需要連大量server的現(xiàn)象,在這種情況下,同樣要注意的也是不要并發(fā)同時(shí)去建所有的連接,而是在能力范圍內(nèi)分批去建。
除了建連接外,另外還要注意的地方是并發(fā)發(fā)送請(qǐng)求也同樣,一定要做好限流,否則很容易會(huì)因?yàn)橐恍c(diǎn)慢導(dǎo)致內(nèi)存爆掉。
這些問(wèn)題在技術(shù)風(fēng)險(xiǎn)上得考慮進(jìn)去,并在設(shè)計(jì)和代碼實(shí)現(xiàn)上體現(xiàn),否則一旦隨著規(guī)模上去了,問(wèn)題一時(shí)半會(huì)還真不太好解。
高并發(fā)這個(gè)點(diǎn)需要掌握CAS、常見(jiàn)的lock-free算法、讀寫(xiě)鎖、線程相關(guān)知識(shí)(例如線程交互、線程池)等,通信層面的高并發(fā)在NonBlocking-IO的情況下,最重要的是要注意在整體設(shè)計(jì)和代碼實(shí)現(xiàn)上盡量減少對(duì)io線程池的時(shí)間占用。
低資源消耗這點(diǎn)的話NonBlocking-IO本身基本已經(jīng)做到。
伸縮性
分布式系統(tǒng)基本上意味著規(guī)模不小。 對(duì)于此類系統(tǒng),在設(shè)計(jì)時(shí)必須考慮可伸縮性。 在體系結(jié)構(gòu)圖上繪制的任何點(diǎn),如果請(qǐng)求量或數(shù)據(jù)量繼續(xù)增加,該怎么辦? 通過(guò)添加機(jī)器來(lái)解決。 當(dāng)然,此過(guò)程不需要考慮無(wú)限的情況。 如果您有經(jīng)驗(yàn)的建筑師,從相對(duì)較小的規(guī)模到非常大型的范圍,那么優(yōu)勢(shì)顯然并不小,而且它們也將越來(lái)越稀缺。? 。
橫向可擴(kuò)展性(Scale Out)是指通過(guò)增加服務(wù)器數(shù)量來(lái)提高群集的整體性能。 垂直可伸縮性(Scale Up)是指提高每臺(tái)服務(wù)器的性能以提高集群的整體性能。 縱向可擴(kuò)展性的上限非常明顯,而分布式系統(tǒng)則強(qiáng)調(diào)水平可伸縮性。
分布式系統(tǒng)應(yīng)用服務(wù)最好做成無(wú)狀態(tài)的
應(yīng)用服務(wù)的狀態(tài)是指運(yùn)行時(shí)程序因?yàn)樘幚矸?wù)請(qǐng)求而存在內(nèi)存的數(shù)據(jù)。分布式應(yīng)用服務(wù)最好是設(shè)計(jì)成無(wú)狀態(tài)。因?yàn)槿绻麘?yīng)用程序是有狀態(tài)的,那么一旦服務(wù)器宕機(jī)就會(huì)使得應(yīng)用服務(wù)程序受影響而掛掉,那存在內(nèi)存的數(shù)據(jù)也就丟失了,這顯然不是高可靠的服務(wù)。把應(yīng)用服務(wù)設(shè)計(jì)成無(wú)狀態(tài)的,讓程序把需要保存的數(shù)據(jù)都保存在專門(mén)的存儲(chǔ)上(eg. 數(shù)據(jù)庫(kù)),這樣應(yīng)用服務(wù)程序可以任意重啟而不丟失數(shù)據(jù),方便分布式系統(tǒng)在服務(wù)器宕機(jī)后恢復(fù)應(yīng)用服務(wù)。
伸縮性的問(wèn)題圍繞著以下兩種場(chǎng)景在解決:
無(wú)狀態(tài)場(chǎng)景
對(duì)于無(wú)狀態(tài)場(chǎng)景,要實(shí)現(xiàn)隨量增長(zhǎng)而加機(jī)器支撐會(huì)比較簡(jiǎn)單,這種情況下只用解決節(jié)點(diǎn)發(fā)現(xiàn)的問(wèn)題,通常只要基于負(fù)載均衡就可以搞定,硬件或軟件方式都有;
無(wú)狀態(tài)場(chǎng)景通常會(huì)把很多狀態(tài)放在db,當(dāng)量到一定階段后會(huì)需要引入服務(wù)化,去緩解對(duì)db連接數(shù)太多的情況。
有狀態(tài)場(chǎng)景
所謂狀態(tài)其實(shí)就是數(shù)據(jù),通常采用Sharding來(lái)實(shí)現(xiàn)伸縮性,Sharding有多種的實(shí)現(xiàn)方式,常見(jiàn)的有這么一些:
2.1 規(guī)則Sharding
基于一定規(guī)則把狀態(tài)數(shù)據(jù)進(jìn)行Sharding,例如分庫(kù)分表很多時(shí)候采用的就是這樣的,這種方式支持了伸縮性,但通常也帶來(lái)了很復(fù)雜的管理、狀態(tài)數(shù)據(jù)搬遷,甚至業(yè)務(wù)功能很難實(shí)現(xiàn)的問(wèn)題,例如全局join,跨表事務(wù)等。
2.2 一致性Hash
一致性Hash方案會(huì)使得加機(jī)器代價(jià)更低一些,另外就是壓力可以更為均衡,例如分布式cache經(jīng)常采用,和規(guī)則Sharding帶來(lái)的問(wèn)題基本一樣。
2.3 Auto Sharding
Auto Sharding的好處是基本上不用管數(shù)據(jù)搬遷,而且隨著量上漲加機(jī)器就OK,但通常Auto Sharding的情況下對(duì)如何使用會(huì)有比較高的要求,而這個(gè)通常也就會(huì)造成一些限制,這種方案例如HBase。
2.4 Copy
Copy這種常見(jiàn)于讀遠(yuǎn)多于寫(xiě)的情況,實(shí)現(xiàn)起來(lái)又會(huì)有最終一致的方案和全局一致的方案,最終一致的多數(shù)可通過(guò)消息機(jī)制等,全局一致的例如zookeeper/etcd之類的,既要全局一致又要做到很高的寫(xiě)支撐能力就很難實(shí)現(xiàn)了。
即使發(fā)展到今天,Sharding方式下的伸縮性問(wèn)題仍然是很大的挑戰(zhàn),非常不好做。
上面所寫(xiě)的基本都還只是解決的方向,到細(xì)節(jié)點(diǎn)基本就很容易判斷是一個(gè)解決過(guò)多大規(guī)模場(chǎng)景問(wèn)題的架構(gòu)師,:)
穩(wěn)定性
作為分布式系統(tǒng),必須要考慮清楚整個(gè)系統(tǒng)中任何一個(gè)點(diǎn)掛掉應(yīng)該怎么處理(到了一定機(jī)器規(guī)模,每天掛掉一些機(jī)器很正常),同樣主要還是分成了無(wú)狀態(tài)和有狀態(tài):
無(wú)狀態(tài)場(chǎng)景
對(duì)于無(wú)狀態(tài)場(chǎng)景,通常好辦,只用節(jié)點(diǎn)發(fā)現(xiàn)的機(jī)制上具備心跳等檢測(cè)機(jī)制就OK,經(jīng)驗(yàn)上來(lái)說(shuō)無(wú)非就是純粹靠4層的檢測(cè)對(duì)業(yè)務(wù)不太夠,通常得做成7層的,當(dāng)然,做成7層的就得處理好規(guī)模大了后的問(wèn)題。
有狀態(tài)場(chǎng)景
對(duì)于有狀態(tài)場(chǎng)景,就比較麻煩了,對(duì)數(shù)據(jù)一致性要求不高的還OK,主備類型的方案基本也可以用,當(dāng)然,主備方案要做的很好也非常不容易,有各種各樣的方案,對(duì)于主備方案又覺(jué)得不太爽的情況下,例如HBase這樣的,就意味著掛掉一臺(tái),另外一臺(tái)接管的話是需要一定時(shí)間的,這個(gè)對(duì)可用性還是有一定影響的;
全局一致類型的場(chǎng)景中,如果一臺(tái)掛了,就通常意味著得有選舉機(jī)制來(lái)決定其他機(jī)器哪臺(tái)成為主,常見(jiàn)的例如基于paxos的實(shí)現(xiàn)。
可維護(hù)性
維護(hù)性是很容易被遺漏的部分,但對(duì)分布式系統(tǒng)來(lái)說(shuō)其實(shí)是很重要的部分,例如整個(gè)系統(tǒng)環(huán)境應(yīng)該怎么搭建,部署,配套的維護(hù)工具、監(jiān)控點(diǎn)、報(bào)警點(diǎn)、問(wèn)題定位、問(wèn)題處理策略等等。
一、使用分布式鎖要滿足的幾個(gè)條件:
系統(tǒng)是一個(gè)分布式系統(tǒng)(關(guān)鍵是分布式,單機(jī)的可以使用ReentrantLock或者synchronized代碼塊來(lái)實(shí)現(xiàn))
共享資源(各個(gè)系統(tǒng)訪問(wèn)同一個(gè)資源,資源的載體可能是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)或者NoSQL)
同步訪問(wèn)(即有很多個(gè)進(jìn)程同事訪問(wèn)同一個(gè)共享資源。沒(méi)有同步訪問(wèn),誰(shuí)管你資源競(jìng)爭(zhēng)不競(jìng)爭(zhēng))
二、應(yīng)用的場(chǎng)景例子
管理后臺(tái)的部署架構(gòu)(多臺(tái)tomcat服務(wù)器+redis【多臺(tái)tomcat服務(wù)器訪問(wèn)一臺(tái)redis】+mysql【多臺(tái)tomcat服務(wù)器訪問(wèn)一臺(tái)服務(wù)器上的mysql】)就滿足使用分布式鎖的條件。多臺(tái)服務(wù)器要訪問(wèn)redis全局緩存的資源,如果不使用分布式鎖就會(huì)出現(xiàn)問(wèn)題。 看如下偽代碼:
long N=0L;
//N從redis獲取值
if(N5){
N++;
//N寫(xiě)回redis
}
復(fù)制代碼
常用的有EJB、rmi、Web Service,還有Hessian、NIO等,它們的優(yōu)缺點(diǎn)比較比下:
1:EJB
優(yōu)勢(shì):可擴(kuò)展性好,安全性強(qiáng),支持分布式事務(wù)處理。
劣勢(shì):不能跨語(yǔ)言;配置相對(duì)復(fù)雜,不同J2EE容器之間很難做無(wú)縫遷移。
2:rmi
優(yōu)勢(shì):面向?qū)ο蟮倪h(yuǎn)程服務(wù)模型;基于TCP協(xié)議上的服務(wù),執(zhí)行速度快。
劣勢(shì):不能跨語(yǔ)言;每個(gè)遠(yuǎn)程對(duì)象都要綁定端口,不易維護(hù);不支持分布式事務(wù)JTA,RMI框架對(duì)于安全性、事務(wù)、可擴(kuò)展性的支持非常有限。
3: Web Service
優(yōu)勢(shì):跨語(yǔ)言、跨平臺(tái),SOA思想的實(shí)現(xiàn);安全性高;可以用來(lái)兼容legacy系統(tǒng)的功能
劣勢(shì):性能相對(duì)差,不支持兩階段事務(wù)
4:Hessian
優(yōu)勢(shì):使用簡(jiǎn)單,速度快;跨語(yǔ)言,跨平臺(tái);可以用來(lái)兼容legacy系統(tǒng)的功能。
劣勢(shì):安全性的支持不夠強(qiáng),不支持兩階段事務(wù)。
5:NIO(Mina/Netty)
優(yōu)點(diǎn):基于TCP通信,效率上高于HTTP的方式,非阻塞IO應(yīng)對(duì)高并發(fā)綽綽有余。根據(jù)具體的需要制定數(shù)據(jù)傳輸?shù)母袷剑蓴U(kuò)展性強(qiáng)。
缺點(diǎn):不能跨語(yǔ)言,無(wú)法穿透防火墻。
復(fù)制粘貼 不喜勿噴
文章標(biāo)題:java代碼實(shí)現(xiàn)分布式 java中的分布式是個(gè)啥
標(biāo)題路徑:http://www.chinadenli.net/article34/dddpose.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)
聲明:本網(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)