對于初學(xué)者來說,學(xué)習(xí)Java的根本動力就是分布式開發(fā),特別是apache下面的hadoop、hdfs、hbase,這些基本是分布式開發(fā)的標配。那么這篇文章小編就來和大家一起聊聊分布式吧!
一、什么是分布式系統(tǒng)?
要理解分布式系統(tǒng),主要需要明白一下2個方面:
1、分布式系統(tǒng)一定是由多個節(jié)點組成的系統(tǒng)。
其中,節(jié)點指的是計算機服務(wù)器,而且這些節(jié)點一般不是孤立的,而是互通的。
2、這些連通的節(jié)點上部署了我們的節(jié)點,并且相互的操作會有協(xié)同。
分布式系統(tǒng)對于用戶而言,他們面對的就是一個服務(wù)器,提供用戶需要的服務(wù)而已。而實際上這些服務(wù)是通過背后的眾多服務(wù)器組成的一個分布式系統(tǒng)。因此分布式系統(tǒng)看起來像是一個超級計算機一樣。
例如淘寶,平時大家都會使用,它本身就是一個分布式系統(tǒng)。我們通過瀏覽器訪問淘寶網(wǎng)站時,這個請求的背后就是一個龐大的分布式系統(tǒng)在為我們提供服務(wù),整個系統(tǒng)中有的負責請求處理,有的負責存儲,有的負責計算,最終他們相互協(xié)調(diào)把最后的結(jié)果返回并呈現(xiàn)給用戶。
使用分布式系統(tǒng)主要有特點:
1、增大系統(tǒng)容量。我們的業(yè)務(wù)量越來越大,而要能應(yīng)對越來越大的業(yè)務(wù)量,一臺機器的性能已經(jīng)無法滿足了,我們需要多臺機器才能應(yīng)對大規(guī)模的應(yīng)用場景。所以,我們需要垂直或是水平拆分業(yè)務(wù)系統(tǒng),讓其變成一個分布式的架構(gòu)。
2、加強系統(tǒng)可用。我們的業(yè)務(wù)越來越關(guān)鍵,需要提高整個系統(tǒng)架構(gòu)的可用性,這就意味著架構(gòu)中不能存在單點故障。這樣,整個系統(tǒng)不會因為一臺機器出故障而導(dǎo)致整體不可用。所以,需要通過分布式架構(gòu)來冗余系統(tǒng)以消除單點故障,從而提高系統(tǒng)的可用性。
3、因為模塊化,所以系統(tǒng)模塊重用度更高。
4、因為軟件服務(wù)模塊被拆分,開發(fā)和發(fā)布速度可以并行而變得更快。
5、系統(tǒng)擴展性更高。
6、團隊協(xié)作流程也會得到改善。
分布式系統(tǒng)的類型有三種:
1、分布式處理,但只有一個總數(shù)據(jù)庫,沒有局部數(shù)據(jù)庫。
2、分層式處理,每一層都有自己的數(shù)據(jù)庫。
3、充分分散的分布式網(wǎng)絡(luò),沒有中央控制部分,各節(jié)點之間的聯(lián)系方式又可以有多種,如松散的聯(lián)接,緊密的聯(lián)接,動態(tài)的聯(lián)接,廣播通知式的聯(lián)接等。
二、什么是Java分布式應(yīng)用?
一個大型的系統(tǒng)往往被分為幾個子系統(tǒng)來做,一個子系統(tǒng)可以部署在一臺機器的多個JVM上,也可以部署在多臺機器上。但是每一個系統(tǒng)不是獨立的,不是完全獨立的。需要相互通信,共同實現(xiàn)業(yè)務(wù)功能。
一句話來說:分布式就是通過計算機網(wǎng)絡(luò)將后端工作分布到多臺主機上,多個主機一起協(xié)同完成工作。
三、實現(xiàn)分布式主要的方式
分布式應(yīng)用用到的技術(shù):網(wǎng)絡(luò)通信,基于消息方式的系統(tǒng)間通信和基于遠程調(diào)用的系統(tǒng)間通信。
缺點:就是會增加技術(shù)的復(fù)雜度?;谙⒌南到y(tǒng)通信方式,主要是利用的網(wǎng)絡(luò)協(xié)議,比如TCP/IP協(xié)議。系統(tǒng)間的通信還需要對數(shù)據(jù)進行處理,比如同步IO和異步IO。
遠程調(diào)用實現(xiàn)系統(tǒng)間的通信:通過調(diào)用本地的Java接口的方法來透明的調(diào)用遠程Java的實現(xiàn)。具體的細節(jié)有框架來實現(xiàn)。
基于Java自身技術(shù)實現(xiàn)消息方式的系統(tǒng)間通信:
基于Java自身包實現(xiàn)消息方式的系統(tǒng)間通信的方式有:
TCP/IP+BIO、TCP/IP+NIO、UDP/IP+BIO以及UDP/IP+NIO 4種方式。
TCP/IP+BIO在Java中可基于Socket、ServerSocket來實現(xiàn)TCP/IP+BIO的系統(tǒng)間通信。
Socket主要用于實現(xiàn)建立連接及網(wǎng)絡(luò)IO的操作,ServerSocket主要用于實現(xiàn)服務(wù)器端端口的監(jiān)聽及Socket對象的獲取。
多個客戶端訪問服務(wù)器端的情況下,會遇到兩個問題:建立多個socket的,占用過多的本地資源,服務(wù)器端要承受巨大的來訪量;創(chuàng)建過多的socket,占用過多的資源,影響性能。
通常解決這種問題的辦法是,使用連接池,既能限制連接的數(shù)量,又能避免創(chuàng)建的過程,可以很大的提高性的問題。缺點就是競爭量大的時候造成激烈的競爭和等待。需要注意的是,要設(shè)置超時時間,如果不這樣的話,會造成無限制的等待。
為了解決這個問題,采用一連接一線程的方式,同時也會帶來副作用,內(nèi)存占用過多。
TCP/IP異步通信:Java NIO通道技術(shù)實現(xiàn)。
Java分布式視頻下載
Nginx視頻教程:http://www.bjpowernode.com/javavideo/133.html
Redis視頻教程:http://www.bjpowernode.com/javavideo/130.html
Dubbo視頻教程:http://www.bjpowernode.com/javavideo/129.html
以上就是深圳達內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“Java分布式開發(fā)框架視頻之什么是分布式”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。