【正文】
,響應(yīng)會(huì)急劇變慢,但錯(cuò)包情況并未出現(xiàn)。注:本次測(cè)試所用 jsp頁(yè)面僅 100個(gè)字節(jié)大小,測(cè)試過(guò)程中帶寬壓力可以忽略不計(jì)。 Test1 1860 秒 1490 條/秒 277 萬(wàn) 4 2 500 300萬(wàn) 200毫秒Test2 11863 秒 1482 條/秒 276 萬(wàn) 服務(wù)端從第 1800 秒左右開(kāi)始,TomcatTomcat2 占用內(nèi)存到達(dá) Xmx 指定上限 ,TestTest2 請(qǐng)求速度緩慢下降,但并無(wú)錯(cuò)包,人為終止測(cè)試。Test1 422秒2863條/秒120萬(wàn)3 2 500 200萬(wàn)50 毫秒 Test2 3 413秒2922條/秒120萬(wàn)服務(wù)端從第 400 秒左右開(kāi)始,tomcat 占用內(nèi)存到達(dá) Xmx 指定上限,TestTest2 請(qǐng)求速度急劇下降,開(kāi)始出現(xiàn)大量錯(cuò)包,422 秒以后的錯(cuò)包率超過(guò) %,且仍在在增加中,之前的錯(cuò)包率約為 %,測(cè)試終止。 同上 告訴Nginx保存單個(gè)用的幾個(gè)Buffer 最大用多大空間 proxy_buffers 4 32k。$_user_agent $_x_forwarded_for39。大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第37頁(yè) server_name localhost。 gzip__version 。 large_client_header_buffers 4 32k。worker_rlimit_nofile 51200。因?yàn)閍pache非常消耗內(nèi)存,盡量輕量化。通??稍O(shè)置為30000 毫秒。默認(rèn)值 10。 需要把這個(gè)兩個(gè)參數(shù)值調(diào)大。注 Amazon 就是采用了這種架構(gòu)來(lái)構(gòu) 建的,它擁有上千臺(tái)服務(wù)器。簡(jiǎn)單是 iBATIS 最大的優(yōu)勢(shì)? ibatis使用ibatis的十個(gè)理由1. 至少能操作 10 種以上的數(shù)據(jù)庫(kù)2. 可配置的 caching(包括從屬)3. 支持 DataSource、local transaction managemen 和 global transaction4. 簡(jiǎn)單的 XML 配置文檔5. 支持 Map, Collection, List 和簡(jiǎn)單類型包裝(如 Integer, String)6. 支持 JavaBeans 類(get/set 方法)7. 支持復(fù)雜的對(duì)象映射(如 populating lists, plex object models)8. 對(duì)象模型從不完美(不需要修改)9. 數(shù)據(jù)模型從不完美(不需要修改)10. 你已經(jīng)知道 SQL,為什么還要學(xué)習(xí)其他東西大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第27頁(yè)1) MVC架構(gòu)示意大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第28頁(yè)2) Struts架構(gòu)客戶端發(fā)送一個(gè)HTTP請(qǐng)求,通過(guò)Struts框架最后獲得一個(gè)HTTP響應(yīng),這一過(guò)程非常重要,它是理解Struts框架的重點(diǎn)。它采取了分布式網(wǎng)絡(luò)緩存結(jié)構(gòu)(即國(guó)際上流行的 web cache技術(shù)),其目的是通過(guò)在現(xiàn)有的 Inter中增加一層新的網(wǎng)絡(luò)架構(gòu),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò) 邊緣 ,使用戶可以就近取得所需的內(nèi)容,解決 Inter網(wǎng)絡(luò)擁擠的狀況,提高用戶訪問(wèn)網(wǎng)站的響應(yīng)速度。3. 圖片服務(wù)器分離特別是如果程序與圖片都放在同一個(gè) APAHCE 的服務(wù)器下,每一個(gè)圖片的請(qǐng)求都有可能導(dǎo)致一個(gè) HTTPD 進(jìn)程的調(diào)用。再?gòu)目缙脚_(tái)性上,NFS的基本原則是“容許不同的客戶端及服務(wù)端通過(guò)一組RPCs分享相同的文件系統(tǒng) ”,它是獨(dú)立于操作系統(tǒng)的,容許不同的操作系統(tǒng)共同地進(jìn)行文件的共享。它是針對(duì)Google的計(jì)算機(jī)集群進(jìn)行設(shè)計(jì)的,專門是為Google頁(yè)面搜索的存儲(chǔ)進(jìn)行了優(yōu)化。? 特性1) 硬件要求低2) 高容錯(cuò)性3) 易可擴(kuò)展4) 配置簡(jiǎn)單5) 超大文件HDFS采用master/slave架構(gòu)。盡管概念上很簡(jiǎn)單,但是想要合理、精確地實(shí) 現(xiàn)并不容易,這可能需要大量的代碼工作。同時(shí),HTML靜態(tài)化也是某些緩存策略使用的手段,對(duì)于系統(tǒng)中頻繁使用數(shù)據(jù)庫(kù)查詢但是內(nèi)容更新很小的應(yīng)用,可以考慮使用HTML靜態(tài)化來(lái)實(shí)現(xiàn),比如論壇中論壇的公用設(shè)置信息,這些信息目前的主流論壇都可以進(jìn)行后臺(tái)管理并且存儲(chǔ)再數(shù)據(jù)庫(kù)中,這些信息其實(shí)大量被前臺(tái)程序調(diào)用,但是更新頻率很小,可以考慮將這部分內(nèi)容進(jìn)行后臺(tái)更新的時(shí)候進(jìn)行靜態(tài)化,這樣避免了大量的數(shù)據(jù)庫(kù)訪問(wèn)請(qǐng)求。4) 復(fù)雜一點(diǎn)的group,sum,count查詢,比如積分的分類排名b) 集成在WEB應(yīng)用中的內(nèi)存緩存在web應(yīng)用中對(duì)于熱點(diǎn)的功能,考慮使用完全裝載到內(nèi)存,保證絕對(duì)的響應(yīng)速度,對(duì)于需要頻繁訪問(wèn)的熱點(diǎn)數(shù)據(jù),采用集中緩存(多個(gè)可以采用負(fù)載均衡),減輕數(shù)據(jù)庫(kù)的壓力,比如:很多配置信息,操作員信息等等。 3) 永久緩存:緩存能被配置寫(xiě)入硬盤(pán),因此允許在應(yīng)用服務(wù)器的多次生命周期間緩存創(chuàng)建開(kāi)銷昂貴的數(shù)據(jù)。OSCache 有以下特點(diǎn):緩存任何對(duì)象,你可以不受限制的緩存部分jsp頁(yè)面或HTTP請(qǐng)求,任何java對(duì)象都可以緩存。 memcached_pass :11211。 3) Nginx+squid頁(yè)面緩存來(lái)實(shí)現(xiàn)反向代理負(fù)載均衡通過(guò)Nginx反向代理和squid緩存實(shí)現(xiàn)動(dòng)靜分離的架構(gòu)圖如下所示:大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第14頁(yè)5. Apache +tomcat集群實(shí)現(xiàn)負(fù)載均衡。 3) 內(nèi)存消耗少在3萬(wàn)并發(fā)連接下,開(kāi)啟的10個(gè)Nginx 進(jìn)程才消耗150M內(nèi)存(15M*10=150M)。Squid反向代理服務(wù)器位于本地 WEB 服務(wù)器和 Inter 之間 , 組織架構(gòu)如下圖:大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第12頁(yè)客戶端請(qǐng)求訪問(wèn) WEB 服務(wù)時(shí),DNS 將訪問(wèn)的域名解析為 Squid 反向代理服務(wù)器的 IP 地址,這樣客戶端的 URL 請(qǐng)求將被發(fā)送到反向代理服務(wù)器。一個(gè)典型的使用負(fù)載均衡的策略就是,在軟件或者硬件四層交換的基礎(chǔ)上搭建squid集群,這種思路在很多大型網(wǎng)站包括搜索引擎上被采用,這樣的架構(gòu)低成本、高性能還有很強(qiáng)的擴(kuò)張性。3) 采用代理服務(wù)器,實(shí)現(xiàn)軟件級(jí)的網(wǎng)絡(luò)負(fù)載均衡。 WEB應(yīng)用開(kāi)發(fā)架構(gòu)思路1) 應(yīng)用開(kāi)發(fā)實(shí)現(xiàn)MVC架構(gòu)三層架構(gòu)進(jìn)行web應(yīng)用開(kāi)發(fā)2) 頁(yè)面盡可能靜態(tài)化以減少動(dòng)態(tài)數(shù)據(jù)訪問(wèn),如果是資訊類的網(wǎng)站可以考慮采用第三方開(kāi)源的CMS系統(tǒng)來(lái)生成靜態(tài)的內(nèi)容頁(yè)面。這意味著,對(duì)一個(gè)靜態(tài)HTML文檔發(fā)出訪問(wèn)請(qǐng)求后,服務(wù)器端只是簡(jiǎn)單地將該文檔傳輸?shù)娇蛻舳恕?) 通過(guò)第三方軟件來(lái)實(shí)現(xiàn)負(fù)載均衡,同時(shí)實(shí)現(xiàn)頁(yè)面請(qǐng)求的緩存。大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第5頁(yè) 總體架構(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ù) 存 儲(chǔ)文 件共 享T o m a tN g i n x p r o x yS q u i d反 向 代 理 軟 件( 數(shù) 據(jù) 緩 存 )數(shù) 據(jù) 庫(kù)生 產(chǎn) 數(shù) 據(jù) 庫(kù) 查 詢 數(shù) 據(jù) 庫(kù)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) 用 級(jí) 緩 存頁(yè) 面 緩 存( 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ò)平臺(tái)架構(gòu)設(shè)計(jì)方案第6頁(yè) 網(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. . .用 戶 瀏 覽 頁(yè) 面服 務(wù) 器 2服 務(wù) 器 1服 務(wù) 器 1 服 務(wù) 器 2W e b 服 務(wù) 器 集 群 A服 務(wù) 器 1 服 務(wù) 器 2圖 片 服 務(wù) 器 集 群服 務(wù) 器 3大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第7頁(yè) 網(wǎng)站的開(kāi)發(fā)架構(gòu)T o m a tA p a c h eW E B 服 務(wù) 器數(shù) 據(jù) 存 儲(chǔ)文 件 存 儲(chǔ)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持 久 層頁(yè) 面 緩 存 ( M e m c a c h e d )通 訊 層S M SM M SW A P P U S H短 信 群發(fā) 器彩 信 群發(fā) 器數(shù) 據(jù) 庫(kù)消息中心消 息中 心O R Mi b a t i sD B 連 接 池C 3 p 0H T M L 靜態(tài) 化 模 塊后 臺(tái) 支撐 模 塊業(yè) 務(wù) 支 撐模 塊請(qǐng) 求數(shù) 據(jù)生 產(chǎn) 數(shù) 據(jù) 庫(kù)( R A C )生 產(chǎn) 數(shù) 據(jù) 庫(kù)( R A C )統(tǒng) 計(jì) 支 撐模 塊I / OC o n t r o l業(yè) 務(wù) 層 數(shù) 據(jù) 層J D B C查 詢 數(shù) 據(jù) 庫(kù)大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第8頁(yè) 網(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ī)磁 盤(pán) 陣 列 柜 磁 盤(pán) 陣 列 柜備 交 換 機(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ò)冗余,保障平臺(tái)服務(wù)采用雙防火墻通知接通2線路互聯(lián)網(wǎng)接入,設(shè)備之間采用VRRP協(xié)議,在任何一個(gè)防火墻、互聯(lián)網(wǎng)發(fā)生故障后均可自動(dòng)將流量切換到另一端,保證網(wǎng)站的正運(yùn)行,設(shè)備或網(wǎng)絡(luò)恢復(fù)后,自動(dòng)恢復(fù)。所以在國(guó)外最新的建設(shè)中心Web站點(diǎn)方案中,已經(jīng)很少采用這種方案了。Nginx 是由 Igor Sysoev 為俄羅斯訪問(wèn)量第二的 站點(diǎn)開(kāi)發(fā)的,是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。Nginx 已經(jīng)在俄羅斯最大的門戶網(wǎng)站 ── Rambler Media上運(yùn)行了4年時(shí)間,同時(shí)俄羅斯超過(guò)20%的虛擬主機(jī)平臺(tái)采用Nginx作為反向代理服務(wù)器。 7) 內(nèi)置的健康檢查功能如果 Nginx Proxy 后端的某臺(tái) Web 服務(wù)器宕機(jī)了,不會(huì)影響前端訪問(wèn)。 Date一般是 Squid從后面取頁(yè)面的時(shí)間, LastModified 一般是頁(yè)面生成時(shí)間。在生產(chǎn)應(yīng)用中它常常用作和squid的搭檔, squid對(duì)于帶 ?的鏈接往往無(wú)法阻擋,而 nginx能將其訪問(wèn)攔住,例如: squid上會(huì)被當(dāng)做兩個(gè)鏈接,所以會(huì)造成兩次穿透;而 nginx只會(huì)保存一次,無(wú)論鏈接變成 過(guò) nginx緩存,從而有效地保護(hù)了后端主機(jī)。OSCache是當(dāng)前運(yùn)用最廣的緩存方案,JBoss,Hibernate,Spring等都對(duì)其有支持。Memcached是以Key/Value的形式單個(gè)對(duì)象緩存。我們盡可能使我們的網(wǎng)站上的頁(yè)面采用靜態(tài)頁(yè)面來(lái)實(shí)現(xiàn),這個(gè)最簡(jiǎn)單的方法其實(shí)也是最有效的方法。使用讀/寫(xiě)數(shù)據(jù)庫(kù)分離,隨著系統(tǒng)變得越來(lái)越龐大,特別是當(dāng)它們擁有 很差的SQL時(shí),一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器通常不足以處理負(fù)載。另外,在將所有備份文件從服務(wù)器上轉(zhuǎn)移出來(lái)之前要進(jìn)行壓縮和加密。通過(guò)使用NFS,用戶和程序訪問(wèn)遠(yuǎn)端系統(tǒng)上的文件就像訪問(wèn)本地文件一樣。GFS中文件備份成固定大小的 Trunk分別存儲(chǔ)在不同的 TrunkServer上,每個(gè)Trunk有多份 (比如3)拷貝,也存儲(chǔ)在不同的TrunkServer上。而NFS一般沒(méi)有這么巨大的規(guī)模。然后通過(guò)配置智能DNS解析來(lái)引導(dǎo)不同網(wǎng)絡(luò)的訪問(wèn)用戶到對(duì)應(yīng)的網(wǎng)絡(luò)運(yùn)營(yíng)商的web服務(wù)器。大型網(wǎng)絡(luò)平臺(tái)架構(gòu)設(shè)計(jì)方案第26頁(yè) WEB應(yīng)用開(kāi)發(fā)架構(gòu)設(shè)計(jì)思路1. 基于MVC的三層應(yīng)用開(kāi)發(fā)架構(gòu)應(yīng)用開(kāi)發(fā)實(shí)現(xiàn)MVC三層架構(gòu)進(jìn)行web應(yīng)用開(kāi)發(fā),采用ibatis作為持久層框架,c3p0作為數(shù)據(jù)庫(kù)連接池。這樣就有了越來(lái)越多的應(yīng)用服務(wù)器。因此一般建議堆的最大值設(shè)置為可用內(nèi)存的最大值的 80%。這個(gè)值表示 Tomcat 可創(chuàng)建的最大的線程數(shù)。enableLookups: 是否反查域名,默認(rèn)值為 true。如果要加大并發(fā)連接數(shù),應(yīng)同時(shí)加大這兩個(gè)參數(shù)。worker_processes 4。