天天看點

JAVA 分布式 – 分布式介紹

JAVA 分布式 – 分布式介紹

JAVA 分布式 - 分布式介紹

要了解分布式系統,主要需要明白一下2個方面:

1.分布式系統一定是由多個節點組成的系統。

其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。

2.這些連通的節點上部署了我們的節點,并且互相的操作會有協同。

分布式系統對于使用者而言,他們面對的就是一個伺服器,提供使用者需要的服務而已,而實際上這些服務是通過背後的衆多伺服器組成的一個分布式系統,是以分布式系統看起來像是一個超級計算機一樣。

例如淘寶,平時大家都會使用,它本身就是一個分布式系統,我們通過浏覽器通路淘寶網站時,這個請求的背後就是一個龐大的分布式系統在為我們提供服務,整個系統中有的負責請求處理,有的負責存儲,有的負責計算,最終他們互相協調把最後的結果傳回并呈現給使用者。

JAVA 分布式 – 分布式介紹

使用分布式系統主要有特點:

1.增大系統容量。 我們的業務量越來越大,而要能應對越來越大的業務量,一台機器的性能已經無法滿足了,我們需要多台機器才能應對大規模的應用場景。是以,我們需要垂直或是水準拆分業務系統,讓其變成一個分布式的架構。

2.加強系統可用。 我們的業務越來越關鍵,需要提高整個系統架構的可用性,這就意味着架構中不能存在單點故障。這樣,整個系統不會因為一台機器出故障而導緻整體不可用。是以,需要通過分布式架構來備援系統以消除單點故障,進而提高系統的可用性。

3.因為子產品化,是以 系統子產品重用度更高

4.因為軟體服務子產品被拆分,開發和釋出速度可以并行而變得更快

5.系統擴充性更高

6.團隊協作流程也會得到改善

分布式系統的類型有三種:

1.分布式處理,但隻有一個總資料庫,沒有局部資料庫

2.分層式處理,每一層都有自己的資料庫

3.充分分散的分布式網絡,沒有中央控制部分,各節點之間的聯系方式又可以有多種,如松散的聯接,緊密的聯接,動态的聯接,廣播通知式的聯接等

一個大型的系統往往被分為幾個子系統來做,一個子系統可以部署在一台機器的多個 JVM 上,也可以部署在多台機器上。但是每一個系統不是獨立的,不是完全獨立的。需要互相通信,共同實作業務功能。

一句話來說:分布式就是通過計算機網絡将後端工作分布到多台主機上,多個主機一起協同完成工作。

分布式應用用到的技術: 網絡通信,基于消息方式的系統間通信和基于遠端調用的系統間通信。

缺點: 就是會增加技術的複雜度。

基于消息的系統通信方式,主要是利用的網絡協定,比如 TCP/IP 協定。

系統間的通信還需要對資料進行處理,比如同步 IO 和異步 IO。

遠端調用實作系統間的通信:通過調用本地的java接口的方法來透明的調用遠端java的實作。具體的細節有架構來實作。

JAVA 分布式 – 分布式介紹

基于Java自身技術實作消息方式的系統間通信:

基于Java自身包實作消息方式的系統間通信的方式有:

TCP/IP+BIO、TCP/IP+NIO、UDP/IP+BIO以及UDP/IP+NIO 4種方式

TCP/IP+BIO 在 Java 中可基于 Socket、ServerSocket 來實作 TCP/IP+BIO 的系統間通信。

Socket 主要用于實作建立連接配接及網絡 IO 的操作,ServerSocket 主要用于實作伺服器端端口的監聽及 Socket 對象的擷取。

多個用戶端通路伺服器端的情況下,會遇到兩個問題:建立多個 socket 的,占用過多的本地資源,伺服器端要承受巨大的來訪量;建立過多的 socket,占用過多的資源,影響性能。

通常解決這種問題的辦法是,使用 連接配接池,既能限制連接配接的數量,又能避免建立的過程,可以很大的提高性的問題。缺點就是競争量大的時候造成激烈的競争和等待。需要注意的是,要設定逾時時間,如果不這樣的話,會造成無限制的等待。

為了解決這個問題,采用一連接配接一線程的方式,同時也會帶來副作用,記憶體占用過多。

TCP/IP 異步通信: JAVA NIO 通道技術實作。

附上某 JAVA 分布式學習目錄,幫助了解分布式都有哪些東西

第 1 章 分布式 Java應用

1.1 基于消息方式實作系統間的通信

1.1.1 基于 Java自身技術實作消息方式的系統間通信

1.1.2 基于開源架構實作消息方式的系統間通信

1.2 基于遠端調用方式實作系統間的通信

1.2.1 基于 Java自身技術實作遠端調用方式的系統間通信

1.2.2 基于開源架構實作遠端調用方式的系統間通信

第 2 章 大型分布式 Java應用與 SOA

2.1 基于 SCA實作 SOA平台

2.2 基于 ESB實作 SOA平台

2.3 基于 Tuscany實作 SOA平台

2.4 基于 Mule 實作 SOA平台

第 3 章 深入了解 JVM

3.1 Java代碼的執行機制

3.1.1 Java源碼編譯機制

3.1.2 類加載機制

3.1.3 類執行機制

3.2 JVM記憶體管理

3.2.1 記憶體空間

3.2.2 記憶體配置設定

3.2.3 記憶體回收

3.2.4 JVM 記憶體狀況檢視方法和分析工具

3.3 JVM線程資源同步及互動機制

3.3.1 線程資源同步機制

3.3.2 線程互動機制

3.3.3 線程狀态及分析

第 4 章 分布式應用與 SunJDK類庫

4.1 集合包

4.1.1 ArrayList

4.1.2 LinkedList

4.1.3 Vector

4.1.4 Stack

4.1.5 HashSet

4.1.6 TreeSet

4.1.7 HashMap

4.1.8 TreeMap

4.1.9 性能測試

4.1.10 小結

4.2 并發包( java.util.concurrent )

4.2.1 ConcurrentHashMap

4.2.2 CopyOnWriteArrayList

4.2.3 CopyOnWriteArraySet

4.2.4 ArrayBlockingQueue

4.2.5 AtomicInteger

4.2.6 ThreadPoolExecutor

4.2.7 Executors

4.2.8 FutureTask

4.2.9 Semaphore

4.2.10 CountDownLatch

4.2.11 CyclicBarrier

4.2.12 ReentrantLock

4.2.13 Condition

4.2.14 ReentrantReadWriteLock

4.3 序列化 /反序列化

4.3.1 序列化

4.3.2 反序列化

第 5 章 性能調優

5.1 尋找性能瓶頸

5.1.1 CPU消耗分析

5.1.2 檔案 IO 消耗分析

5.1.3 網絡 IO 消耗分析

5.1.4 記憶體消耗分析

5.1.5 程式執行慢原因分析

5.2 調優

5.2.1 JVM 調優

5.2.2 程式調優

5.2.3 對于資源消耗不多,但程式執行慢的情況

第 6 章 建構高可用的系統

6.1 避免系統中出現單點

6.1.1 負載均衡技術

6.1.2 熱備

6.2 提高應用自身的可用性

6.2.1 盡可能地避免故障

6.2.2 及時發現故障

6.2.3 及時處理故障

6.2.4 通路量及資料量不斷上漲的應對政策

第 7 章 建構可伸縮的系統

7.1 垂直伸縮

7.1.1 支撐高通路量

7.1.2 支撐大資料量

7.1.3 提升計算能力

7.2 水準伸縮

7.2.1 支撐高通路量

7.2.2 支撐大資料量

7.2.3 提升計算能力