畢艷茹++王志勃++王麒森
摘要:隨著互聯(lián)網、物聯(lián)網和移動通信技術的發(fā)展,越來越多的智能終端設備接入到互聯(lián)網應用平臺,如智慧農業(yè)生產監(jiān)控系統(tǒng)、新能源汽車運營監(jiān)控系統(tǒng)等應用,如何解決大用戶量高并發(fā)訪問問題成為各類系統(tǒng)急需解決的關鍵問題,該文將結合實際應用從服務器集群架構和單體服務器多線程處理兩個層面分析提出設計方案。
關鍵詞:高并發(fā);服務器集群;多線程
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)30-0059-02
1 高并發(fā)下負載均衡與服務器集群架構設計
為解決應用平臺大流量、高并發(fā)問題,在網絡架構設計上使用服務器集群模式實現(xiàn)分布式處理。這就需要在服務器集群之前增加負載均衡設備,實現(xiàn)流量分發(fā)。負載均衡是將客戶端訪問請求分發(fā)到服務器集群中不同計算單元上執(zhí)行的過程,是從網絡架構層面上解決大流量、高并發(fā)業(yè)務的有效計方案。本文中的負載均衡采用LVS(LVS,Linux Virtual Server)三層架構設計模型,使用IP負載均衡和基于內容請求分發(fā)技術,將客戶端請求均衡地分配到服務器集群的不同個體上執(zhí)行。這種模式下能夠實現(xiàn)吞吐率高,且能自動屏蔽掉故障服務器,從而形成一個高性能、高可用的虛擬服務器,整個服務器集群對客戶是透明。
在LVS負載均衡三層模型中,主要包括負載均衡器、服務器池和共享存儲三層。其中負載均衡器是整個集群對外的前端機,承擔將客戶發(fā)送請求按照一定策略分發(fā)到一組服務器上執(zhí)行,而對于客戶端只暴露一個IP地址;服務器池由一組真正執(zhí)行客戶端請求的服務器組成,服務器可由物理服務器或云端虛擬化服務器構成,根據(jù)業(yè)務吞吐量可彈性增減;共享存儲為服務器池提供共享存儲區(qū),保證平臺數(shù)據(jù)的一致性,具體設計架構如圖1所示。
在LVS負載均衡三層模型中,根據(jù)內部網絡構成和請求分配策略,又可以形成三種不同的實現(xiàn)方式,分別是VS/NAT(Virtual Server via Network Address Translation)、VS/TUN(Virtual Server via IP Tunneling)和VS/DR(Virtual Server via Direct Routing)三種方式。
1) VS/NAT方式:VS/NAT方式中將服務器集群中每臺服務器網關指向均衡器即可,客戶端可以是任意操作系統(tǒng)。VS/NAT方式一個均衡器能夠帶動的真實服務器有限。
2) VS/TUN方式:均衡器根據(jù)服務器池中服務器負載情況,動態(tài)地選擇一臺服務器,將請求報文封裝在另一個IP報文中,再將封裝后的IP報文轉發(fā)給選出的服務器。服務器收到報文后,將報文解封獲得原來目標地址為 VIP 的報文,服務器發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然后根據(jù)路由表將響應報文直接返回給客戶。
3) VS/DR方式:通過改寫請求報文中的MAC地址部分來實現(xiàn)任務分配。負載均衡器和服務器池中的服務器必須在物理上有一個網卡通過局域網相連。 服務器上綁定VIP配置在各自Non-ARP的網絡設備上,負載均衡器的VIP地址對外可見,而真實服務器的VIP對外是不可見的。
2 單臺服務器多線程池的設計與第三方框架選擇
在負載均衡器網絡構架下的每臺單體服務器在接受TCP/IP請求時,也要配置高效管理策略,實現(xiàn)高并發(fā)吞吐處理。為提高單臺服務器的處理能力,可采用二層設計模式。第一層由接收用戶線程組成,負責接收網絡負載均衡器分發(fā)的請求;第二層由工作線程組成,負責處理數(shù)據(jù)。每個工作線程使用消息隊列存儲請求數(shù)據(jù),這樣可以減少數(shù)據(jù)的復制和IO操作。采用兩層設計策略能有效避免接收線程之間出現(xiàn)競爭現(xiàn)象,每個接收線程對應一個接收隊列,每個接收線程將接收到的數(shù)據(jù)只放在自己對應的隊列中,具體設計模型如圖2所示。
2.1 epoll框架
epoll是Linux環(huán)境下多路復用I/O接口框架,支持打開大數(shù)目socket描述符,I/O效率不隨FD數(shù)目增加而線性下降。它使用一個就緒設備隊列,每次只輪詢該隊列的數(shù)據(jù),然后進行處理。epoll通過在Linux內核中申請一個簡易的文件系統(tǒng),通過下面三種調用完成對請求的處理。調用epoll_create()建立一個epoll對象;調用epoll_ctl()向epoll對象中添加套接字;調用epoll_wait()收集發(fā)生事件連接。單線程epoll的觸發(fā)量可達到15000個,隨著業(yè)務量的增加,可使用多線程來提速和增容。
2.2 MINA框架
MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 組織一個較新的項目,它為開發(fā)高性能和高可用性的網絡應用程序提供了非常便利的框架。當前發(fā)行的 MINA 版本支持基于 Java NIO 技術的 TCP/UDP 應用程序開發(fā)、串口通訊程序,MINA 所支持的功能也在進一步的擴展中。MINA很好地把業(yè)務代碼和底層的通信隔離了開來,僅僅需要建立好監(jiān)聽,然后寫上需要實現(xiàn)的業(yè)務邏輯就可以完成服務端的開發(fā),具體操作分為四個步驟。IoService()在一個線程上建立套接字,監(jiān)聽是否有連接被建立;IoProcessor()在另一個線程上檢查是否有數(shù)據(jù)在通道上讀寫;IoFilter()定義一組攔截器實現(xiàn)輔助處理;IoHandler()負責編寫業(yè)務邏輯。
3 結束語
本文是在完成淮安市級科研項目(項目名稱:基于“互聯(lián)網+” 的智慧農業(yè)綜合信息服務解決方案,項目編號:HAN2015035)和自然科學軟課題項目(項目名稱:基于互聯(lián)網大數(shù)據(jù)的淮安智慧農業(yè)解決方案研究)過程中研究成果,作者結合自身項目經驗,在理論層面提出了在互聯(lián)網與物聯(lián)網環(huán)境下高并應用的解決方案,通過簡短論述,在網絡架構和服務器兩個方面實現(xiàn)解決高并發(fā)資源競爭問題。最后給出了兩種常用高并發(fā)框架的介紹和基本使用方法,鑒于篇幅限制,沒有過多闡述技術細節(jié)問題。
參考文獻:
[1] 楊興海.基于IOCP的UDP高并發(fā)量通訊的研究[J/OL].電子技術與軟件工程,2014(12):272.
[2] 蔣文旭.基于Nginx部署環(huán)境的Web加速方案設計與實現(xiàn)[D].北京郵電大學,2013.
[3] 李宇,曾志文,湯明.大型高并發(fā)高負載網站優(yōu)化策略探討[J].希望月報(上半月),2007(11):63.
[4] 陳池梅,戢小龍,秦勃.基于C/S 與B/S 混合模式的通風機遠程監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].計算機與現(xiàn)代化,2012(8):144-147.endprint