大型網(wǎng)站核心架構(gòu)要素
深圳網(wǎng)站建設關(guān)于什么是架構(gòu),一種比較通俗的說法是“最高層次的規(guī)劃,難以改變的決定”,這些規(guī)劃和決定奠定了事物未來發(fā)展的方向和最終的藍圖。
從這個意義上說,人生規(guī)劃也是一種架構(gòu)。選什么學校、學什么專業(yè)、進什么公司、找什么對象,過什么樣的生活,都是自己人生的架構(gòu)。
具體到軟件架構(gòu),維基百科是這樣定義的:有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用干指導大型軟件系統(tǒng)各個方面的設計”。系統(tǒng)的各個重要組成部分及其關(guān)系構(gòu)成了系統(tǒng)的架構(gòu),這些組成部分可以是具體的功能模塊,也可以是非功能的設計與決策,他們相互關(guān)系組成一個整體,共同構(gòu)成了軟件系統(tǒng)的架構(gòu)。
一般說來,除了當前的系統(tǒng)功能需求外,軟件架構(gòu)還需要關(guān)注性能、可用性、伸縮性、擴展性和安全性這5個架構(gòu)要素,架構(gòu)設計過程中需要平衡這5個要索之間的關(guān)系以實現(xiàn)需求和架構(gòu)目標,也可以通過考察這些架構(gòu)要素來衡ft—個軟件架構(gòu)設計的優(yōu)劣,判斷其是否滿足期望。
3.1性能
性能是網(wǎng)站的一個重要指標,除非是沒得選擇(比如只能到WWW.12306.cn這一個網(wǎng)站上買火車票),否則用戶無法忍受一個響應緩慢的網(wǎng)站。一個打開緩慢的網(wǎng)站會導致嚴重的用戶流失,很多時候網(wǎng)站性能問題是網(wǎng)站架構(gòu)升級優(yōu)化的觸發(fā)器??梢哉f性能是網(wǎng)站架構(gòu)設計的一個重要方面,任何軟件架構(gòu)設計方案都必須考慮可能會帶來的性能問題。
也正是因為性能問題幾乎無處不在,所以優(yōu)化網(wǎng)站性能的手段也非常多,從用戶瀏覽器到數(shù)據(jù)庫,影響用戶請求的所有環(huán)節(jié)都可以進行性能優(yōu)化。
在瀏覽器端,可以通過瀏覽器緩存、使用頁面壓縮、合理布局頁面、減少Cookie傳輸?shù)仁侄胃纳菩阅堋?/p>
還可以使用CDN,將網(wǎng)站靜態(tài)內(nèi)容分發(fā)至離用戶最近的網(wǎng)絡服務商機房,使用戶通過最短訪問路徑獲取數(shù)據(jù)??梢栽诰W(wǎng)站機房部署反向代理服務器,緩存熱點文件,加快請求響應速度,減輕應用服務器負載壓力。
在應用服務器端,可以使用服務器本地緩存和分布式緩存,通過緩存在內(nèi)存中的熱點數(shù)據(jù)處理用戶請求,加快請求處理過程,減輕數(shù)據(jù)庫負載壓力。
也可以通過異步操作將用戶請求發(fā)送至消息隊列等待后續(xù)任務處理,而當前請求直接返回響應給用戶。
在網(wǎng)站有很多用戶高并發(fā)請求的情況下,可以將多臺應用服務器組成一個集群共同對外服務,提高整體處理能力,改善性能。
在代碼層面,也可以通過使用多線程、改善內(nèi)存管理等手段優(yōu)化性能。
在數(shù)據(jù)庫服務器端,索引、緩存、SQL優(yōu)化等性能優(yōu)化手段都已經(jīng)比較成熟。而方興未艾的NoSQL數(shù)據(jù)庫通過優(yōu)化數(shù)據(jù)模型、存儲結(jié)構(gòu)、伸縮特性等手段在性能方面的優(yōu)勢也日趨明顯。
衡量網(wǎng)站性能有一系列指標,重要的有響應時間、TPS、系統(tǒng)性能計數(shù)器等,通過測試這些指標以確定系統(tǒng)設計是否達到目標。這些指標也是網(wǎng)站監(jiān)控的重要參數(shù),通過監(jiān)控這些指標可以分析系統(tǒng)瓶頸,預測網(wǎng)站容量,并對異常指標進行報警,保障系統(tǒng)可用
大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析性。
對于網(wǎng)站而言,性能符合預期僅僅是必要條件,因為無法預知網(wǎng)站可能會面臨的訪問壓力,所以必須要考察系統(tǒng)在高并發(fā)訪問情況下,超出負載設計能力的情況下可能會出現(xiàn)的性能問題。網(wǎng)站需要長時間持續(xù)運行,還必須保證系統(tǒng)在持續(xù)運行且訪問壓力不均勻的情況下保持穩(wěn)定的性能特性。
3.2可用性
對于大型網(wǎng)站而言,特別是知名網(wǎng)站,網(wǎng)站宕掉、服務不可用是一個大的事故,輕則影響網(wǎng)站聲譽,電則可能會攤上官司。對于電子商務類網(wǎng)站,網(wǎng)站不可用還意味著損失金錢和用戶。因此幾乎所有網(wǎng)站都承諾7x24可用,但亊實上任何網(wǎng)站都不可能達到完全的7x24 用,總會有一些故障時間,扣除這些故障時間,就是網(wǎng)站的總可用時間,這個時間可以換兌成網(wǎng)站的可用性指標,以此衡M網(wǎng)站的可用性,一些知名大型網(wǎng)站可以做到4個9以上的可用性,也就是可用性超過99.99%。
因為網(wǎng)站使用的服務器硬件通常是普通的商用服務器,這些服務器的設計標本身并不保證高可用,也就是說,很有可能會出現(xiàn)服務器硬件故障,也就是俗稱的服務器宕機。大型網(wǎng)站通常都會有上萬臺服務器,每天都必定會有一些服務器宕機,因此網(wǎng)站高可用架構(gòu)設計的前提是必然會出現(xiàn)服務器宕機,而高可用設計的S標就趄當服務器宕機的時候,服務或者應用依然可用。
網(wǎng)站高可用的主要手段是冗余,應用部署在多臺服務器上同時提供訪問,數(shù)據(jù)存儲在多臺服務器上互相備份,仟何一臺服務器宕機都不會影響應用的整體可用,也不會導致數(shù)據(jù)丟失。
對于應用服務器而言,多臺應用服務器通過負載均衡設備組成-個集群共同對外提供服務,任何一臺服務器宕機,只需把請求切換到其他服務器就可實現(xiàn)應用的高可用,但是一個前提條件是應用服務器上不能保存請求的會話信息。否則服務器宕機,會話丟失,即使將用戶請求轉(zhuǎn)發(fā)到其他服務器上也無法完成業(yè)務處理。
對于存儲服務器,由于其上存儲著數(shù)據(jù),需要對數(shù)據(jù)進行實時備份,當服務器宕機時需要將數(shù)據(jù)訪問轉(zhuǎn)移到可用的服務器上,并進行數(shù)據(jù)恢復以保證繼續(xù)有服務器吉機的時候數(shù)據(jù)依然可用。
除了運行環(huán)境,網(wǎng)站的高可用還需要軟件開發(fā)過程的質(zhì)量保證。通過預發(fā)布驗證、自動化測試、自動化發(fā)布、灰度發(fā)布等手段,減少將故障引入線上環(huán)境的可能,避免故障范圍擴大。
衡量一個系統(tǒng)架構(gòu)設計是否滿足高可用的目標.就是假設系統(tǒng)中任何一臺或者多臺服務器宕機時,以及出現(xiàn)各種不可預期的問題時,系統(tǒng)整體是否依然可用。
3.3伸縮性
大型網(wǎng)站需要面對大《用戶的高并發(fā)訪問和存儲海數(shù)據(jù),不可能只用一臺服務器就處理全部用戶請求,存儲全部數(shù)據(jù)。網(wǎng)站通過集群的方式將多臺服務器組成一個整體共同提供服務。所謂仲縮性是指迎過不斷向集群中加入服務器的手段來緩解不斷上升的用戶并發(fā)訪問壓力和不斷增長的數(shù)據(jù)存儲需求。
衡架構(gòu)伸縮性的主要標準就是是否可以用多臺服務器構(gòu)建糶群,是否容易向集群中添加新的服務器。加入新的服務器后是否可以提供和原來的服務器無差別的服務。集群中可容納的總的服務器數(shù)M是否有限制。
對于應用服務器集群.只要服務器上不保存數(shù)據(jù),所有服務器都是對等的,通過使用合適的負載均衡設備就可以向集群中不斷加入服務器。
對于緩存服務器集群,加入新的服務器可能會導致緩存路由失效,進而導致集群中大部分緩存數(shù)據(jù)都無法訪問。雖然緩存的數(shù)據(jù)可以通過數(shù)據(jù)庫重新加載,但是如果應用已經(jīng)嚴重依賴緩存,可能會導致整個網(wǎng)站崩潰。需要改進緩存路由算法保證緩存數(shù)據(jù)的可訪問性。
關(guān)系數(shù)據(jù)庫雖然支持數(shù)據(jù)復制,主從熱備等機制,但是很難做到大規(guī)模集群的可伸縮性,因此關(guān)系數(shù)據(jù)庫的集群伸縮性方案必須在數(shù)據(jù)庫之外實現(xiàn),通過路巾分區(qū)等手段將部署有多個數(shù)據(jù)庫的服務器組成一個集群。
至于大部分NoSQL數(shù)據(jù)庫產(chǎn)品,由于其先天就是為海¥.數(shù)據(jù)而生,因此其對伸縮性的支持通常都非常好,可以做到在較少運維參與的情況F實現(xiàn)集群規(guī)模的線性伸縮。
3.4擴展性
不同于其他架構(gòu)要尜主要關(guān)注非功能性需求,網(wǎng)站的擴展性架構(gòu)直接關(guān)注網(wǎng)站的功能需求。網(wǎng)站快速發(fā)展,功能不斷擴展,如何設計網(wǎng)站的架構(gòu)使其能夠快速響應需求變化,是網(wǎng)站可擴展架構(gòu)主要的目的。
衡請網(wǎng)站架構(gòu)擴展性好壞的主要標準就是在網(wǎng)站增加新的業(yè)務產(chǎn)品時,是否可以實現(xiàn)對現(xiàn)有產(chǎn)品透明無影響,不需要任何改動或者很少改動既有業(yè)務功能就可以上線新產(chǎn)品。不同產(chǎn)品之間是否很少耦合,一個產(chǎn)品改動對其他產(chǎn)品無影響,其他產(chǎn)品和功能不需要受牽連進行改動。
網(wǎng)站可伸縮架構(gòu)的主要手段是事件驅(qū)動架構(gòu)和分布式服務。
事件驅(qū)動架構(gòu)在網(wǎng)站通常利用消息隊列實現(xiàn),將用戶請求和其他業(yè)務事件構(gòu)造成消息發(fā)布到消息隊列,消息的處理者作為消費者從消息隊列中獲取消息進行處理。通過這種方式將消息產(chǎn)生和消息處理分離開來,可以透明地增加新的消息生產(chǎn)者任務或者新的消息消費者任務。
分布式服務則是將業(yè)務和可復用服務分離開來,通過分布式服務框架調(diào)用。新增產(chǎn)品可以通過調(diào)用可復用的服務實現(xiàn)自身的業(yè)務邏輯,而對現(xiàn)有產(chǎn)品沒有任何影響??蓮陀梅丈壸兏臅r候,也可以通過提供多版本服務對應用實現(xiàn)透明升級,不需要強制應用同步變更。
大型網(wǎng)站為了保持市場地位,還會吸引第三方開發(fā)者,調(diào)用網(wǎng)站服務,使用網(wǎng)站數(shù)據(jù)開發(fā)周邊產(chǎn)品,擴展網(wǎng)站業(yè)務。第三方開發(fā)者使用網(wǎng)站服務的主要途徑是大型網(wǎng)站提供的開放平臺接口。
3.5安全性
互聯(lián)網(wǎng)是開放的,任何人在任何地方都可以訪問網(wǎng)站。網(wǎng)站的安全架構(gòu)就是保護網(wǎng)站不受惡意訪問和攻擊,保護網(wǎng)站的重要數(shù)據(jù)不被竊取。
衡量網(wǎng)站安全架構(gòu)的標準就是針對現(xiàn)存和潛在的各種攻擊與竊密手段,是否有可靠的應對策略。
3.6小結(jié)
性能、可用性、伸縮性、擴展性和安全性是網(wǎng)站架構(gòu)最核心的幾個要素,這幾個問題解決了,大型網(wǎng)站架構(gòu)設計的大部分挑戰(zhàn)也就克服了。因此本書第二篇即按這五個架構(gòu)要素進行組織。
本章既可以看作本書第二篇的前情提要,同時也可以當做第二篇的總結(jié)和歸納,閱讀本章過程中如果有任何困惑都不必糾結(jié),請直接跳過,等讀完全書后可以再回頭重新回顧。