JAVA 分佈式 - 分佈式介紹

什麼是分佈式系統?
要理解分佈式系統,主要須要明白一下2個方面:java

1.分佈式系統必定是由多個節點組成的系統。
其中,節點指的是計算機服務器,並且這些節點通常不是孤立的,而是互通的。
2.這些連通的節點上部署了咱們的節點,而且相互的操做會有協同。
分佈式系統對於用戶而言,他們面對的就是一個服務器,提供用戶須要的服務而已,而實際上這些服務是經過背後的衆多服務器組成的一個分佈式系統,所以分佈式系統看起來像是一個超級計算機同樣。數據庫

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

 

使用分佈式系統主要有特色:瀏覽器

    1.增大系統容量。 咱們的業務量愈來愈大,而要能應對愈來愈大的業務量,一臺機器的性能已經沒法知足了,咱們須要多臺機器才能應對大規模的應用場景。因此,咱們須要垂直或是水平拆分業務系統,讓其變成一個分佈式的架構。服務器

    2.增強系統可用。 咱們的業務愈來愈關鍵,須要提升整個系統架構的可用性,這就意味着架構中不能存在單點故障。這樣,整個系統不會由於一臺機器出故障而致使總體不可用。因此,須要經過分佈式架構來冗餘系統以消除單點故障,從而提升系統的可用性。網絡

    3.由於模塊化,因此 系統模塊重用度更高架構

    4.由於軟件服務模塊被拆分,開發和發佈速度能夠並行而變得更快併發

    5.系統擴展性更高負載均衡

    6.團隊協做流程也會獲得改善框架

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

    1.分佈式處理,但只有一個總數據庫,沒有局部數據庫

    2.分層式處理,每一層都有本身的數據庫

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

什麼是 JAVA 分佈式應用?
一個大型的系統每每被分爲幾個子系統來作,一個子系統能夠部署在一臺機器的多個 JVM 上,也能夠部署在多臺機器上。可是每個系統不是獨立的,不是徹底獨立的。須要相互通訊,共同實現業務功能。

一句話來講:分佈式就是經過計算機網絡將後端工做分佈到多臺主機上,多個主機一塊兒協同完成工做。

實現分佈式主要的方式
分佈式應用用到的技術: 網絡通訊,基於消息方式的系統間通訊和基於遠程調用的系統間通訊。

缺點: 就是會增長技術的複雜度。
基於消息的系統通訊方式,主要是利用的網絡協議,好比 TCP/IP 協議。
系統間的通訊還須要對數據進行處理,好比同步 IO 和異步 IO。
遠程調用實現系統間的通訊:經過調用本地的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 提高計算能力————————————————版權聲明:本文爲CSDN博主「肖朋偉」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/qq_40147863/article/details/84350344

相關文章
相關標籤/搜索