簡易的負載均衡伺服器 springsnail

2021-10-03 07:56:19 字數 2110 閱讀 5347

《linux高效能伺服器程式設計》作者開源的一款簡易負載均衡伺服器,整個專案**1400多行,短小精悍,適合初學者學習與模仿。該專案能從所有邏輯伺服器中選取負荷最小的一台來處理新的客戶連線,並且使用了程序池,有限狀態機,高效資料結構和統一事件源等書中提及的思路優化其效能,同時還細緻地封裝了每個函式和模組,使之更像乙個完整的實際伺服器專案。

《linux高效能伺服器》附帶專案springsnil原始碼解析

linux高效能伺服器程式設計springsnail原始碼解析(c++負載均衡)

config.xml:配置檔案,指明伺服器本身的位址及它所要連線的ip

log.h與log.cpp:日誌函式,在程式執行過程中列印各種資訊到檔案和控制台中。

mgr.h與mgr.cpp:處理網路連線和負載均衡的框架

conn.h與conn.cpp:客戶端類與函式

processcool.h:程序池,是整個專案的動力。

main.cpp:主函式,處理伺服器的主要邏輯。

了解完專案原始碼分布之後,我們發現有makefile檔案,所以直接make即可生成可執行檔案。可執行檔案就是圖中綠色的springsnail了。

有了可執行檔案,下一步就是修改配置檔案config.xml,將伺服器連線到我們想連線的ip上去。

$ nslookup music.163.com
結果如下:

上面59.111.181.35,59.111.181.38,59.111.181.60就是網域名稱的ip了,我們隨便選兩個新增到config.xml檔案中去:

儲存並退出,然後執行伺服器程式:

$ ./springsnail -f config.xml
終端顯示如下資訊:

表明伺服器已經成功與目標ip連線。

此時我們可以將這個伺服器作為中轉,向伺服器傳送資料。

首先另開終端,使用nc工具進行連線:

$ nc localhost 8080
/*nc(netcat)是乙個功能強大的網路工具,如果並未安裝請使用命令

$ yum install nc.x86_64
netcat不僅可以通過使用tcp或udp協議的網路連線讀寫資料,同時還是乙個功能強大的網路除錯和探測工具,能夠建立你需要的幾乎所有型別的網路連線。*/

連線成功後服務端會顯示:

這樣的資訊,此時在nc端模擬http報文,命令如下:

發現nc端返回如下資訊:

可以清晰的看出我們的訪問被403 forbidden了,說明網易並不允許這樣的中轉伺服器的存在,服務端也有相應的反饋:

可以看到剛才我們的連線請求被中斷了,服務端有"error"日誌訊息回應。

還可以使用這個伺服器去訪問其他**,只需修改config.xml檔案即可,會有許多不同的結果。

接下來將對整個專案的原始碼進行剖析,從框架到實現都會做上詳細的注釋。

伺服器負載均衡演算法

3.1 伺服器負載均衡演算法 big ip是一台對流量和內容進行管理分配的裝置。它提供10種靈活的演算法將資料流有效地 到它所連線的伺服器群。而面對使用者,只是一台虛擬伺服器。使用者此時只須記住一台伺服器,即虛擬伺服器。但他們的資料流卻被big ip靈活地均衡到所有的伺服器。這10種演算法包括 輪詢...

Nginx tomcat伺服器 負載均衡

反向 reverse proxy 方式是指以 伺服器來接受internet上的連線請求,然後將請求 給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時 伺服器對外就表現為乙個反向 伺服器。1 熱部署 我個人覺得這個很不錯。在master管理程序與worker...

web 伺服器負載均衡

web 應用伺服器集群系統,是由一群同時執行同乙個web應用的伺服器組成的集群系統,在外界看來,就像是乙個伺服器一樣。為了均衡集群服務 器的負載,達到優化系統效能的目的,集群伺服器將眾多的訪問請求,分散到系統中的不同節點進行處理。從而實現了更高的有效性和穩定性,而這也正是基於web的企業應用所必須具...