|
1、Web Server 與 DB Server 分離
小型網(wǎng)站或 B/S 項(xiàng)目,因同時(shí)在線人數(shù)不多,尚可讓同一臺(tái)物理主機(jī),既做 Web Server,又做 DB Server。但此二者皆會(huì)占用大量的 CPU、內(nèi)存、磁盤(pán) I/O,最好讓二者分別用不同的服務(wù)器主機(jī)來(lái)提供服務(wù),以分散壓力、提高負(fù)載承受能力。此外,二者若在同一網(wǎng)段,應(yīng)盡量用內(nèi)網(wǎng) Private IP 進(jìn)行訪問(wèn),而不要用 Public IP 或主機(jī)名稱(chēng)。
基本上跑 Web 上的應(yīng)用程序,不管用什么軟、硬件,同時(shí)處理多個(gè)用戶(hù)的 request,通常都比較消耗 CPU;但對(duì)數(shù)據(jù)庫(kù)而言,CPU 就不見(jiàn)得會(huì)大量消耗,而是內(nèi)存和磁盤(pán) I/O 用得比 Web Server 多。因此一般建議 Web Server 用普通的 PC 即可,但要用好一點(diǎn)的 CPU;而 DB Server 就不能草率,應(yīng)盡量買(mǎi)高級(jí)的服務(wù)器,并要有 RAID 5 或 6 的磁盤(pán)陣列 (硬件的 RAID,性能遠(yuǎn)比操作系統(tǒng)或軟件做的 RAID 要好),并有 4 GB 以上的內(nèi)存。當(dāng)然如果操作系統(tǒng)、數(shù)據(jù)庫(kù)都用 64 位版本的最好,例如升級(jí)到 64 位的 SQL Server 和 64 位的 Windows Server,這樣內(nèi)存都可配置到 64 GB;不過(guò)要記得,太舊的 PC,一些周邊硬件的 driver 可能不支持 64 位的操作系統(tǒng)和軟件。
如果在線人數(shù)持續(xù)增加,則可增加多臺(tái) Web Server 和 DB Server,用「服務(wù)器集群 (cluster)」、「負(fù)載均衡 (Load balancing) 集群」、「高可用性集群 High-availability (HA)」、數(shù)據(jù)庫(kù)集群,以實(shí)現(xiàn)更大規(guī)模的分布式布署。
Deployment Plan(部署規(guī)劃):
http://msdn.microsoft.com/zh-cn/library/ms978676.ASPx
Three-Tiered Distribution(三級(jí)分布)(硬件、不同主機(jī)的物理級(jí)分層):
http://msdn.microsoft.com/zh-cn/library/ms978694.ASPx
Three-Layered Services Application(三層服務(wù)應(yīng)用程序)(軟件、代碼上的分層):
http://msdn.microsoft.com/zh-cn/library/ms978689.ASPx
Tiered Distribution(分級(jí)分布):
http://msdn.microsoft.com/en-gb/library/ms978701(zh-cn).ASPx
Deployment Patterns:
http://msdn.microsoft.com/zh-cn/library/ms998478.ASPx
http://msdn.microsoft.com/en-us/library/ms998478.ASPx
-----------------------------------------------------
2、負(fù)載均衡 (Load Balance)
負(fù)載均衡技術(shù)發(fā)展了多年,有很多專(zhuān)業(yè)的服務(wù)提供商和產(chǎn)品可選擇,基本上又可分為「軟件」和「硬件」的解決方案:
(1) 硬件:
硬件的解決方案稱(chēng)作 Layer 4 Switch (第 4 層交換),可將業(yè)務(wù)流分配到合適的 AP Server 進(jìn)行處理,知名產(chǎn)品如 Alteon、F5 等。這些硬件產(chǎn)品雖比軟件的解決方案要貴得多,但是物有所值,通常能提供遠(yuǎn)比軟件優(yōu)秀的性能,和方便、易于管理的 UI 界面,供管理人員快速配置。據(jù)說(shuō) Yahoo 中國(guó)當(dāng)初接近 2000 臺(tái)服務(wù)器時(shí),只用三臺(tái) Alteon 就搞定了 [1]。
(2) 軟件:
Apache 這一款眾所皆知的 HTTP Server,其雙向 Proxy / Reverse Proxy 功能,亦可達(dá)成 HTTP 負(fù)載均衡功能,但其效率算不上特別好。而另一款 HAProxy 就是純粹用來(lái)處理負(fù)載均衡的,且具有簡(jiǎn)單的緩存功能。
以操作系統(tǒng)內(nèi)置的負(fù)載均衡功能來(lái)講,Unix 如 Sun 的 Solaris 有支持,Linux 上則有常用的 LVS (Linux Virtual Server),而微軟的 Windows Server 2003 / 2008 則有 NLB (NETwork LoadBalance)。
LVS 是利用 ipvsadm 這一個(gè)以 IP 為主的負(fù)載均衡程序,來(lái)達(dá)到讓所有 TCP/IP 的通訊協(xié)議都可以進(jìn)行負(fù)載均衡。由于它是 Linux Kernel 所支持,因此效率相當(dāng)好,占用的 CPU 資源相當(dāng)?shù)停秉c(diǎn)是 ipvsadm 無(wú)法針對(duì) Layer 4 以上的網(wǎng)絡(luò) packet 數(shù)據(jù)進(jìn)行分析。
至于 Windows Server 的 NLB,其原理是不論有多少臺(tái)服務(wù)器,都全部共用一個(gè)「集群的 IP」,如下圖 1 的 Active Load balancer,和下圖 2 的 Virtual Server 1 (Web Server),以及 Virtual DB Server,依照負(fù)載均衡的類(lèi)型來(lái)做分配 (Active/Active、Active/Standby、...),而用戶(hù)在外面只會(huì)看到單一個(gè) IP,至于背后有多少臺(tái)服務(wù)器,用戶(hù)并不需要知道 (如同 Cluster 集群和云計(jì)算的概念)。
圖 1 分布式用戶(hù) vs 服務(wù)器農(nóng)場(chǎng) (Web Server farm)
圖 2 紅色箭頭為 Failover 架構(gòu) (HA),其功能與 Load Balance 不同
上圖 2 中,有四臺(tái) Real Server (Web Server),以及三臺(tái) Real DB Server,形成 Web 及 DB 的服務(wù)器集群 (Cluster)。我們看到最上方的 Virtual Server 1 本身不具備任何的數(shù)據(jù)服務(wù) (如:.NET 代碼、圖片...等),只有一個(gè)功能,就是將用戶(hù)的連線 request 請(qǐng)求,重新導(dǎo)向下方的四臺(tái) Real Server。這種利用重新導(dǎo)向 (director) 的方式,將服務(wù)負(fù)載分布給 Real Server 的方式,就稱(chēng)作 Load Balance。
現(xiàn)在似乎還沒(méi)有一種做法,能自動(dòng)計(jì)算主機(jī)的「負(fù)載」情形,例如計(jì)算 CPU 已使用多少百分比,以決定要把 request 丟向哪一臺(tái) Real Server;現(xiàn)在一般都還是按照輪替 (Round-robin) 的方式,或加上一些權(quán)重的設(shè)置而已。
若我們?cè)?Server 上設(shè)置 Load Balance,且要執(zhí)行 ASP.NET 程序,就要注意一個(gè)問(wèn)題,就是 Session 的存儲(chǔ)位置是在哪一臺(tái) Web Server 的內(nèi)存上,以避免發(fā)生有用戶(hù)表單填寫(xiě)得比較久,等到他提交時(shí),已經(jīng)被 Windows Server 的 NLB 將工作階段切換到另一臺(tái) Web Server 主機(jī)上了。此時(shí)就可考慮將 Session State,改存儲(chǔ)在 SQL Server 里。
至于用軟件做的 Load Balance 其性能如何呢?基本上用軟件做的,性能一定不會(huì)是 1 + 1 = 2,但通常能提高 Availability,亦即常聽(tīng)到的 HA (高可用性集群 High-availability),即 Failover 方式,如上圖 2 的最上方,紅色箭頭左側(cè)的 Virtual Server 2,是能夠偵測(cè) Virtual Server 1 宕機(jī)或無(wú)法提供服務(wù)時(shí),自動(dòng)將自己的 IP address 取代 Virtual Server1。因此 HA 是指提供「不會(huì)中斷的服務(wù)」,而本帖討論的 Load Balance 是指提供「能承受高度負(fù)載的服務(wù)」,兩者指的不是同一件事。MIS 人員應(yīng)視公司的硬件資源、成本和預(yù)算,考量是否兩者都要做。
Load-Balanced Cluster(負(fù)載平衡群集):
http://msdn.microsoft.com/zh-cn/library/ms978730.ASPx
http://msdn.microsoft.com/en-us/library/ms978730.ASPx
Server Clustering(服務(wù)器群集):
http://msdn.microsoft.com/en-gb/library/ms998414(zh-cn).ASPx
Installing NETwork Load Balancing (NLB) on Windows Server 2008:
http://blogs.msdn.com/clustering/archive/2008/01/08/7024154.ASPx
Linux load balancing support & consulting:
http://www.NETdigix.com/linux-loadbalancing.php
Load Balancing (WCF, 與本文無(wú)直接關(guān)系):
http://msdn.microsoft.com/zh-cn/library/ms730128.ASPx
http://msdn.microsoft.com/en-us/library/ms730128.ASPx
-----------------------------------------------------
3、展示和功能的分層
大型網(wǎng)站中,常會(huì)為了將來(lái)的可擴(kuò)展性、源代碼維護(hù)方便,而將前臺(tái)的展示 (HTML、Script),和后臺(tái)的商業(yè)邏輯、數(shù)據(jù)庫(kù)訪問(wèn) (.NET/C#、SQL),切成多層。
根據(jù) Martin Fowler 在 P of EAA 里的說(shuō)法:Layer 是指「邏輯」上的分層 (logical separation),Tier 是指「物理」上的分層 (physical separation)。若我們的 ASP.NET 站臺(tái),是用「虛擬」的分層 (N-Layer),來(lái)切開(kāi) UI - BLL - DAL,通常不會(huì)有性能上的問(wèn)題;但若是用「物理」的分層 (N-Tier),亦即如上圖 2 和下圖 3,可能每一臺(tái) AP Server 都負(fù)責(zé)不同的商業(yè)邏輯 (銷(xiāo)售、庫(kù)存、物流、制造、會(huì)計(jì)、...),各自的源代碼都存放在不同的物理主機(jī)上,且可各自獨(dú)立運(yùn)作,此時(shí)就要考慮到每一臺(tái) AP Server 在彼此協(xié)調(diào)合作,以及調(diào)用 Web Service (XML 的性能不佳)、執(zhí)行分布式事務(wù)上的性能問(wèn)題。
圖 3 「物理」上的分層,各種商業(yè)邏輯可能存在多臺(tái)物理主機(jī)上
談到「物理」分層上的分布式事務(wù) (Distributed Transaction),微軟的 Enterprise Services、COM+、WCF、WF 用到操作系統(tǒng)上的 MS DTC 來(lái)協(xié)調(diào)事務(wù),由于 MS DTC 和這些應(yīng)用程序各自處于不同的 Process,在溝通上會(huì)遇到序列化、反序列化的動(dòng)作,還要整合事務(wù)中所有的 AppDomain 和不同主機(jī)上的資源,無(wú)可避免地一定會(huì)拖累性能。
Web Applications: N-Tier vs. N-Layer :
http://codebetter.com/blogs/david.hayden/archive/2005/07/23/129745.ASPx
-----------------------------------------------------
4、數(shù)據(jù)大表拆分
對(duì)比較大的數(shù)據(jù)表,或歷史數(shù)據(jù)比較多的數(shù)據(jù)表,可根據(jù)一定的邏輯進(jìn)行拆分。若每天的數(shù)據(jù)量非常大,則可采用按日存放,再用一個(gè)「匯總表」來(lái)記錄當(dāng)天的一個(gè)匯總值;也可先將比較大的表拆分成多個(gè)表,再通過(guò)「索引表」進(jìn)行關(guān)聯(lián)處理,以避免查詢(xún)大表造成的性能問(wèn)題 [1]。
另也可用「表分區(qū)」的方式,將數(shù)據(jù)存儲(chǔ)在不同的文件上,然后再部署到獨(dú)立的物理服務(wù)器,以增加 I/O 吞吐,改善讀寫(xiě)的性能。
此外,在本文的系列作「30 分鐘快快樂(lè)樂(lè)學(xué) SQL Performance Tuning」曾提過(guò),若一個(gè)數(shù)據(jù)表的字段過(guò)多 (與剛才提的記錄量過(guò)多不同),應(yīng)垂直切割成兩個(gè)以上的數(shù)據(jù)表,并可用同名的 Primary Key 一對(duì)多連結(jié)起來(lái),如:Northwind 的 Orders、Order Details 數(shù)據(jù)表。以避免在訪問(wèn)數(shù)據(jù)時(shí),以「集簇引 (clustered index)」掃描時(shí)會(huì)加載過(guò)多的數(shù)據(jù),或修改數(shù)據(jù)時(shí)造成互相鎖定或鎖定過(guò)久。
-----------------------------------------------------
5、圖片服務(wù)器分離
對(duì)于 Web Server 來(lái)說(shuō),用戶(hù)對(duì)圖片的請(qǐng)求是最消耗系統(tǒng)資源的,因此可視網(wǎng)站的規(guī)模和項(xiàng)目的特性,部署獨(dú)立的圖片服務(wù)器,甚至多臺(tái)圖片服務(wù)器。
-----------------------------------------------------
6、讀寫(xiě)分離
同時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行「讀」和「寫(xiě)」的操作,是非常沒(méi)效率的一種訪問(wèn)方式。比較好的做法,是根據(jù)讀、寫(xiě)的壓力和需求,分別建立兩臺(tái)結(jié)構(gòu)完全相同的數(shù)據(jù)庫(kù)服務(wù)器,將負(fù)責(zé)「寫(xiě)」的那臺(tái)服務(wù)器的數(shù)據(jù),定時(shí)復(fù)制給負(fù)責(zé)「讀」的服務(wù)器。
-----------------------------------------------------
7、擴(kuò)容性應(yīng)對(duì)突增流量
大型網(wǎng)站在設(shè)計(jì)架構(gòu)的時(shí)候,必須考慮到以后的容量擴(kuò)充 [1]。對(duì)于活動(dòng)類(lèi)的網(wǎng)站來(lái)說(shuō),不定時(shí)的突增流量是巨大的。在網(wǎng)站主存儲(chǔ)服務(wù)器上,采用配置文件形式,指定每一個(gè)存儲(chǔ)盤(pán)柜上存儲(chǔ)的數(shù)據(jù)文件的 ID 范圍。當(dāng)前臺(tái)服務(wù)器需要讀取一個(gè)數(shù)據(jù)的時(shí)候,首先通過(guò)詢(xún)問(wèn)主存儲(chǔ)服務(wù)器上的接口,獲得該數(shù)據(jù)所在的盤(pán)柜及目錄地址,然后再去該盤(pán)柜讀取實(shí)際的數(shù)據(jù)文件。如果需要增加盤(pán)柜,則只要修改配置文件即可,前臺(tái)程序完全不受影響。
-----------------------------------------------------
8、緩存
緩存 (Cache) 是數(shù)據(jù)庫(kù)或?qū)ο笤趦?nèi)存中的臨時(shí)容器,使用緩存可大幅減少數(shù)據(jù)庫(kù)的讀取,改由內(nèi)存來(lái)提供數(shù)據(jù)。例如我們可以在 Web Server、DB Server 之間增加一層「數(shù)據(jù)緩存層」,在內(nèi)存中建立被頻繁請(qǐng)求對(duì)象的副本,如此一來(lái),不訪問(wèn)數(shù)據(jù)庫(kù)也可供給數(shù)據(jù)。例如,有 100 個(gè)用戶(hù)請(qǐng)求同一份資料,以前需要查詢(xún)數(shù)據(jù)庫(kù) 100 次,現(xiàn)在則只需要 1 次,其余都可從緩存數(shù)據(jù)中獲得,而且讀取速度、網(wǎng)頁(yè)反應(yīng)速度會(huì)大幅提升。
提供緩存的產(chǎn)品有很多種,還可分為用硬件或軟件所做的緩存,如:ASP.NET 內(nèi)置的緩存功能、第三方廠商的緩存套件、Hibernate 和 NHibernate 里也有 Session 和 SessionFactory 的緩存機(jī)制、Oracle 的 cache group 技術(shù),還有我先前在「用 IIS 7、ARR 與 Velocity 建設(shè)高性能的大型網(wǎng)站」這篇文章介紹的,微軟官方新一代的分布式緩存技術(shù) Velocity,另外像 Proxy Server (代理服務(wù)器) 也可以作為網(wǎng)頁(yè)的緩存:
客戶(hù)端 <----> 代理服務(wù)器 <----> 目的服務(wù)器
在 .NET 的類(lèi)庫(kù)中,有提供 CacheDependency 和 AggregateCacheDependency 這兩個(gè)類(lèi),可用來(lái)將 ASP.NET 中緩存的對(duì)象 (如:DataSet),和一或多個(gè)物理文件 (如:XML 文件) 或數(shù)據(jù)庫(kù)中的表,去建立一種關(guān)聯(lián)。當(dāng)其中任一個(gè) XML 文件被修改或移除時(shí),與其關(guān)聯(lián)的 DataSet 也會(huì)一并從內(nèi)存里移除;當(dāng)然,也可透過(guò)您程序中設(shè)定的時(shí)間自動(dòng)移除。
ASP.NET 2.0 以后的緩存,最大的改變?cè)谟?CacheDependency 類(lèi)已經(jīng)被微軟重新改寫(xiě)過(guò),我們也可透過(guò)自定義類(lèi)去繼承它后再改寫(xiě),以達(dá)成以下功能:
• 從 Active Directory 中的請(qǐng)求,讓緩存失效 (緩存被自動(dòng)移除)
• 從 MSMQ 或 MQSeries 中的請(qǐng)求,讓緩存失效
• 從 Web Service 中的請(qǐng)求,讓緩存失效
• 創(chuàng)建用于 Oracle 的 CacheDependency
• 其他
此外,SQL Server 中還有一種 SqlCacheDependency (緩存相依性),可監(jiān)聽(tīng)數(shù)據(jù)表中的數(shù)據(jù)是否曾經(jīng)改變,亦即避免用戶(hù)在緩存期間查到的數(shù)據(jù)是舊的,達(dá)到如果數(shù)據(jù)不變化,用戶(hù)就一直從緩存中取得數(shù)據(jù);一旦數(shù)據(jù)有變化,就自動(dòng)更新緩存中的數(shù)據(jù)。啟用 SqlCacheDependency 的方式,只要透過(guò) ASPNET_regsql.exe 這個(gè)工具,搭配參數(shù)輸入命令,就會(huì)在 SQL Server 中產(chǎn)生一個(gè)新的 ASPNET_SqlCacheTablesForChangeNotification 表,如下圖 4 所示,這張表的的每一條記錄,都代表您要監(jiān)聽(tīng)的其中一個(gè)表;最右側(cè)的 changeId 字段,其值為供系統(tǒng)判斷,用戶(hù)對(duì) ASP.NET 中的請(qǐng)求,應(yīng)由內(nèi)存中的緩存來(lái)提供,抑或要至數(shù)據(jù)庫(kù)重新做查詢(xún)。
圖 4 啟用 SqlCacheDependency 后,自動(dòng)添加用來(lái)監(jiān)聽(tīng)的表
另外再談到,我在「網(wǎng)站性能越來(lái)越差怎么辦?」這篇文章,也有提過(guò)下面的內(nèi)容:
(4) 用程序或軟件做緩存
用程序做緩存,如 ASP.NET 從 1.x 時(shí)代,就已內(nèi)建的 Cache (緩存) 機(jī)制;或用一些第三方的輔助軟件、Framework。
(5) 用硬件做快取或緩沖、砸錢(qián)加裝 AP Server
他還在原本的網(wǎng)頁(yè)服務(wù)器,與數(shù)據(jù)庫(kù)服務(wù)器的架構(gòu)中,加入一組應(yīng)用程序服務(wù)器,作為網(wǎng)頁(yè)服務(wù)器 cache 數(shù)據(jù)的來(lái)源。
改版之后的新網(wǎng)站,搜尋速度提升許多,先前每日的統(tǒng)計(jì)數(shù)據(jù)中,處理速度超過(guò) 3 秒的數(shù)據(jù)超過(guò) 50 萬(wàn)筆;而改版后,每星期超過(guò) 3 秒的查詢(xún)不到 10 筆。
(6) 用硬件做緩存 (cache)
全盛時(shí)期,來(lái)自美國(guó) blog 的流量每天達(dá) 80 萬(wàn)次。這個(gè)數(shù)字其實(shí)不高,對(duì)程序高手來(lái)說(shuō)是小菜一碟,但筆者是半吊子工程師,知識(shí)有限也因此可能程序?qū)懙貌缓茫l頻被主機(jī)供貨商發(fā)信警告,要求改善網(wǎng)站系統(tǒng)性能。最后,我決定開(kāi)發(fā) cache system。cache system 緩存系統(tǒng)上線后,將數(shù)據(jù)庫(kù)讀寫(xiě),從每天 80 萬(wàn)次降低到每天 16 萬(wàn)次。
回復(fù):
Peter.z.lu
中間件可以有很多選擇:
Ncache, Coherence, Velocity, MemCache...
另外,還有像是 Memcached、Cacheman 這種分布式緩存的系統(tǒng)。前者可基于 Linux 和 Win32 平臺(tái)使用,通過(guò)在內(nèi)存里維護(hù)一個(gè)巨大的 hash 表,可存儲(chǔ)圖像、視頻、文件及數(shù)據(jù)庫(kù)檢索的結(jié)果,并且支持多服務(wù)器,可解決 ASP.NET 內(nèi)置的緩存機(jī)制僅適用于單獨(dú)的服務(wù)器;后者據(jù)說(shuō)是微軟旗下 Popfly 項(xiàng)目組成員 Sriram Krishnan 的作品,將來(lái)也有可能成為微軟的正式產(chǎn)品。
-----------------------------------------------------
9、分布式系統(tǒng)數(shù)據(jù)結(jié)構(gòu) - 以 MySpace 為例
在網(wǎng)絡(luò)上流傳一篇很火紅的文章「從 MySpace 數(shù)據(jù)庫(kù)看分布式系統(tǒng)數(shù)據(jù)結(jié)構(gòu)變遷」,內(nèi)容提到 MySpace 這個(gè)大型的社區(qū)網(wǎng)站,使用微軟平臺(tái)的 Windows Server、SQL Server、ASP.NET 技術(shù),如今每個(gè)月的用戶(hù)訪問(wèn)量高達(dá) 500 億,且已有 2 億個(gè)以上的用戶(hù)注冊(cè)。以下僅節(jié)錄該文的重點(diǎn):
- 第一代架構(gòu) - 添置更多的 Web 服務(wù)器
在 MySpace 有 50 萬(wàn)個(gè)注冊(cè)用戶(hù)的時(shí)候,網(wǎng)站只用了兩臺(tái) Dell 雙 CPU、4 GB 內(nèi)存的 Web Server (分散用戶(hù)的請(qǐng)求)、一臺(tái) DB Server (所有數(shù)據(jù)都存儲(chǔ)在這)。 - 第二代架構(gòu) - 增加數(shù)據(jù)庫(kù)服務(wù)器
運(yùn)行在三臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上,一臺(tái)用于更新數(shù)據(jù) (由它復(fù)制到其他兩個(gè))、另兩臺(tái)用于讀取數(shù)據(jù),因?yàn)榭淳W(wǎng)頁(yè)的人多,而需要寫(xiě)入的人少。等到用戶(hù)數(shù)和訪問(wèn)量增加了,就再加裝硬盤(pán)。
后來(lái)數(shù)據(jù)庫(kù)服務(wù)器的 I/O 成了瓶頸,就按照垂直分割模式設(shè)計(jì),把網(wǎng)站里的不同功能,如:登錄、用戶(hù)資料和博客,搬移到不同的數(shù)據(jù)庫(kù)服務(wù)器中,以分擔(dān)訪問(wèn)壓力;若要增加新功能,就再投入新的數(shù)據(jù)庫(kù)服務(wù)器。
當(dāng)注冊(cè)用戶(hù)達(dá)到 200 萬(wàn)后,還從存儲(chǔ)設(shè)備與數(shù)據(jù)庫(kù)服務(wù)器直接交互的方式,切換到 SAN (存儲(chǔ)區(qū)域網(wǎng)絡(luò)),一種高帶寬、專(zhuān)門(mén)設(shè)計(jì)的網(wǎng)絡(luò)系統(tǒng),可將大量磁盤(pán)存儲(chǔ)設(shè)備連接在一起。MySpace 讓數(shù)據(jù)庫(kù)連接到 SAN。但是當(dāng)用戶(hù)增加到 300 萬(wàn)人后,垂直分割策略也變得難以維持下去,后來(lái)架構(gòu)師后來(lái)將主機(jī)升級(jí)成 34 個(gè) CPU 的昂貴服務(wù)器,卻也無(wú)法負(fù)荷。 - 第三代架構(gòu) - 轉(zhuǎn)到分布式計(jì)算架構(gòu)
架構(gòu)師將 MySpace 移到分布式計(jì)算架構(gòu),它在物理上分布的眾多服務(wù)器,整體必須邏輯上等同于單臺(tái)機(jī)器。拿數(shù)據(jù)庫(kù)來(lái)說(shuō),就不能再像過(guò)去那樣將應(yīng)用拆分,再以不同數(shù)據(jù)庫(kù)分別支持,而必須將整個(gè)站點(diǎn)看作一個(gè)應(yīng)用。這次,不再按站點(diǎn)功能和應(yīng)用分割數(shù)據(jù)庫(kù),MySpace 開(kāi)始將它的用戶(hù)按每 100 萬(wàn)一組分割,然后將各組的全部數(shù)據(jù)分別存入獨(dú)立的 SQL Server 實(shí)例。后來(lái) MySpace 的每臺(tái)數(shù)據(jù)庫(kù)服務(wù)器實(shí)際運(yùn)行兩個(gè) SQL Server 實(shí)例,也就是說(shuō)每臺(tái)服務(wù)器會(huì)服務(wù)大約 200 萬(wàn)用戶(hù)。 - 第四代架構(gòu) - 增加數(shù)據(jù)緩存層
當(dāng)用戶(hù)達(dá)到 900-1000 萬(wàn)時(shí),MySpace再次遭遇存儲(chǔ)瓶頸問(wèn)題,后來(lái)引用了新的 SAN 產(chǎn)品,但站點(diǎn)目前的要求,已經(jīng)超越 SAN 的 I/O 磁盤(pán)存儲(chǔ)系統(tǒng)、及其讀寫(xiě)數(shù)據(jù)的極限速度。
當(dāng)用戶(hù)達(dá)到 1700 萬(wàn)時(shí),增加了一個(gè)數(shù)據(jù)緩存層,其位于 Web 服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之間,其唯一職能是在內(nèi)存中建立被頻繁請(qǐng)求數(shù)據(jù)對(duì)象的副本。以前每一位用戶(hù)查詢(xún)一個(gè)信息,就請(qǐng)求一次數(shù)據(jù)庫(kù);現(xiàn)在當(dāng)任一個(gè)用戶(hù)請(qǐng)求數(shù)據(jù)庫(kù)后,緩存層就會(huì)保留一個(gè)副本,當(dāng)其他用戶(hù)再訪問(wèn)時(shí)就不需要再請(qǐng)求數(shù)據(jù)庫(kù)了,如此一來(lái),不訪問(wèn)數(shù)據(jù)庫(kù)也可以供給數(shù)據(jù)。 - 第五代架構(gòu) - 轉(zhuǎn)到支持 64 位處理器的操作系統(tǒng)和數(shù)據(jù)庫(kù)軟件
當(dāng)用戶(hù)數(shù)達(dá)到 2600 萬(wàn)時(shí),轉(zhuǎn)到了還處于 Beta 版、但支持 64 位處理器的 SQL Server 2005。在升級(jí)到 64 位的 SQL Server 2005 和 Windows Server 2003 后,MySpace 每臺(tái)服務(wù)器配備了 32 GB 內(nèi)存,后來(lái)又提升到了 64 GB。
從 MySpace 數(shù)據(jù)庫(kù)看分布式系統(tǒng)數(shù)據(jù)結(jié)構(gòu)變遷:
http://www.cnblogs.com/cxccbv/archive/2009/07/15/1524387.html
http://www.Javaeye.com/topic/152766
http://smb.pconline.com.cn/database/0808/1403100.html
http://idai.blogbus.com/logs/14736411.html
-----------------------------------------------------
NET技術(shù):網(wǎng)站性能優(yōu)化 - 數(shù)據(jù)庫(kù)及服務(wù)器架構(gòu)篇,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。