JAVA 分散式 - 分散式介紹

肖朋偉發表於2018-11-22

什麼是分散式系統?

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

  • 1.分散式系統一定是由多個節點組成的系統。
    其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。
  • 2.這些連通的節點上部署了我們的節點,並且相互的操作會有協同。

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

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

JAVA 分散式 - 分散式介紹

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

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

    2.加強系統可用。 我們的業務越來越關鍵,需要提高整個系統架構的可用性,這就意味著架構中不能存在單點故障。這樣,整個系統不會因為一臺機器出故障而導致整體不可用。所以,需要通過分散式架構來冗餘系統以消除單點故障,從而提高系統的可用性。

    3.因為模組化,所以 系統模組重用度更高

    4.因為軟體服務模組被拆分,開發和釋出速度可以並行而變得更快

    5.系統擴充套件性更高

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

分散式系統的型別有三種:

    1.分散式處理,但只有一個總資料庫,沒有區域性資料庫

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

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

什麼是 JAVA 分散式應用?

一個大型的系統往往被分為幾個子系統來做,一個子系統可以部署在一臺機器的多個 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 分散式知識體系介紹

附上某 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 提升計算能力

相關文章