李科偉
(寧波廣播電視集團,寧波 315000)
高并發英文名稱為High Concurrency,是指通過合理的設計確保系統可以在同一時間內處理眾多請求,是一種在分布式網絡系統結構設計中重點考慮的因素。與其相關的常用指標有相應時間、吞吐量、并發用戶數以及每秒查詢率QPS等。
響應時間:是指系統在請求時所需相應的時間。比如:系統在處理某個HTTP請求時,需要花費200ms,那么200ms就是響應時間。
吞吐量:是指在單位時間內的請求處理數量。
每秒查詢率QPS:是指每秒相應的請求數。在互聯網領域內,此指標與吞吐量的區別并不明顯。
并發用戶數:是指在同一時間內系統能夠正常運行時所承載的用戶數量。比如:在即時通訊系統中,同時在線數量在某種程度上為并發用戶數。
對于分布式的互聯網結構設計來說,提升系統并發處理能力有多種方式。主要分三個方面:
使用高性能服務器、高效網絡環境等。
使用高效率編程語言、高性能數據庫、優化的程序代碼、優化的查詢語句等。
系統架構層面按照實際訪問位置和作用又可分多個層次。當前常見互聯網分布式架構上解決方案有。
2.3.1 網絡鏈路層
如鏈路均衡設備;CDN加速等。
2.3.2 反向代理層
系統入口,反向代理,應用負載均衡、WEB緩存等。
2.3.3 應用服務層
實現應用服務集群化。
2.3.4 數據緩存層
數據庫緩存加速。
2.3.5 數據庫層
數據庫分布式架構。
常見鏈路均衡設備如radware、F5等,一般部署在最前端可以很好的解決多運營商網絡鏈路的互聯互通問題,大大提高系統響應時間(Response Time),解決網絡鏈路上的瓶頸。
而對于一些沒有自己的服務器和或者網絡帶寬不足等情況下的企業應用,使用各種云加速、CDN加速,是更好的解決方案,部署更簡單。既能解決一些應用的訪問壓力,又能解決網絡鏈路的均衡。
反向代理層的擴展,可以通過“DNS輪詢”實現。“DNS輪詢”技術也是一種負載均衡手段;dns-server對于一個域名配置了多個解析IP,每次DNS解析請求來訪問DNS服務器,會循環詢問并將此些IP返回,從而起到負載均衡效果。“DNS輪詢”一般配合應用集群技術實現。這個設置一般可以在域名服務器中設置。
利用代理服務器能夠將此次請求發送給內部WEB服務器,通過緩存加速模式能夠在很大程度上提升業務訪問速度,減少后端應用承受的壓力。所以可以考慮將此技術用于代理服務器中,使代理服務器能夠將訪問請求均勻的發送給多個內部服務器之中,以此實現負載均衡。
架構反向代理服務器有很多方法,硬件、軟件部署都可以,如nginx、varnish、HAProxy等。下面主要介紹一個免費開源軟件nginx的部署實踐。nginx是一款免費開源的輕量級的WEB服務器或反向代理服務器,具有內存占比少、并發力強的特征,實際上,nginx并發效果與同類型網絡服務器相比確實較強。諸如百度、京東、新浪、網易、騰訊、淘寶等都有不同程度使用nginx服務器。通過修改nginx.conf,配置upstream模塊設置多臺后端WEB服務器從而達到負載均衡效果。配合Ngx_cache_purge模塊使用緩存加速,對于一些不需要實時訪問數據可以采用緩存加速,大大減輕后臺服務器和數據庫的壓力。
根據前一層的反向代理層,原則上能夠部署多個WEB應用服務,若是WEB后端出現瓶頸時,只需多添加一些服務器的數量,部署一些新WEB服務,并在nginx配置中安裝新WEB后端,就可以使應用服務層使用性能擴大。Web服務器是直接影響互聯網業務應用性能的關鍵因素。現階段。市場中有許多種類的WEB服務器,最主流的是Apache,最具代表性的是Nginx,而且這兩種服務器作為WEB服務各有所長,看實際應用場景而部署,本文不做深入探討,但值得一提的是其中的參數設置,需要視實際硬件環境、應用環境、軟件環境而設置以達到最佳性能。
在數據信息較多的狀況下,數據緩存層所涉及到的數據會以水平方式進行擴展,使存儲于某臺服務器中的數據信息,其中部分數據信息會被劃分到多個服務器中,單獨為某個應用所使用,以此加強數據讀寫性能的目的。
數據緩存層應用例如Redis。REmote DIctionary Server(Redis)是一個開源的使用ANSI C語言編寫是一個高性能的key-value數據庫,Redis與大名鼎鼎的memcached緩存服務很像,但是redis支持的數據存儲類型更豐富。將主數據庫中頻繁讀寫的關鍵數據分離出來使用redis做為緩存數據庫就是一個不錯的選擇。在進行數據讀取時,要先在redis中查看,如果沒有查找到再進入主數據庫中查找,并且要將其寫入redis中,同時設置其失效時間。在存儲數據時,要按照實際情況進行分析,可以選擇在同一時間將數據存儲到數據庫與redis中,值得注意的是,在存儲到redis中時,最好設置好失效時間。另外,也可以將數據直接存儲到數據庫中,考慮的問題較少。redis可以自己搭建并不困難,這里不做詳細安裝配置說明。
數據庫層一般可采用數據庫主從復制或主主復制足以應付高并發請求,部署配置也較簡單,例如目前主流數據庫mysql就支持主從復制或主主復制。對于數據吞吐量特大的應用一般可以采用分布式集群技術,例如MySQL cluster。
數據庫層對于本身數據庫的優化也至關重要,很多數據庫訪問奔潰的最大原因是本身數據庫優化沒有做好,如索引的建立,表結構的優化,字段的合理設置等。
見圖1。

圖1
高并發英文名稱為High Concurrency,是指通過合理的設計確保系統可以在同一時間內處理眾多請求,是一種在分布式網絡系統結構設計中重點考慮的因素。關于系統并發處理能力的提升,在方法論中有很多解決方法,單靠提升單機硬件性能、網絡性能總是有極限的,而分布式架構設計最有效的解決方法之一。本人通過在實際工作崗位中的實踐操作得出的一些心得做了一些匯總,也確實能夠解決一些高并發問題。另外應付高并發請求,軟件系統方面也是大有課題研究,如果程序不夠優化,數據查詢不夠優化,再好的系統和架構也無法承受的住壓力。所以穩定高效的互聯網應用既離不開高效、穩定的系統架構,更離不開優質的程序代碼。隨著互聯網、移動互聯網產品的不斷更新、高并發技術解決方案也層出不斷,因本人技術水平有限,也只是在系統架構層面和應用部署層面根據實際工作中的一些實際操作和實踐心得做了一點介紹,拋磚引玉,希望能給從事相關工作的技術同仁帶來一些幫助。