【正文】
服務(wù)器的性能消耗,則動態(tài)頁面還有額外的瓶頸:應(yīng)用服務(wù)器的性能,數(shù)據(jù)庫服務(wù)器的性能。大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第3頁2 系統(tǒng)架構(gòu)設(shè)計(jì) 總體思路為提高網(wǎng)站的高并發(fā)性能,提高開發(fā)效率及運(yùn)營效率,主要按如下幾個思路進(jìn)行規(guī)劃設(shè)計(jì): 負(fù)載均衡1) 四層交換負(fù)載均衡:采用負(fù)載均衡器來實(shí)現(xiàn)硬件級的四層交換負(fù)載均衡,或采用LVS來實(shí)現(xiàn)軟件的四層交換負(fù)載均衡。2) 通過第三方軟件來實(shí)現(xiàn)負(fù)載均衡,同時(shí)實(shí)現(xiàn)頁面請求的緩存。通過Nginx實(shí)現(xiàn)反向代理服務(wù)器集群,同時(shí)搭建squid集群以作為靜態(tài)頁面和圖片的緩存。3) 通過web服務(wù)器的配置來實(shí)現(xiàn)負(fù)載均衡即通過apache或是Nginx 將客戶請求均衡的分給tomcat1,tomcat2....去處理。 WEB應(yīng)用開發(fā)架構(gòu)思路1) 應(yīng)用開發(fā)實(shí)現(xiàn)MVC架構(gòu)三層架構(gòu)進(jìn)行web應(yīng)用開發(fā)2) 頁面盡可能靜態(tài)化以減少動態(tài)數(shù)據(jù)訪問,如果是資訊類的網(wǎng)站可以考慮采用第三方開源的CMS系統(tǒng)來生成靜態(tài)的內(nèi)容頁面。3) 采用Oscache實(shí)現(xiàn)頁面緩存,采用Memcached實(shí)現(xiàn)數(shù)據(jù)緩存4) 采用獨(dú)立的圖片服務(wù)器集群來實(shí)現(xiàn)圖片資源的存儲及WEB請求 數(shù)據(jù)存儲的設(shè)計(jì)思路1) 數(shù)據(jù)庫拆分,把生產(chǎn)數(shù)據(jù)庫和查詢數(shù)據(jù)庫分離,對生產(chǎn)數(shù)據(jù)庫采用RAC實(shí)現(xiàn)數(shù)據(jù)庫的集群。2) 采用高效的網(wǎng)絡(luò)文件共享策略,采用圖片服務(wù)器來實(shí)現(xiàn)頁面的圖大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第4頁片存儲。 不同網(wǎng)絡(luò)用戶訪問考慮1) 通過引入CDN 來解決不同網(wǎng)絡(luò)服務(wù)商的接入速度問題,一般只能解決靜態(tài)頁面的訪問問題。2) 在不同運(yùn)營商機(jī)房部署服務(wù)器,通過鏡像技術(shù)來實(shí)現(xiàn)不同網(wǎng)絡(luò)服務(wù)商的接入速度問題。大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第5頁 總體架構(gòu) 網(wǎng)站的系統(tǒng)分層架構(gòu)T o m a tA p a c h eW E B 服 務(wù) 器架 構(gòu)數(shù) 據(jù) 存 儲文 件共 享T o m a tN g i n x p r o x yS q u i d反 向 代 理 軟 件( 數(shù) 據(jù) 緩 存 )數(shù) 據(jù) 庫生 產(chǎn) 數(shù) 據(jù) 庫 查 詢 數(shù) 據(jù) 庫H D F S負(fù) 載 均 衡 器負(fù) 載 均 衡. . .W E B 服 務(wù)( A p a c h e + t o m c a t負(fù) 載 均 衡 )硬 件 四 層 交 換C o n t r o lM V C應(yīng) 用 架 構(gòu) M o d e l V i e w數(shù) 據(jù) 持 久 層( i b a t i s )應(yīng) 用 級 緩 存頁 面 緩 存( O S C a c h e )S q u i d c a c h e N g i n x c a c h eN F SL V S軟 件 四 層 交 換數(shù) 據(jù) 緩 存( M e m c a c h e d )大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第6頁 網(wǎng)站的物理架構(gòu)I n t e r n e t服 務(wù) 器 2代 理 服 務(wù) 器 集 群( N g i n x )W e b 服 務(wù) 器 集 群 B負(fù) 載 均 衡 器 1. . .服 務(wù) 器 n服 務(wù) 器 2服 務(wù) 器 n服 務(wù) 器 1S q u i d 服 務(wù) 器 集 群服 務(wù) 器 1 服 務(wù) 器 2. . .用 戶 瀏 覽 頁 面服 務(wù) 器 2服 務(wù) 器 1服 務(wù) 器 1 服 務(wù) 器 2W e b 服 務(wù) 器 集 群 A服 務(wù) 器 1 服 務(wù) 器 2圖 片 服 務(wù) 器 集 群服 務(wù) 器 3大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第7頁 網(wǎng)站的開發(fā)架構(gòu)T o m a tA p a c h eW E B 服 務(wù) 器數(shù) 據(jù) 存 儲文 件 存 儲T o m a tH D F S. . .W E B容 器基 于 s t r u t s 的 M V C 框 架M o d e lV i e w持 久 層頁 面 緩 存 ( M e m c a c h e d )通 訊 層S M SM M SW A P P U S H短 信 群發(fā) 器彩 信 群發(fā) 器數(shù) 據(jù) 庫消息中心消 息中 心O R Mi b a t i sD B 連 接 池C 3 p 0H T M L 靜態(tài) 化 模 塊后 臺 支撐 模 塊業(yè) 務(wù) 支 撐模 塊請 求數(shù) 據(jù)生 產(chǎn) 數(shù) 據(jù) 庫( R A C )生 產(chǎn) 數(shù) 據(jù) 庫( R A C )統(tǒng) 計(jì) 支 撐模 塊I / OC o n t r o l業(yè) 務(wù) 層 數(shù) 據(jù) 層J D B C查 詢 數(shù) 據(jù) 庫大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第8頁 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)I n t e r n e t主 防 火 墻主 交 換 機(jī)V R R P備 防 火 墻服 務(wù) 器 2服 務(wù) 器 1服 務(wù) 器 2服 務(wù) 器 n服 務(wù) 器 2服 務(wù) 器 2服 務(wù) 器 1 服 務(wù) 器 1代 理 服 務(wù) 器 集 群( N g i n x )網(wǎng) 站 服 務(wù) 器 集 群生 產(chǎn) D B 服 務(wù) 器 集 群 查 詢 D B 服 務(wù) 器 組光 纖 交 換 機(jī)光 纖 交 換 機(jī)磁 盤 陣 列 柜 磁 盤 陣 列 柜備 交 換 機(jī)負(fù) 載 均 衡 器 1負(fù) 載 均 衡 器 2. . .服 務(wù) 器 n服 務(wù) 器 2服 務(wù) 器 n服 務(wù) 器 1應(yīng) 用 服 務(wù) 器 集 群管 理 終 端服 務(wù) 器 1 服 務(wù) 器 n. . .服 務(wù) 器 2服 務(wù) 器 1 服 務(wù) 器 n圖 片 服 務(wù) 器 集 群備注:1) 采用雙防火墻雙交換機(jī)做網(wǎng)絡(luò)冗余,保障平臺服務(wù)采用雙防火墻通知接通2線路互聯(lián)網(wǎng)接入,設(shè)備之間采用VRRP協(xié)議,在任何一個防火墻、互聯(lián)網(wǎng)發(fā)生故障后均可自動將流量切換到另一端,保證網(wǎng)站的正運(yùn)行,設(shè)備或網(wǎng)絡(luò)恢復(fù)后,自動恢復(fù)。采用雙千兆交換機(jī)分別接在2臺防火墻上,當(dāng)某臺設(shè)備或者網(wǎng)絡(luò)鏈路發(fā)生故障后,好設(shè)備自動接管已壞設(shè)備的工作,不影響網(wǎng)站的整體運(yùn)行,根據(jù)業(yè)務(wù)及真實(shí)服務(wù)器的數(shù)量,交換機(jī)可以隨時(shí)增加。2) 采用硬件設(shè)備負(fù)載均衡器,實(shí)現(xiàn)網(wǎng)絡(luò)流量的負(fù)載均衡使用硬件設(shè)備負(fù)載均衡器,將網(wǎng)絡(luò)流量均衡的分擔(dān)到WEB服務(wù)器集群各節(jié)點(diǎn)服務(wù)器,保障平臺服務(wù)器資源均衡的使用。3) 采用代理服務(wù)器,實(shí)現(xiàn)軟件級的網(wǎng)絡(luò)負(fù)載均衡。4) 數(shù)據(jù)庫服務(wù)器分離成生產(chǎn)數(shù)據(jù)庫集群和查詢數(shù)據(jù)庫集群,實(shí)現(xiàn)生大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第9頁產(chǎn)讀寫與后臺查詢統(tǒng)計(jì)進(jìn)行分離,同時(shí)生產(chǎn)數(shù)據(jù)庫采用rac技術(shù)進(jìn)行 架構(gòu)涉及技術(shù)的詳解 負(fù)載均衡1. 基于DNS的負(fù)載均衡 一個域名綁定多個 IPDNS負(fù)載均衡技術(shù)是最早的負(fù)載均衡解決方案,它是通過DNS 服務(wù)中的隨機(jī)名字解析來實(shí)現(xiàn)的,在DNS服務(wù)器中,可以為多個不同的地址配置同一個名字,而最終查詢這個名字的客戶機(jī)將在解析這個名字時(shí)得到其中的一個地址。因此,對于同一個名字,不同的客戶機(jī)會得到不同的地址,它們也就訪問不同地址上的Web 服務(wù)器,從而達(dá)到負(fù)載均衡的目的。這種技術(shù)的優(yōu)點(diǎn)是,實(shí)現(xiàn)簡單、實(shí)施容易、成本低、適用于大多數(shù)TCP/IP應(yīng)用;但是,其缺點(diǎn)也非常明顯,首先這種方案不是真正意義上的負(fù)載均衡,DNS 服務(wù)器將 Http請求平均地分配到后臺的Web服務(wù)器上,而不考慮每個Web 服務(wù)器當(dāng)前的負(fù)載情況;如果后臺的Web 服務(wù)器的配置和處理能力不同,最慢的 Web服務(wù)器將成為系統(tǒng)的瓶頸,處理能力強(qiáng)的服務(wù)器不能充分發(fā)揮作用;其次未考慮容錯,如果后臺的某臺Web服務(wù)器出現(xiàn)故障,DNS服務(wù)器仍然會把 DNS 請求分配到這臺故障服務(wù)器上,導(dǎo)致不能響應(yīng)客戶端。最后一點(diǎn)是致命的,有可能造成相當(dāng)一部分客戶不能享受Web服務(wù),并且由于DNS緩存的原因,所造成的后果要持續(xù)相當(dāng)長一段時(shí)間( 一般 DNS的刷新周期約為 24小時(shí))。所以在國外最新的建設(shè)中心Web站點(diǎn)方案中,已經(jīng)很少采用這種方案了。2. 通過硬件四層交換實(shí)現(xiàn)負(fù)載均衡在硬件四層交換產(chǎn)品領(lǐng)域,有一些知名的產(chǎn)品可以選擇,比如Alteon、F5等,這些產(chǎn)品很昂貴,但是物有所值,能夠提供非常優(yōu)秀的性大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第10頁能和很靈活的管理能力。Yahoo中國當(dāng)初接近2022臺服務(wù)器使用了三四臺Alteon就搞定了3. 通過軟件四層交換實(shí)現(xiàn)負(fù)載均衡軟件四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual Server,他提供了基于心跳線heartbeat的實(shí)時(shí)災(zāi)難應(yīng)對解決方案,提高系統(tǒng)的魯棒性,同時(shí)可供了靈活的虛擬VIP配置和管理功能,可以同時(shí)滿足多種應(yīng)用需求,這對于分布式的系統(tǒng)來說必不可少。一個典型的使用負(fù)載均衡的策略就是,在軟件或者硬件四層交換的基礎(chǔ)上搭建squid集群,這種思路在很多大型網(wǎng)站包括搜索引擎上被采用,這樣的架構(gòu)低成本、高性能還有很強(qiáng)的擴(kuò)張性。4. 通過反向代理服務(wù)器實(shí)現(xiàn)負(fù)載均衡反向代理服務(wù)器又稱為 WEB 加速服務(wù)器,它位于 WEB 服務(wù)器的前端,充當(dāng)WEB服務(wù)器的內(nèi)容緩存器,反向代理服務(wù)器是針對 WEB 服務(wù)器設(shè)置的,后臺 WEB 服務(wù)器對互聯(lián)網(wǎng)用戶是透明的,用戶只能看到反向代理服務(wù)器的地址,不清楚后臺 WEB 服務(wù)器是如何組織架構(gòu)的。當(dāng)互聯(lián)網(wǎng)用戶請求 WEB 服務(wù)時(shí),DNS 將請求的域名解析為反向代理服務(wù)器的 IP 地址,這樣 URL 請求將被發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器負(fù)責(zé)處理用戶的請求與應(yīng)答、與后臺 WEB 服務(wù)器交互。利用反向代理服務(wù)器減輕了后臺 WEB 服務(wù)器的負(fù)載,提高了訪問速度,同時(shí)避免了因用戶直接與 WEB 服務(wù)器通信帶來的安全隱患。大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第11頁目前有許多反向代理軟件,比較有名的有 Nginx 和 Squid 。Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 站點(diǎn)開發(fā)的,是一個高性能的 HTTP 和反向代理服務(wù)器,也是一個 IMAP/POP3/SMTP 代理服務(wù)器。Squid是由美國政府大力資助的一項(xiàng)研究計(jì)劃,其目的為解決網(wǎng)絡(luò)帶寬不足的問題,支持HTTP,HTTPS,F(xiàn)TP 等多種協(xié)議,是現(xiàn)在 Unix 系統(tǒng)上使用、最多功能也最完整的一套軟體。1) Squid Squid 是一個開源的軟件,利用它的反向代理技術(shù)可以提高網(wǎng)站系統(tǒng)的訪問速度,下面將重點(diǎn)介紹 Squid 反向代理的實(shí)現(xiàn)原理和在提高網(wǎng)站性能方面的應(yīng)用。Squid反向代理服務(wù)器位于本地 WEB 服務(wù)器和 Inter 之間 , 組織架構(gòu)如下圖:大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第12頁客戶端請求訪問 WEB 服務(wù)時(shí),DNS 將訪問的域名解析為 Squid 反向代理服務(wù)器的 IP 地址,這樣客戶端的 URL 請求將被發(fā)送到反向代理服務(wù)器。如果 Squid 反向代理服務(wù)器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端,否則反向代理服務(wù)器將向后臺的 WEB 服務(wù)器請求資源,然后將請求的應(yīng)答返回給客戶端,同時(shí)也將該應(yīng)答緩存在本地,供下一個請求者使用。Squid 反向代理一般只緩存可緩沖的數(shù)據(jù)(比如 html 網(wǎng)頁和圖片等),而一些 CGI 腳本程序或者 ASP、JSP 之類的動態(tài)程序默認(rèn)不緩存。它根據(jù)從 WEB 服務(wù)器返回的 HTTP 頭標(biāo)記來緩沖靜態(tài)頁面, 有四個最重要 HTTP 頭標(biāo)記:? LastModified: 告訴反向代理頁面什么時(shí)間被修改? Expires: 告訴反向代理頁面什么時(shí)間應(yīng)該從緩沖區(qū)中刪除? CacheControl: 告訴反向代理頁面是否應(yīng)該被緩沖? Pragma: 用來包含實(shí)現(xiàn)特定的指令,最常用的是 Pragma:nocache 注:DNS 的輪詢機(jī)制將某一個域名解析為 多個IP地址。2) NginxNginx (“engine x”) 是俄羅斯人Igor Sysoev(塞索耶夫)編寫的一大型網(wǎng)絡(luò)平臺架構(gòu)設(shè)計(jì)方案第13頁款高性能的 HTTP 和反向代理服務(wù)器。Nginx 已經(jīng)在俄羅斯最大的門戶網(wǎng)站 ── Rambler Media上運(yùn)行了4年時(shí)間,同時(shí)俄羅斯超過20%的虛擬主機(jī)平臺采用Nginx作為反向代理服務(wù)器。在國內(nèi),已經(jīng)有新浪博客、新浪播客、搜狐通行證、網(wǎng)易新聞、網(wǎng)易博客、金山逍遙網(wǎng)、金山愛詞霸、校內(nèi)網(wǎng)、YUPOO相冊、豆瓣、迅雷看看等多家網(wǎng)站、頻道使用 Nginx 服務(wù)器。Nginx 特點(diǎn)如下:1) 工作在OSI模型的第 7層(應(yīng)用層)2) 高并發(fā)連接官方測試能夠支撐5萬并發(fā)連接,在實(shí)際生產(chǎn)環(huán)境中跑到2~3萬并發(fā)連接數(shù)。 3) 內(nèi)存消耗少在3萬并發(fā)連接下,開啟的10個Nginx 進(jìn)程才消耗150M內(nèi)存(15M*10=150M)。 4) 配置文件非常簡單風(fēng)格跟程序一樣通俗易懂。 5) 成本低廉Nginx為開源軟件,可以免費(fèi)使用。而購買F5 BIGIP 、NetScaler等硬件負(fù)載均衡交換機(jī)則需要十多萬至幾十萬人民幣。 6) 支持Rewrite重寫規(guī)則能夠根據(jù)域名、URL的不同,將 HTTP 請求分到不同的后端服務(wù)器群組。 7) 內(nèi)置的健康檢查功能如果 Nginx Proxy 后端的某臺 Web 服務(wù)器宕機(jī)了,不會影響前端訪問。 8) 節(jié)省帶寬支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭。 9) 穩(wěn)定性高用于反向代理,宕機(jī)的概率微乎其微。 3) Nginx+squid頁面緩存來實(shí)現(xiàn)反向代理負(fù)載均衡通過Nginx反向代理和squid緩存實(shí)現(xiàn)