大型服務端系統特徵
一、高併發,大流量算法
須要面對大量用戶億級鏈接,Google日均PV35億,日IP訪問數3億;騰訊QQ最大在線用戶數2.6億。數據庫
二、高可用編程
服務端系統必須維持7*24小時不間隔服務。緩存
海量數據安全
三、用戶維度複雜服務器
大型互聯網站能夠爲全球用戶提供服務能力,終端分佈範圍廣,各個區域網絡環境千奇百怪,各大運營商網絡互通難,中間路由節點複雜微信
四、安全環境惡劣網絡
因爲互聯網自身的開放性,網關係統極易受到攻擊(DDOS、SYN洪水攻擊等),黑客攻擊無時無刻不存在。架構
五、需求迭代頻繁,變動快速併發
這一點是互聯網行業的經典性格。和傳統軟件產品版本發佈頻率不一樣,互聯網產品爲適應市場變化,知足用戶需求,產品發佈頻率極高。通常大型網站每週都有新版本發佈上線,中小型網站變動發佈更頻繁,基本一天能夠發佈好幾回。
六、漸進式發展
幾乎全部大型互聯網網站都是由小網站漸進式發展起來的。Facebook起源於哈佛大學宿舍;Google第一臺服務器部署在斯坦福大學實驗室;阿里巴巴誕生於馬老師的客廳。優秀的互聯網產品都是慢慢運營出來的,不是一開始就開發完成的,這也與網站架構的發展演化過程對應。
大型網站架構演化發展歷程
大型網站的技術挑戰主要來自於龐大的終端用戶,高併發的訪問和海量的數據,任何簡單的業務邏輯一旦須要處理數以PB級的數據和麪對數以億計的用戶,問題複雜度就直線上升。大型網站架構主要解決這類問題。
小型階段的網站架構
大型網站都是由小型網站發展而來,網站架構也是同樣,從小型網站架構逐步演化而來。小型網站在訪問量比較小的時候,一臺服務器足夠,網站架構以下圖所示:
數據處理程序、數據庫、存儲文件等全部資源都放在一臺服務器上。
應用服務和數據服務分離
隨着網站業務的發展,單服務器逐漸沒法知足業務需求:愈來愈多的用戶訪問致使性能愈來愈差,愈來愈多的數據致使存儲空間不足,這時候就須要將應用和數據分離。應用和數據分離後整個網站使用3臺服務器:應用服務器、文件服務器和數據庫服務器。這3臺服務器對硬件資源要求各不相同:
應用服務器須要處理大量業務邏輯,所以須要更快更強大的CPU;數據庫服務器須要快速磁盤檢索和數據緩存,所以須要更快的磁盤和更大的內存;文件服務器須要存儲大量用戶上傳的文件,所以須要更大的磁盤。
這個階段網站架構以下圖所示:
應用和數據分離後,不一樣特性的服務器承擔不一樣的服務角色,網站的併發處理能力和數據存儲空間獲得了極大改善,支持網站業務進一步發展。可是隨着用戶逐漸增多,網站又一次面臨挑戰:數據庫壓力太大致使訪問延遲,進而影響整個網站的性能,用戶體驗受到影響。這時須要對網站架構進一步優化。
使用緩存改善網站性能
網站訪問的特色和現實世界的財富分配同樣遵循二八定律:80%的業務訪問集中在20%的數據上。所以能夠把集中訪問的一小部分數據緩存在內存中,就能夠減小數據庫的訪問壓力,提升整個網站的數據訪問速度,改善數據庫寫入性能。網站使用的緩存能夠分爲兩種:緩存在應用服務器上的本地緩存和緩存在專門的分佈式緩存服務器上的遠程緩存。
注:本地緩存訪問速度更快,可是受應用服務器內存限制,並且會出現競爭內存的現象;遠程分佈式緩存能夠採用集羣部署,部署大內存服務器做爲專門的緩存服務器,理論上不受內存容量限制。
使用緩存後,數據訪問壓力獲得有效緩解,可是單一應用服務器可以處理的請求鏈接有限,在網站訪問高峯期,應用服務器成爲整個網站的瓶頸。
使用應用服務器集羣改善網站的併發處理能力
使用集羣是網站解決高併發、海量數據問題的經常使用手段。當一臺服務器的處理能力、存儲空間不足時,更換性能更強的服務器解決不了根本問題,知足不了業務增加。合適的解決辦法是增長一臺服務器分散原有服務器的訪問及存儲壓力。對網站架構而言,能夠經過持續增長服務器不斷改善系統性能,實現系統的可伸縮性。應用服務器實現集羣是網站可伸縮架構設計中較爲簡單成熟的一種,以下圖所示:
經過負載均衡調度服務器(負載均衡算法網上介紹比較多,這裏不展開),能夠未來自用戶的訪問請求平衡分發到應用服務器上。
數據讀寫分離
網站在使用緩存後,使對大部分數據讀操做訪問均可以不經過數據庫就能完成,可是仍有部分讀操做(緩存擊穿、緩存失效等)和寫操做須要訪問數據庫。在用戶增加到必定程度時,數據庫由於負載壓力太高而成爲網站瓶頸。目前主流數據庫都提供主從熱備功能,經過配置兩臺數據庫主從關係,能夠將一臺數據庫服務器的數據更新同步到另外一臺服務器上。網站利用數據庫這一功能實現數據讀寫分離,從而改善數據庫負載壓力,以下圖所示:
應用服務器寫數據的時候會訪問主數據庫,主數據庫經過主從複製機制將數據更新同步到從數據庫。應用服務器讀數據的時候,就能夠從從數據庫獲取數據。爲便於應用程序訪問讀寫分離後的數據庫,一般在應用服務器側使用專門的數據訪問模塊,使數據庫讀寫分離對應用服務透明。
下集
寫了兩個小時寫不完了,後面更新:反向代理、CDN加速、分佈式服務、查詢技術等,還有緩存擊穿穿透等場景,慢慢更新。
放一下歷史文章方便查看:
本文分享自微信公衆號 - 機械猿(on_ourway)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。