一 網站技術架構設計模式
1.1 分層
如下所示網站基本分層
三層架構邏輯上可以部署在同一台實體機上,但随着網站業務的發展,必須要對已分層的子產品進行分開部署,也就是三層結構分别部署在不同的伺服器上。使網站擁有越來越多的計算資源以應對越來越多的使用者通路。
1.2 分割
網站越大,功能越複雜,服務與資料處理的種類也越來越多,将這些不同的功能與服務分割開來,包裝成高内聚,低耦合的子產品單元。一方面有助于軟體的開發與維護。另一方面便于不同子產品分布式部署,提高網站的并發能力與功能處理能力。
例如一個大型網站将購物,論壇,搜尋,廣告分割成不同的應用。由獨立的團隊負責部署在不同的機器上。
1.3 分布式
1.3.1優點
使用更多的計算機完成同樣的工作,計算機越多,CPU,記憶體,存儲資源也就越多,能夠處理的并發通路量就越大,進而能夠為更多的使用者提供服務。
1.3.2缺點
(1)分布式意味着服務調用要通過網絡,可能對性能造成嚴重的影響。
(2)伺服器增多,當機的可能性也就機率也就增大了,一個伺服器不可用,很有可能導緻多個伺服器不可用,使得網站可用性降低。
(3)分布式資料一緻性難以得到保證,分布式事務難以控制,分布式部署增加管理的成本。
1.3.3分布式種類
1.3.3.1 分布式應用與服務
将分層與分割後的業務子產品獨立部署,可以提供高并發,實作子產品的複用
1.3.3.2 分布式靜态資源
網站的靜态資源如JS,CSS,Logo圖檔等獨立部署,并采用獨立的域名,即我們常說的網站的動靜分離。可以減輕伺服器壓力,提高并發加載的速度。并且由前端團隊來維護達到一個比較好的分工。
1.3.3.3 分布式資料與存儲
大型網站要處理以P為機關的海量資料,單台機器就算進行了磁盤擴容的情況下也存儲不了那麼多大的容量的時候就采用分布式存儲,除了對傳統資料庫進行分布式部署外,還要對nosql資料庫進行分布式部署。
1.3.3.4 分布式計算
像搜尋引擎的建構,資料倉庫的資料分析統計,這些計算規模非常的龐大,目前很多企業都使用hadoop與mapreduce分布式計算架構來處理此類計算,目的是不移動資料,将計算程式分發到資料的位置加速計算能力。
1.3.3.5分布式協同
1.3.3.6 分布式檔案系統
1.3.3.7 分布式任務排程
1.4 叢集
由于使用者通路的集中,還需要将獨立的伺服器,叢集化,多台伺服器部署相同的應用構成一個叢集,通過負載均衡政策對外提供服務。當其中一台機器發生故障,則負載均衡機制,将失效轉移到叢集中的其他伺服器上,提高可用性。
1.5 緩存
1.5.1 CDN
使用者的請求總是先到達,他的網絡服務商哪裡,在這裡緩存一些網站的靜态資源,可以以最大的速度傳回給客戶,如視訊或着門戶網站會将通路量大的熱點内容緩存到CDN。
1.5.2 反向代理
使用者請求到達資料中心的時候,最先通路的就是反向代理伺服器,這裡緩存網站的靜态資源,無需将請求繼續轉發給應用伺服器,就能傳回給客戶。
1.5.3 本地緩存
在應用伺服器本地緩存的熱點資料,應用程式可以在本機記憶體中直接通路資料,而無須通路資料庫。
1.5.4 分布式緩存
大型網站的資料量非常龐大,即使隻緩存一小部分,需要的記憶體空間也不是單機能承受的,是以除了本地緩存,還需要分布式緩存。将資料緩存在一個裝門的分布式緩存叢集中。
1.6 異步
業務之間的消息傳遞不是同步調用的,而是将一個業務拆分成多個階段,每個階段之間通過共享資料的方式,異步執行進行協作。單獨部署的時候,多線程共享記憶體的異步隊列來實作異步,分布式部署的時候通過分布式消息隊列來實作異步,可以看做記憶體隊列的分布式部署。使用異步消息隊列可以提高系統可用性,當消費者故障,生産者可以繼續進行生産,資料可以堆積在消息隊列中,等消費者恢複故障以後再回來對消息隊列進行消費。将資料寫入消息隊列就可以直接響應給使用者請求,減少響應延遲。消除并發通路高峰,通路的高峰期,可以把突然增加的通路資料放到消息隊列中,等消費者依次去處理。
1.7 備援
為保證伺服器的高可用,負載再小的伺服器也至少要部署兩台構成一個叢集。為保證資料庫的高可用,也一樣,要進行讀寫分離,提高通路效率。
1.8 自動化
1.8.1 自動化監控
1.8.2 自動化報警
1.8.3 自動化失效轉移
1.8.4 自動化失效恢複
1.8.5 自動化服務降級
1.8.6 自動化配置設定資源