1. 程式人生 > 其它 >Dubbo詳細介紹與安裝使用過程

Dubbo詳細介紹與安裝使用過程

應用程式的通訊成本

什麼是通訊

一個程式中兩個以上功能相互傳遞訊號或資料叫做通訊。

什麼是成本

這是是指時間成本與空間成本。 時間就是傳遞資料所花費的時間。空間是指傳遞過程耗費容量大小。

都有哪些通訊方式

  1. 全域性變數
  2. 執行緒間通訊
  3. 共享記憶體
  4. 共享檔案
  5. 管道
  6. Socket
  7. 硬體(串列埠,USB) 等等

全域性變數

全域性變數是成本最低通訊方法,通過設定全域性變數,在程式執行時過程中均可操作該變數,使用者訊號傳遞,資料傳輸。

執行緒間通訊

執行緒間通訊也是採用全域性變數方式,通常執行緒庫會提供一套完善的API供使用者使用,它可以實現共享,鎖,互斥等機制。

共享記憶體

共享記憶體是在記憶體中申請開闢一個區域,用於資料共享儲存。

共享檔案

將資料儲存在檔案中,供多執行緒,多程序訪問,檔案可以上鎖與解鎖,這種方式效能最差,但對於初級開發者非常適合。 通過將檔案儲存在tmpfs或shm 檔案系統中,可以獲得不錯的效能。

管道

管道是字元裝置,通常是fifo(先進先出)單向通訊,如果需要雙工可能使用兩個管道。

Socket

Socket分為 unix socket 與 tcp/udp socket. 前者只能在unix like 系統中使用。 Socket 分為阻塞與非阻塞通訊。 其中tcp/udp Socket 可以跨伺服器傳輸資料。

硬體

例如串列埠通訊,使用串列埠連線兩臺電腦,通常速率為 9600bps,115200bps A電腦中執行

cat /dev/ttyS0

B電腦執行

cat /etc/passwd > /dev/ttyS0

可以將/etc/passwd檔案從A電腦傳遞到B電腦。

不再本文討論範圍,這裡不多述。

現在我們已經清楚了各種通訊方式,這些通訊方式適用於不同場景,由此出現了很多種使用方式,甚至多種方式同時使用。

伺服器池概念

網際網路時代的特點是,伺服器不在單一一種,而是各種異構系統,我們經常會看到一個網站有多個伺服器組成,因此我們將應用分佈在不同的伺服器上執行。 例如 Web伺服器,應用伺服器,快取伺服器,資料庫伺服器各司其職。就應用伺服器還可能分成很多種類,例如搜尋,內容管理,使用者中心,等等。 問題來了,你會發現你的每個團隊開發出一個產品,都需要一個伺服器執行,每個團隊都在做獨立系統。不同團隊開發出的功能與其他產品並不相容,於是有了介面這種東西。 運維的問題也來了,每個應用一個伺服器不太現實,但每個專案都不想與其他專案公用一個伺服器資源,於是有了虛擬機器。

於是我們見到的系統是這樣了

               +--------+
               | C 應用 |
               +--------+
                ^  ^  ^
                |  |  |
+--------+ <-----+  |  +-----> +--------+
| A 應用 | <--------+--------> | B 應用 |
+--------+ <-----+  |  +-----> +--------+
                 |  |  |
                 V  V  V
               +--------+
               | D 應用 |
               +--------+

A 應用 執行中會與其他三個伺服器產生通訊,一次操作建立三次連線,這樣的通訊成本是非常高的,如果任何一個節點出現故障都出現阻塞。 從運維角度這種配置也極其繁瑣,每個節點都要配置與其他連點連線,防火牆ACL 維護也非常繁瑣。 出現故障,排查也非常困難,還會消耗大量的排查時間。

進一步優化

我們將公共呼叫部門放在一處,然後將所有資源都放在伺服器上。通過負載均衡分發呼叫,高可用技術解決公用介面單點問題。

               +----------+
               | 公共介面 |
               +----------+
                 ^  ^  ^
                 |  |  | 
    +------------+  |  +------------+
    |               |               |
    V           V               V
+--------+      +--------+      +--------+
| A 應用 |      | B 應用 |      | C 應用 |
| B 應用 |      | C 應用 |      | A 應用 |
| C 應用 |      | A 應用 |      | B 應用 |
+--------+      +--------+      +--------+

這樣的好處顯而易見,伺服器節點充分使用,既有高可用,又有負載均衡,保障7*24小時無故障執行。部屬也方便。 注意上面:每個節點的 A,B,C 應用 加權值不同。

耦合與解耦

耦合級別有變數級別、函式級別、方法級別、類級別、包級別、協議級別、語言級別、資料流級別、快取級別、資料庫級別、以及業務級別。 你需要根據當時場景適當耦合或解耦。例如理論上軟體執行速度是在同一個實體機上執行效率最高,有時可能將其設計為分散式才能體現效率。