1. 程式人生 > 資訊 >Facebook 母公司 Meta 收購 Giphy 上訴案本週開庭,專家稱勝算不大

Facebook 母公司 Meta 收購 Giphy 上訴案本週開庭,專家稱勝算不大

應用程式的通訊成本

什麼是通訊

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

什麼是成本

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

都有哪些通訊方式

  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 應用 加權值不同。

耦合與解耦

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