一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

網站性能優化 - 數據庫及服務器架構篇

1、Web Server 與 DB Server 分離

小型網站或 B/S 項目,因同時在線人數不多,尚可讓同一臺物理主機,既做 Web Server,又做 DB Server。但此二者皆會占用大量的 CPU、內存、磁盤 I/O,最好讓二者分別用不同的服務器主機來提供服務,以分散壓力、提高負載承受能力。此外,二者若在同一網段,應盡量用內網 Private IP 進行訪問,而不要用 Public IP 或主機名稱。

基本上跑 Web 上的應用程序,不管用什么軟、硬件,同時處理多個用戶的 request,通常都比較消耗 CPU;但對數據庫而言,CPU 就不見得會大量消耗,而是內存和磁盤 I/O 用得比 Web Server 多。因此一般建議 Web Server 用普通的 PC 即可,但要用好一點的 CPU;而 DB Server 就不能草率,應盡量買高級的服務器,并要有 RAID 5 或 6 的磁盤陣列 (硬件的 RAID,性能遠比操作系統或軟件做的 RAID 要好),并有 4 GB 以上的內存。當然如果操作系統、數據庫都用 64 位版本的最好,例如升級到 64 位的 SQL Server 和 64 位的 Windows Server,這樣內存都可配置到 64 GB;不過要記得,太舊的 PC,一些周邊硬件的 driver 可能不支持 64 位的操作系統和軟件。

如果在線人數持續增加,則可增加多臺 Web Server 和 DB Server,用「服務器集群 (cluster)」、「負載均衡 (Load balancing) 集群」、「高可用性集群 High-availability (HA)」、數據庫集群,以實現更大規模的分布式布署。

Deployment Plan(部署規劃):
http://msdn.microsoft.com/zh-cn/library/ms978676.ASPx

Three-Tiered Distribution(三級分布)(硬件、不同主機的物理級分層):
http://msdn.microsoft.com/zh-cn/library/ms978694.ASPx

Three-Layered Services Application(三層服務應用程序)(軟件、代碼上的分層):
http://msdn.microsoft.com/zh-cn/library/ms978689.ASPx

Tiered Distribution(分級分布):
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、負載均衡 (Load Balance)

負載均衡技術發展了多年,有很多專業的服務提供商和產品可選擇,基本上又可分為「軟件」和「硬件」的解決方案:

(1) 硬件:
硬件的解決方案稱作 Layer 4 Switch (第 4 層交換),可將業務流分配到合適的 AP Server 進行處理,知名產品如 Alteon、F5 等。這些硬件產品雖比軟件的解決方案要貴得多,但是物有所值,通常能提供遠比軟件優秀的性能,和方便、易于管理的 UI 界面,供管理人員快速配置。據說 Yahoo 中國當初接近 2000 臺服務器時,只用三臺 Alteon 就搞定了 [1]。

(2) 軟件:
Apache 這一款眾所皆知的 HTTP Server,其雙向 Proxy / Reverse Proxy 功能,亦可達成 HTTP 負載均衡功能,但其效率算不上特別好。而另一款 HAProxy 就是純粹用來處理負載均衡的,且具有簡單的緩存功能。

以操作系統內置的負載均衡功能來講,Unix 如 Sun 的 Solaris 有支持,Linux 上則有常用的 LVS (Linux Virtual Server),而微軟的 Windows Server 2003 / 2008 則有 NLB (NETwork LoadBalance)。

LVS 是利用 ipvsadm 這一個以 IP 為主的負載均衡程序,來達到讓所有 TCP/IP 的通訊協議都可以進行負載均衡。由于它是 Linux Kernel 所支持,因此效率相當好,占用的 CPU  資源相當低,但缺點是 ipvsadm 無法針對 Layer 4 以上的網絡 packet 數據進行分析。

至于 Windows Server 的 NLB,其原理是不論有多少臺服務器,都全部共用一個「集群的 IP」,如下圖 1 的 Active Load balancer,和下圖 2 的 Virtual Server 1 (Web Server),以及 Virtual DB Server,依照負載均衡的類型來做分配 (Active/Active、Active/Standby、...),而用戶在外面只會看到單一個 IP,至于背后有多少臺服務器,用戶并不需要知道 (如同 Cluster 集群和云計算的概念)。


圖 1 分布式用戶 vs 服務器農場 (Web Server farm)



圖 2 紅色箭頭為 Failover 架構 (HA),其功能與 Load Balance 不同

上圖 2 中,有四臺 Real Server (Web Server),以及三臺 Real DB Server,形成 Web 及 DB 的服務器集群 (Cluster)。我們看到最上方的 Virtual Server 1 本身不具備任何的數據服務 (如:.NET 代碼、圖片...等),只有一個功能,就是將用戶的連線 request 請求,重新導向下方的四臺 Real Server。這種利用重新導向 (director) 的方式,將服務負載分布給 Real Server 的方式,就稱作 Load Balance。

現在似乎還沒有一種做法,能自動計算主機的「負載」情形,例如計算 CPU 已使用多少百分比,以決定要把 request 丟向哪一臺 Real Server;現在一般都還是按照輪替 (Round-robin) 的方式,或加上一些權重的設置而已。

若我們在 Server 上設置 Load Balance,且要執行 ASP.NET 程序,就要注意一個問題,就是 Session 的存儲位置是在哪一臺 Web Server 的內存上,以避免發生有用戶表單填寫得比較久,等到他提交時,已經被 Windows Server 的 NLB 將工作階段切換到另一臺 Web Server 主機上了。此時就可考慮將 Session State,改存儲在 SQL Server 里。

至于用軟件做的 Load Balance 其性能如何呢?基本上用軟件做的,性能一定不會是 1 + 1 = 2,但通常能提高 Availability,亦即常聽到的 HA (高可用性集群 High-availability),即 Failover 方式,如上圖 2 的最上方,紅色箭頭左側的 Virtual Server 2,是能夠偵測 Virtual Server 1 宕機或無法提供服務時,自動將自己的 IP address 取代 Virtual Server1。因此 HA 是指提供「不會中斷的服務」,而本帖討論的 Load Balance 是指提供「能承受高度負載的服務」,兩者指的不是同一件事。MIS 人員應視公司的硬件資源、成本和預算,考量是否兩者都要做。


Load-Balanced Cluster(負載平衡群集):
http://msdn.microsoft.com/zh-cn/library/ms978730.ASPx
http://msdn.microsoft.com/en-us/library/ms978730.ASPx

Server Clustering(服務器群集):
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, 與本文無直接關系):
http://msdn.microsoft.com/zh-cn/library/ms730128.ASPx
http://msdn.microsoft.com/en-us/library/ms730128.ASPx

-----------------------------------------------------

 

3、展示和功能的分層

大型網站中,常會為了將來的可擴展性、源代碼維護方便,而將前臺的展示 (HTML、Script),和后臺的商業邏輯、數據庫訪問 (.NET/C#、SQL),切成多層。

根據 Martin FowlerP of EAA 里的說法:Layer 是指「邏輯」上的分層 (logical separation),Tier 是指「物理」上的分層 (physical separation)。若我們的 ASP.NET 站臺,是用「虛擬」的分層 (N-Layer),來切開 UI - BLL - DAL,通常不會有性能上的問題;但若是用「物理」的分層 (N-Tier),亦即如上圖 2 和下圖 3,可能每一臺 AP Server 都負責不同的商業邏輯 (銷售、庫存、物流、制造、會計、...),各自的源代碼都存放在不同的物理主機上,且可各自獨立運作,此時就要考慮到每一臺 AP Server 在彼此協調合作,以及調用 Web Service (XML 的性能不佳)、執行分布式事務上的性能問題。


圖 3 「物理」上的分層,各種商業邏輯可能存在多臺物理主機上

談到「物理」分層上的分布式事務 (Distributed Transaction),微軟的 Enterprise Services、COM+、WCF、WF 用到操作系統上的 MS DTC 來協調事務,由于 MS DTC 和這些應用程序各自處于不同的 Process,在溝通上會遇到序列化、反序列化的動作,還要整合事務中所有的 AppDomain 和不同主機上的資源,無可避免地一定會拖累性能。

Web Applications: N-Tier vs. N-Layer :
http://codebetter.com/blogs/david.hayden/archive/2005/07/23/129745.ASPx

-----------------------------------------------------

 

4、數據大表拆分

對比較大的數據表,或歷史數據比較多的數據表,可根據一定的邏輯進行拆分。若每天的數據量非常大,則可采用按日存放,再用一個「匯總表」來記錄當天的一個匯總值;也可先將比較大的表拆分成多個表,再通過「索引表」進行關聯處理,以避免查詢大表造成的性能問題 [1]。

另也可用「表分區」的方式,將數據存儲在不同的文件上,然后再部署到獨立的物理服務器,以增加 I/O 吞吐,改善讀寫的性能。

此外,在本文的系列作「30 分鐘快快樂樂學 SQL Performance Tuning」曾提過,若一個數據表的字段過多 (與剛才提的記錄量過多不同),應垂直切割成兩個以上的數據表,并可用同名的 Primary Key 一對多連結起來,如:Northwind 的 Orders、Order Details 數據表。以避免在訪問數據時,以「集簇引 (clustered index)」掃描時會加載過多的數據,或修改數據時造成互相鎖定或鎖定過久。

-----------------------------------------------------

 

5、圖片服務器分離

對于 Web Server 來說,用戶對圖片的請求是最消耗系統資源的,因此可視網站的規模和項目的特性,部署獨立的圖片服務器,甚至多臺圖片服務器

-----------------------------------------------------

 

6、讀寫分離

同時對數據庫進行「讀」和「寫」的操作,是非常沒效率的一種訪問方式。比較好的做法,是根據讀、寫的壓力和需求,分別建立兩臺結構完全相同的數據庫服務器,將負責「寫」的那臺服務器的數據,定時復制給負責「讀」的服務器。 

-----------------------------------------------------

 

7、擴容性應對突增流量

大型網站在設計架構的時候,必須考慮到以后的容量擴充 [1]。對于活動類的網站來說,不定時的突增流量是巨大的。在網站主存儲服務器上,采用配置文件形式,指定每一個存儲盤柜上存儲的數據文件的 ID 范圍。當前臺服務器需要讀取一個數據的時候,首先通過詢問主存儲服務器上的接口,獲得該數據所在的盤柜及目錄地址,然后再去該盤柜讀取實際的數據文件。如果需要增加盤柜,則只要修改配置文件即可,前臺程序完全不受影響。

-----------------------------------------------------

 

8、緩存

緩存 (Cache) 是數據庫或對象在內存中的臨時容器,使用緩存可大幅減少數據庫的讀取,改由內存來提供數據。例如我們可以在 Web Server、DB Server 之間增加一層「數據緩存層」,在內存中建立被頻繁請求對象的副本,如此一來,不訪問數據庫也可供給數據。例如,有 100 個用戶請求同一份資料,以前需要查詢數據庫 100 次,現在則只需要 1 次,其余都可從緩存數據中獲得,而且讀取速度、網頁反應速度會大幅提升。

提供緩存的產品有很多種,還可分為用硬件或軟件所做的緩存,如:ASP.NET 內置的緩存功能、第三方廠商的緩存套件、Hibernate 和 NHibernate 里也有 Session 和 SessionFactory 的緩存機制、Oracle 的 cache group 技術,還有我先前在「用 IIS 7、ARR 與 Velocity 建設高性能的大型網站」這篇文章介紹的,微軟官方新一代的分布式緩存技術 Velocity,另外像 Proxy Server (代理服務器) 也可以作為網頁的緩存:

客戶端 <---->  代理服務器  <---->  目的服務器


在 .NET 的類庫中,有提供 CacheDependency 和 AggregateCacheDependency 這兩個類,可用來將 ASP.NET 中緩存的對象 (如:DataSet),和一或多個物理文件 (如:XML 文件) 或數據庫中的表,去建立一種關聯。當其中任一個 XML 文件被修改或移除時,與其關聯的 DataSet 也會一并從內存里移除;當然,也可透過您程序中設定的時間自動移除。

ASP.NET 2.0 以后的緩存,最大的改變在于 CacheDependency 類已經被微軟重新改寫過,我們也可透過自定義類去繼承它后再改寫,以達成以下功能:
• 從 Active Directory 中的請求,讓緩存失效 (緩存被自動移除)
• 從 MSMQ 或 MQSeries 中的請求,讓緩存失效
• 從 Web Service 中的請求,讓緩存失效
• 創建用于 Oracle 的 CacheDependency
• 其他


此外,SQL Server 中還有一種 SqlCacheDependency (緩存相依性),可監聽數據表中的數據是否曾經改變,亦即避免用戶在緩存期間查到的數據是舊的,達到如果數據不變化,用戶就一直從緩存中取得數據;一旦數據有變化,就自動更新緩存中的數據。啟用 SqlCacheDependency 的方式,只要透過 ASPNET_regsql.exe 這個工具,搭配參數輸入命令,就會在 SQL Server 中產生一個新的 ASPNET_SqlCacheTablesForChangeNotification 表,如下圖 4 所示,這張表的的每一條記錄,都代表您要監聽的其中一個表;最右側的 changeId 字段,其值為供系統判斷,用戶對 ASP.NET 中的請求,應由內存中的緩存來提供,抑或要至數據庫重新做查詢。


圖 4 啟用 SqlCacheDependency 后,自動添加用來監聽的表


另外再談到,我在「網站性能越來越差怎么辦?」這篇文章,也有提過下面的內容:

(4) 用程序或軟件做緩存
用程序做緩存,如 ASP.NET 從 1.x 時代,就已內建的 Cache (緩存) 機制;或用一些第三方的輔助軟件、Framework。

(5) 用硬件做快取或緩沖、砸錢加裝 AP Server
他還在原本的網頁服務器,與數據庫服務器的架構中,加入一組應用程序服務器,作為網頁服務器 cache 數據的來源。
改版之后的新網站,搜尋速度提升許多,先前每日的統計數據中,處理速度超過 3 秒的數據超過 50 萬筆;而改版后,每星期超過 3 秒的查詢不到 10 筆。

(6) 用硬件做緩存 (cache)
全盛時期,來自美國 blog 的流量每天達 80 萬次。這個數字其實不高,對程序高手來說是小菜一碟,但筆者是半吊子工程師,知識有限也因此可能程序寫得不好,頻頻被主機供貨商發信警告,要求改善網站系統性能。最后,我決定開發 cache system。cache system 緩存系統上線后,將數據庫讀寫,從每天 80 萬次降低到每天 16 萬次。

回復:
Peter.z.lu      
中間件可以有很多選擇:
Ncache, Coherence, Velocity, MemCache...


另外,還有像是 Memcached、Cacheman 這種分布式緩存的系統。前者可基于 Linux 和 Win32 平臺使用,通過在內存里維護一個巨大的 hash 表,可存儲圖像、視頻、文件及數據庫檢索的結果,并且支持多服務器,可解決 ASP.NET 內置的緩存機制僅適用于單獨的服務器;后者據說是微軟旗下 Popfly 項目組成員 Sriram Krishnan 的作品,將來也有可能成為微軟的正式產品。

-----------------------------------------------------

 

9、分布式系統數據結構 - 以 MySpace 為例

網絡上流傳一篇很火紅的文章「從 MySpace 數據庫看分布式系統數據結構變遷」,內容提到 MySpace 這個大型的社區網站,使用微軟平臺的 Windows Server、SQL Server、ASP.NET 技術,如今每個月的用戶訪問量高達 500 億,且已有 2 億個以上的用戶注冊。以下僅節錄該文的重點:

  • 第一代架構 - 添置更多的 Web 服務器
    在 MySpace 有 50 萬個注冊用戶的時候,網站只用了兩臺 Dell 雙 CPU、4 GB 內存的 Web Server (分散用戶的請求)、一臺 DB Server (所有數據都存儲在這)。
  • 第二代架構 - 增加數據庫服務器
    運行在三臺數據庫服務器上,一臺用于更新數據 (由它復制到其他兩個)、另兩臺用于讀取數據,因為看網頁的人多,而需要寫入的人少。等到用戶數和訪問量增加了,就再加裝硬盤。
    后來數據庫服務器的 I/O 成了瓶頸,就按照垂直分割模式設計,把網站里的不同功能,如:登錄、用戶資料和博客,搬移到不同的數據庫服務器中,以分擔訪問壓力;若要增加新功能,就再投入新的數據庫服務器
    當注冊用戶達到 200 萬后,還從存儲設備與數據庫服務器直接交互的方式,切換到 SAN (存儲區域網絡),一種高帶寬、專門設計的網絡系統,可將大量磁盤存儲設備連接在一起。MySpace 讓數據庫連接到 SAN。但是當用戶增加到 300 萬人后,垂直分割策略也變得難以維持下去,后來架構師后來將主機升級成 34 個 CPU 的昂貴服務器,卻也無法負荷。
  • 第三代架構 - 轉到分布式計算架構
    架構師將 MySpace 移到分布式計算架構,它在物理上分布的眾多服務器,整體必須邏輯上等同于單臺機器。拿數據庫來說,就不能再像過去那樣將應用拆分,再以不同數據庫分別支持,而必須將整個站點看作一個應用。這次,不再按站點功能和應用分割數據庫,MySpace 開始將它的用戶按每 100 萬一組分割,然后將各組的全部數據分別存入獨立的 SQL Server 實例。后來 MySpace 的每臺數據庫服務器實際運行兩個 SQL Server 實例,也就是說每臺服務器會服務大約 200 萬用戶。
  • 第四代架構 - 增加數據緩存層
    當用戶達到 900-1000 萬時,MySpace再次遭遇存儲瓶頸問題,后來引用了新的 SAN 產品,但站點目前的要求,已經超越 SAN 的 I/O 磁盤存儲系統、及其讀寫數據的極限速度。
    當用戶達到 1700 萬時,增加了一個數據緩存層,其位于 Web 服務器和數據庫服務器之間,其唯一職能是在內存中建立被頻繁請求數據對象的副本。以前每一位用戶查詢一個信息,就請求一次數據庫;現在當任一個用戶請求數據庫后,緩存層就會保留一個副本,當其他用戶再訪問時就不需要再請求數據庫了,如此一來,不訪問數據庫也可以供給數據。
  • 第五代架構 - 轉到支持 64 位處理器的操作系統和數據庫軟件
    當用戶數達到 2600 萬時,轉到了還處于 Beta 版、但支持 64 位處理器的 SQL Server 2005。在升級到 64 位的 SQL Server 2005 和 Windows Server 2003 后,MySpace 每臺服務器配備了 32 GB 內存,后來又提升到了 64 GB。


從 MySpace 數據庫看分布式系統數據結構變遷:
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技術網站性能優化 - 數據庫及服務器架構篇,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 91热精品| 美女视频黄频大全免费视频 | 亚洲一区中文字幕在线观看 | 国产一区成人 | 久久国产影视免费精品 | 亚洲精品国产啊女成拍色拍 | 国产精品亚洲片在线花蝴蝶 | 午夜精品视频在线看 | 国产亚洲精品97在线观看 | 国产成人一区 | 亚洲产国偷v产偷v自拍涩爱 | 福利视频欧美 | 四虎影视亚洲精品 | 一区二区三区亚洲 | 人人爰人人人人人鲁 | 日本黄色激情视频 | 国产精品精品视频 | 亚洲爱色 | 成人在色线视频在线观看免费大全 | 91李宗精品72集在线观看 | 亚洲国产一区在线二区三区 | 极品丝袜高跟91极品系列 | 五月婷婷六月爱 | 色播在线视频 | 婷婷色亚洲 | 中文字幕国产视频 | 性做久久久久久久久男女 | 欧美亚洲国产精品 | 中文字幕在线永久在线视频2020 | 亚洲欧美另类久久久精品能播放的 | 毛片美女| 国产激烈床戏无遮挡网站 | 国产午夜视频在线 | 一区二区三区美女视频 | 伊人狼人综合网 | 国内精品视频在线播放 | 91国内精品线免费播放 | 国产在线观看福利 | 九九久久国产精品免费热6 九九久久精品 | 97人人做人人爱 | 国产精品亚洲专一区二区三区 |