本站小編為你精心準備了中小型網站服務器架構設計研究參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
摘要:傳統的網站中,為了提高性能使用更多CPU、更大內存、更強的磁盤陣列的小型機,這無疑會使網站初期就要投入大量成本。由于成本的原因,中小型網站不可能選擇昂貴的小型機。介紹一個中小型網站的架構設計,使用多臺普通服務器搭建網站能夠實現高可靠性、高性能、可伸縮性等特征。
關鍵詞:服務器;高性能;可伸縮性
隨著互聯網的普及,越來越多的個人、機構、企業接入互聯網。對于一些機構和企業來說,建設網站可以展示自身,開展相關業務,這幾乎是當前這個時代必不可少的部分。對于這些網站來說,首先,應該要有較高的可靠性,在成本允許的范圍內減少一年中的故障時間。除了選擇可靠性高的服務器、磁盤陣列外,提高可靠性最有效的方法是使用雙機或多機熱備份。其次,要有較高的安全性,安全性包括保密性、完整性、和可用性。保密性就是要確保重要信息不被非授權地竊取,這主要依賴于軟件系統的設計與實現;完整性要確保信息不被偽造、篡改、刪除以及意外丟失,這除了軟件系統的設計外,在服務器上可以通過雙機備份,異地數據備份實現;服務器上的可用性主要體現在能抵抗各種類型的拒絕服務攻擊(DenialofService)。第三,服務器架構應具備可伸縮性,對于企業或機構來說,初期可能業務量少,用戶訪問量少,需要的服務器性能也低,隨著時間的推移,更多的用戶訪問,需要更強的服務器能力。這時需要增加服務器來分擔用戶訪問負荷,這一過程中架構不應有大的調整,特別是軟件部分不應有大調整,因為軟件的重新開發需要消耗大量的人力。
1服務器的架構設計
1.1整體架構設計
架構如圖1所示,服務器類型分為反向服務器、Web服務器、數據庫服務器。對于初期小型網站來說,可以根據情況將這三種類型的服務器部署到一臺物理服務器上,以節約成本。當需要擴展時,將其分布到多臺物理服務器上。
1.2操作系統的選擇
目前在網站建設中最常見的操作系統是Linux和WindowsServer系統,Linux的優點體現在它是開源免費的軟件,不需要額外支付軟件許可費用。同時多數服務器軟件如Redis、Nginx、MyCat等在Linux平臺上有更好的表現。Windows的優勢主要體現在其操作日常人們的操作習慣類似,沒有特殊情況應選擇Linux操作系統。
1.3服務器軟件的選擇
多數支持HTTP協議的Web服務器都能支持反向(Reverseproxy),如Nginx、Apache、Squid、Lighttpd等,其中Nginx擁有更好的性能、內存占用少,特別是Nginx社區比較活躍,軟件功能模塊也多,特別是在高并發情況下比Apache有更好的性能[1-2],所以推薦使用Nginx。
1.4Web服務器的選擇
Web服務器的選擇更加依賴于軟件架構的設計,目前常見的后端開發技術有PHP、Java等,如果使用PHP開發可以選擇php-fpm或者Apache,如果使用Java技術,多使用Tomcat。
1.5數據庫服務器的選擇
對于中小型網站來說,多使用免費的MySQL作為數據庫,當然也可以根據實際情況使用Oracle、PostgreSQL等。
2服務器相關技術設計
2.1Nginx反向設計
配置如下所示,在根的位置(/)將所有的請求轉發到反向abc(upstreamabc)上,可根據實際情況調整,比如將靜態的HTML和JPEG調整到特定的服務器上。要注意根據軟件的情況將HTTP報頭傳到后端,主要配置如下所示:反向可以HTTP請求分配后多個后端服務器上,達到負荷分擔的效果。同時,如果某個服務器發生故障,會被剔除出去,實現多機熱備份的功能[3]。Nginx有多種負荷均衡方式,默認情況下采用輪詢的方式,另外還可以使用ip_hash和權重等方式。特別要注意的是除了采用ip_hash方式,其他的方式會導致同一用戶的請求分配到不同的服務器上,這時應考慮使用Session共享技術,保證數據的正確性[4]。
2.2文件同步設計
當有多臺web服務器時,需要保證文件內容的同步。Unison是一個多平臺上的文件同步工具,能夠自動完成兩臺服務器目錄文件的同步,它支持SSH、RSH和Socket等多種網絡協議的同步。Unison安裝后會在用戶目錄下生成一個名為.unison的隱藏目錄,在其中存放配置文件、日志文件等。default.prf是其配置文件,關鍵配置如下:如果是快速檢查,unison會根據文件生成的時間來確定版本的先后,是否需要同步。否則會對比兩個文件的異同,多數情況下使用快速檢查即可。配置好后利用,利用cron計劃任務定期調用unison即可,要注意非快速檢察花費時間非常長,不適合頻繁調用。
2.3數據庫主從復制設計
對于一般的中小型網站推薦使用免費的MySQL數據庫,主從復制就是一臺MySQL數據庫服務器擔任主服務器(Master),多臺服務器擔任從服務器(Slave),可以向主服務器中讀或者寫數據,但只能對從服務器執行讀操作。從服務器根據主服務器發來的日志信息,和主服務器保持同步[2]。但這種同步是非實時的,比如向主服務器寫入一條數據,立刻讀從服務器,不會得到更新后的數據,這是開發軟件的人員要注意的地方。因為從服務器是依賴主服務器的日志才能更新數據庫,因此要打開日志查看主服務器的日志狀態,并記錄日志位置,然后在從服務器上將日志調整到與主服務器相同的位置即可。
2.4讀寫分離的設計
數據庫實現主從復制后,這對軟件開發者不是透明的,因為寫數據是一個服務器,讀數據又是另一個服務器,那么可以使用數據庫中間件技術屏蔽這些差別。MyCat就是其中的佼佼者,它能夠實現分庫分表,讀寫分離,故障服務器剔除等。軟件開發者將不再需要考慮讀寫分離的軟件在其中添加一個讀服務器一個寫服務器,主要配置如下:
2.5session共享設計
使用Nginx反向,可能會出現同一用戶的請求分發到不同的服務器上,這樣必須保證用戶數據的一致性。儲存在數據庫的數據是多臺服務器共享的,不會出現不一致的情況,而用戶的session數據是在服務器上存儲,不能多機共享,因此反這種情況必須實現session共享。現在常見的是使用緩存數據庫如Redis、Memcache。相對來說Redis功能比較豐富,除了支持Key/Value類型的數據外,還支持list、set、hash等數據類型,另外redis還能把數據持久化到硬盤中。Memcache的只能將K/V類型的數據存在內存中,程序異常結束將失去所有數據。這里我們以Memcache+PHP為例,實現安裝好Memcache,以及PHP中的Memcache模塊,在PHP的配置文件PHP.ini中完成如下配置
3結語
傳統的網站中,為了提高性能使用更多CPU、更大內存、更強的磁盤陣列的小型機,這無疑會使網站初期就要投入大量成本。使用多臺普通服務器搭建網站能夠實現高可靠性、高性能以及易拓展性,這種方案更加適合于中小型網站的建設。
參考文獻
[1]凌質億,劉哲星,曹蕾.高并發環境下Apache與Nginx的I/O性能比較[J].計算機系統應用,2013,22(6):204-208.
[2]邢志峰.MySQL主從復制的研究與應用[J].電子技術與軟件工程,2017(15):188.
[3]李緒成,劉鑫.大型網站應用架構對比研究[J].軟件工程,2017,20(11):30-32.
[4]楊美珍.基于PHP的多服務器共享SESSION的方法[J].信息通信,2013(6):108-109.
作者:梁劍 石巖嶺 單位:太原工業學院計算機工程系