新聞中心
怎樣入門Java分布式應(yīng)用?
我接觸分布式系統(tǒng)有很長(zhǎng)的時(shí)間了,也算小有心得,下面從what,why,who,when和how幾方面來分別討論!

創(chuàng)新互聯(lián)建站從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元東洲做網(wǎng)站,已為上家服務(wù),為東洲各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
1,what:分布式是什么?相對(duì)于把所有服務(wù),功能在一臺(tái)機(jī)器(或者一個(gè)集群)進(jìn)行統(tǒng)一部署的集成系統(tǒng),分布式采用了拆分的方式,將不同的服務(wù)部署在不同的節(jié)點(diǎn)上,彼此之間通過某種方式進(jìn)行通信,對(duì)外表現(xiàn)出高度透明和內(nèi)聚性,讓使用者感覺到是一個(gè)統(tǒng)一的整體!
2,why:為什么要使用分布式?①集成系統(tǒng)代碼耦合嚴(yán)重,難以擴(kuò)展②而且隨著業(yè)務(wù)需求越來越多,就算是使用集群也很難達(dá)到高并發(fā),低延遲的要求③集成系統(tǒng)對(duì)于單個(gè)服務(wù)器的要求很高,很容易出現(xiàn)內(nèi)存溢出,CPU占滿的情況!使用分布式系統(tǒng)能將服務(wù)粒度變小,防止業(yè)務(wù)耦合,同時(shí)對(duì)于單個(gè)服務(wù)水平擴(kuò)展更加容易!
3,who和when:什么場(chǎng)景該使用分布式呢?在單一系統(tǒng)無法滿足性能需求的時(shí)候(阿里巴巴雙十一幾十億的訪問可不是蓋的,是幾萬臺(tái)服務(wù)器堆起來的),在業(yè)務(wù)耦合太嚴(yán)重的時(shí)候,都應(yīng)該考慮將集成系統(tǒng)拆成分布式系統(tǒng),通常來說所有公司都可以使用分布式系統(tǒng),但是涉及到更多的開發(fā)資源,更多的運(yùn)維成本,所以小公司可以選擇使用!
4,how:怎么玩轉(zhuǎn)分布式?先來看下JAVA中有哪些涉及分布式的技術(shù),首先需要拆分服務(wù),所以需要微服務(wù)架構(gòu)(springcloud和dubbo),服務(wù)之間相互調(diào)用使用rpc或者服務(wù)注冊(cè)與發(fā)現(xiàn)中心(eureka,zookeeper),如果服務(wù)異常了,需要進(jìn)行熔斷,防止雪崩(hystrix等),服務(wù)之間要通信,所以需要消息隊(duì)列保證數(shù)據(jù)傳輸(redis,kafka,activemq等),數(shù)據(jù)庫(kù)性能跟不上,需要進(jìn)行分庫(kù)分表(多臺(tái)數(shù)據(jù)庫(kù)分布在不同的服務(wù)器節(jié)點(diǎn)上),業(yè)務(wù)代碼連接分庫(kù)分表的數(shù)據(jù)庫(kù)需要通過中間件服務(wù)(mycat,sharding-jdbc等),高并發(fā),秒殺系統(tǒng),數(shù)據(jù)庫(kù)IO速度還是跟不上,就不得不引入緩存(redis,memcache等),數(shù)據(jù)庫(kù)之間或者和緩存之間不可避免的需要進(jìn)行數(shù)據(jù)同步(canal等),單個(gè)服務(wù)如果還有性能問題,可以使用反向代理和負(fù)載均衡(nginx等)!
總之,分布式技術(shù)不是簡(jiǎn)簡(jiǎn)單單的一門技術(shù),而是涉及到服務(wù)的拆分,服務(wù)的通信,服務(wù)的相互調(diào)用等一系列的高難度問題!
同時(shí),由于系統(tǒng)是分布的,對(duì)于分布式事務(wù)(使用TCC,多階段提交等方式保證數(shù)據(jù)一致性),分布式緩存,分布式消息隊(duì)列,分布式鎖,數(shù)據(jù)一致性,消息丟失,全局唯一ID等問題都是迫切需要注意的難點(diǎn)!
具體的分布式實(shí)現(xiàn)不是三言兩語(yǔ)就能說清的,一定要在實(shí)際的項(xiàng)目中多加實(shí)踐,才能深切的掌握這項(xiàng)技術(shù),更多在項(xiàng)目實(shí)操上遇到的問題,可以聯(lián)系筆者進(jìn)行研究討論,更多技術(shù)分享,敬請(qǐng)關(guān)注。。。
Java分布式架構(gòu),主要從四個(gè)方面考慮:
一、分布式架構(gòu)的原理
分布式架構(gòu)的演化過程
如何把應(yīng)用從單機(jī)擴(kuò)展到分布式
CDN加速靜態(tài)文件訪問
系統(tǒng)監(jiān)控、容災(zāi)、存儲(chǔ)動(dòng)態(tài)擴(kuò)容
架構(gòu)設(shè)計(jì)及業(yè)務(wù)驅(qū)動(dòng)的劃分
二、分布式架構(gòu)的策略
分布式架構(gòu)網(wǎng)絡(luò)通信原理
通訊協(xié)議中的序列化和反序列化
得看你有怎樣的軟件行業(yè)基礎(chǔ)?如果你是剛?cè)腴T軟件剛也,那么先把java和數(shù)據(jù)庫(kù)學(xué)好了,為什么要先學(xué)這兩樣呢?因?yàn)檫@兩樣是基礎(chǔ)吧,如果這兩樣都不懂的話,你就根本不知道java分布式應(yīng)用的優(yōu)勢(shì)在哪兒。如果說你是有java基礎(chǔ)的話,你可以現(xiàn)在先學(xué)spring boot,然后就可以學(xué)基于spring boot的分布式框架,這些可以去網(wǎng)上搜視頻來看,應(yīng)該還是挺簡(jiǎn)單的。關(guān)鍵是你要用手實(shí)際去操作一遍,這樣的話印象更深刻一些。
java分布式應(yīng)用入門很簡(jiǎn)單,但學(xué)精不容易,首先你的程序能分成多份 ,供外界調(diào)用,就是分布式,但多份后,如何調(diào)用,這就是請(qǐng)求路由了,就要看負(fù)載均衡了,那么如果其中一份,保存了狀態(tài),而外部請(qǐng)求又被路由到另一份了,狀態(tài)如何同步呢
WebSocket是什么原理?為什么可以實(shí)現(xiàn)持久連接?
http請(qǐng)求響應(yīng)模式是一夜情,websocket請(qǐng)求響應(yīng)模式是小三,tcp請(qǐng)求響應(yīng)模式是夫妻關(guān)系。
一句話就可以說清楚的問題,饒了這么大的一個(gè)圈子。因?yàn)閣ebsocket的本質(zhì)還是基于tcp的,tcp是老爹,既然tcp可以全雙工,那么websocket當(dāng)然可以實(shí)現(xiàn)。http不支持是因?yàn)閰f(xié)議本身規(guī)定是只能響應(yīng)一次,第二次服務(wù)器不認(rèn)識(shí)客戶端了 就像一夜情。如何解決這個(gè)問題?原理就是讓服務(wù)器保留客戶端的身份信息,你不需要再一次告訴服務(wù)器,我是誰,我是你的情人,可以再上車。
WebSocket是一種不同于HTTP的協(xié)議,重要的是它完美彌補(bǔ)了http協(xié)議在某些場(chǎng)合下的重大不足。
接下來,我來簡(jiǎn)單介紹下websocket與http的區(qū)別。
http/https請(qǐng)求是目前最廣泛使用的網(wǎng)絡(luò)通信協(xié)議,但是它們有一個(gè)非常大局限性,那就是請(qǐng)求只能由agent發(fā)起,server只能被動(dòng)的等待請(qǐng)求,而且一次請(qǐng)求就是一個(gè)response和request對(duì)應(yīng)。雖然在HTTP 1.1中進(jìn)行了改進(jìn),增加了keep-alive,出現(xiàn)了長(zhǎng)連接這樣的概念,但是仍然是一個(gè)request對(duì)應(yīng)一個(gè)response,這在request中攜帶大量header信息,而response中沒什么有用信息的時(shí)候,無疑是對(duì)通信資源的浪費(fèi)。
也許你覺得這么說有點(diǎn)抽象,那么我們舉個(gè)例子來說明,我們?cè)跒g覽器上用QQ聊天,如果瀏覽器作為agent使用的是http協(xié)議與server端通信,那么它需要定時(shí)去訪問server(輪詢),問它,喜歡的女神有沒有回復(fù)我的信息啊。可是女神可能去洗澡了,手機(jī)沒帶進(jìn)浴室,于是browser這個(gè)agent就不停的發(fā)一個(gè)大腦袋的request去server,每次拿回來的卻都是干癟癟的response。這時(shí)候,如果你一邊看電影一邊等女神的回復(fù),那么結(jié)果可能就是電影很卡,女神也沒有消息。
這個(gè)時(shí)候WebSocket協(xié)議就出現(xiàn)了。如果使用的是websocket協(xié)議,在登陸了網(wǎng)頁(yè)版QQ之后,這個(gè)瀏覽器就會(huì)作為agent向server發(fā)起請(qǐng)求,建立一個(gè)連接,在這個(gè)連接建立期間,是可以進(jìn)行雙工通信的,就是說agent可以主動(dòng)把消息發(fā)送給server,server也能在收到女神回復(fù)后,第一時(shí)間把消息傳遞到你的屏幕上,減少了無意義的輪詢消耗,同時(shí)也保證了等女神回復(fù)期間電影不卡,不會(huì)無聊。甚至也可以簡(jiǎn)單的理解,只需要經(jīng)過一次HTTP請(qǐng)求的連接建立,就可以進(jìn)行源源不斷的信息傳送了。
說到實(shí)現(xiàn)長(zhǎng)連接,說白了,websocket的設(shè)計(jì)者在最初就是沒想過像http協(xié)議那樣謹(jǐn)慎小氣,建立了連接說完一句話就跑。否則任何基于TCP的應(yīng)用協(xié)議,都是可以進(jìn)行長(zhǎng)連接通信的。
也許正是當(dāng)初http的如此設(shè)計(jì),才給了WebSocket如今的用武之地。
到此,以上就是小編對(duì)于mongodb的分片方式的問題就介紹到這了,希望這2點(diǎn)解答對(duì)大家有用。
名稱欄目:WebSocket是什么原理?為什么可以實(shí)現(xiàn)持久連接?
網(wǎng)頁(yè)鏈接:http://fisionsoft.com.cn/article/dhjdhci.html


咨詢
建站咨詢
