应用程序的通信成本
2019獨角獸企業重金招聘Python工程師標準>>>
應用程序的通信成本
什么是通信
一個程序中兩個以上功能相互傳遞信號或數據叫做通信。
什么是成本
這是是指時間成本與空間成本。 時間就是傳遞數據所花費的時間。空間是指傳遞過程耗費容量大小。
都有哪些通信方式
全局變量
線程間通信
共享內存
共享文件
管道
Socket
硬件(串口,USB) 等等
全局變量
全局變量是成本最低通信方法,通過設置全局變量,在程序運行時過程中均可操作該變量,用戶信號傳遞,數據傳輸。
線程間通信
線程間通信也是采用全局變量方式,通常線程庫會提供一套完善的API供用戶使用,它可以實現共享,鎖,互斥等機制。
共享內存
共享內存是在內存中申請開辟一個區域,用于數據共享存儲。
共享文件
將數據存儲在文件中,供多線程,多進程訪問,文件可以上鎖與解鎖,這種方式性能最差,但對于初級開發者非常適合。 通過將文件存儲在tmpfs或shm 文件系統中,可以獲得不錯的性能。
管道
管道是字符設備,通常是fifo(先進先出)單向通信,如果需要雙工可能使用兩個管道。
Socket
Socket分為 unix socket 與 tcp/udp socket. 前者只能在unix like 系統中使用。 Socket 分為阻塞與非阻塞通信。 其中tcp/udp Socket 可以跨服務器傳輸數據。
硬件
例如串口通信,使用串口連接兩臺電腦,通常速率為 9600bps,115200bps A電腦中運行
cat?/dev/ttyS0B電腦運行
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 應用 加權值不同。
轉載于:https://my.oschina.net/neochen/blog/464084
總結
- 上一篇: 微店app怎么买东西(汉典微字的基本解释
- 下一篇: 几种流行Webservice控制框架