極客大學架構師訓練營 系統架構 第7課 聽課總結

說明

系統架構演進

講師:李智慧

系統架構概述

互聯網系統面臨怎樣的挑戰?

20年前的系統架構主要是面對大型企業:IBM、SUN、Microsoft、Oracle、沃爾瑪、家樂福、用友、金蝶、聯想等。
最近這10幾年主要是互聯網的系統:Google、AWS、Facebook、阿里巴巴、騰訊等。

互聯網系統面臨挑戰:高併發、大流量

  • Google 日均 PV 數 35 億,日均 IP 訪問數 3 億。
  • 微信在線用戶數10億。
  • 天貓雙十一活動一天交易額 3000 億。

高併發是系統的需求,面臨的問題;高性能、高可用是追求的目標。

高可用

系統 7x24 小時不間斷服務。大型互聯網網站的宕機事件通常會成爲新聞焦點。

服務器升級,要可用。
數據遷移,要可用。
超過服務器接收能力(比如系統設計可接收用戶爲100w,來了1個億用戶),要可用。

海量數據

需要存儲、管理海量數據。

  • Facebook 每週上傳的照片數目接近10億。
  • Google 有近百萬臺服務器爲全球用戶提供服務。
  • 百度收錄的網頁數目有數百億。

用戶分佈廣泛,網絡情況複雜

許多大型互聯網都是爲全球用戶提供服務的,用戶分佈範圍廣,各地網絡情況千差萬別。在國內,有各個運營商網絡互通難的問題。而中美光纜的數次故障,也讓一些對國外用戶依賴較大的網站不得不考慮在海外建立數據中心。

安全環境惡劣

由於互聯網的開放性,使得互聯網網站更容易受到攻擊,大型網站幾乎每天都會遇到黑客攻擊情況。2011年國內多個重要網站泄漏用戶密碼,讓普通用戶也直面一次互聯網安全問題。

需求快速變更,發佈頻繁

和傳統軟件的版本發佈頻率不同,互聯網產品爲快速適應市場,滿足用戶需求,其產品發佈頻率也是極高的。Office 的產品版本以年爲單位發佈,而一般大型網站的產品每週都有新版本發佈上線,至於中小型網站的發佈就更頻繁了,有時候一天會發布幾十次。

漸進式發展

不同於傳統軟件產品或者企業應用系統,一開始就規劃好全部的功能和非功能需求,幾乎所有的大型互聯網網站都是從一個小網站開始,漸進的發展起來的。

  • Facebook 是扎克伯格同學在哈佛大學的宿舍裏開發的;
  • Google 的第一臺服務器部署在斯坦福大學的實驗室裏;
  • 阿里巴巴則是在馬雲家的客廳裏誕生的。

好的互聯網產品都是慢慢運營出來的,不是一開始就開發好的。那些剛建立就投入巨資,有巨大背景的網站,後來發展都很慘淡。

應對高併發挑戰的兩個技術方向

垂直伸縮

在這裏插入圖片描述
通過升級硬件和網絡吞吐能力可以實現垂直伸縮。由於不需要改變應用架構,所以通常被認爲是最簡單的短期伸縮方案。

  • 通過使用 RAID (獨立冗餘磁盤陣列)增加 I/O 吞吐能力。
  • 通過切換到 SSD (固態硬盤)改善 I/O 訪問速度。
  • 通過增加內存減少 I/O 操作。
  • 通過升級網絡接口或者增加網絡接口提升網絡吞吐能力。
  • 更新服務器使用更多處理器或者更多超線程。

垂直伸縮的缺點

  • 達到某個程度後,增加計算能力需要的更多的花費。
  • 垂直伸縮有物理極限。
  • 操作系統的設計或者應用程序自身制約着垂直伸縮最多隻能達到某個點。
  • 在這裏插入圖片描述

水平伸縮

在這裏插入圖片描述
水平伸縮是指通過增加服務器提升計算能力的一類架構方法。

水平伸縮被認爲是伸縮性的聖盃,水平伸縮可以克服垂直伸縮帶來的單位計算成本隨機算能力增加而迅速飆升的問題。

另外,水平伸縮是可以增加更多服務器,這樣,就不會像垂直伸縮那樣遭遇到單臺服務器的極限。

Google 大概有200W臺服務器。
在這裏插入圖片描述

互聯網架構演化

架構演化第0階段:最簡單的互聯網應用架構

在這裏插入圖片描述

最早的Google的服務器,沒有機箱殼,一堆線放在桌子底下。

架構演化第1階段:應用數據分離

在這裏插入圖片描述

架構演化第2階段:使用緩存改善系統性能

在這裏插入圖片描述
絕大多數的操作都是讀操作,比如商品查看,Google搜索解決,所以用緩存可以解決。通過讀寫分離解決。

架構演化第3階段:使用應用服務器集羣改善系統的併發處理能力

在這裏插入圖片描述
增加服務器,增強計算能力,以應對大量用戶訪問的壓力。

架構演化第4階段:數據庫讀寫分離

在這裏插入圖片描述
數據庫是在磁盤中,比CPU、內存慢了1~2個數量級。就算有緩存,緩存也會有失效的時候,所以要把數據庫讀寫分離。寫數據會比較慢,所以把頻繁的讀數據分離出去,可以有多個讀數據庫,做到災備的效果。

架構演化第5階段:使用反向代理和 CDN 加速網站響應

在這裏插入圖片描述
熱門的資源放到就近的CDN服務器裏面,讓用戶快速訪問資源。
反向代理服務器: 代理服務器提供服務。

大量的流量來自圖片、視頻等靜態資源,都放在CDN服務器上。

架構演化第6階段:使用分佈式文件系統和分佈式數據庫系統

在這裏插入圖片描述

如果數據庫主從分離解決不了,技術不成熟之前,永遠不要忘記垂直伸縮,通過硬件提升解決問題。
小型機最終不是銀彈,替代方案是分佈式數據庫。

架構演化第7階段:使用NoSQL 和搜索引擎

在這裏插入圖片描述

架構演化第8階段:業務拆分

在這裏插入圖片描述
比如淘寶業務拆分子系統:首頁、商品列表、商品詳情、搜索、購物車、訂單、支付、算法、推薦等等。
通過消息隊列同步,比如用戶註冊成功後,通過異步消息同步到支付寶系統。

業務拆分符合單一職責原則。

架構演化第9階段:微服務及中臺化

在這裏插入圖片描述

架構演化第10階段:大數據與智能化

典型的系統是:字節跳動公司,頭條、抖音通過大數據給用戶提供資訊、內容。

架構模式

每一個模式描述了一個在我們周圍不斷重複發生的問題以及該問題解決方案的核心。這樣,你就能一次又一次的使用該方案而不必要做重複工作。

模式的關鍵在於模式的可重複性,問題與場景的可重複性帶來解決方案的可重複使用。

互聯網架構模式就是試圖去描述那些爲解決互聯網系統高性能、高可用、易擴展、可伸縮、安全等目標,被很多互聯網應用重複使用的一些解決方案,這些解決方案是互聯網軟件系統的重要組成部分。

分層

分層是企業應用系統中最常見的一種架構模式,將系統在橫向維度上切分成幾個部分,每個部分負責一部分相對比較單一的職責,然後通過上層對下層依賴和調用組成一個完整的系統。

分割

如果說分層是將軟件在橫向方面進行切分,那麼分割就是在縱向方面對軟件進行切分。

系統越大,功能越複雜,服務和數據處理的種類也越多,將這些不同的功能和服務分割開來,包裝成高內聚低耦合的模塊單元,一方面有助於軟件的開發和維護;另一方面,便於不同模塊的分佈式部署,提高網站的併發處理能力和功能擴展能力。

分佈式

對於大型網站,分層和分割的一個主要目的是爲了切分後的模塊便於分佈式部署,即將不同模塊部署在不同的服務器上,通過遠程調用協同工作。分佈式意味着解決同樣的問題可以使用更多的計算機,計算機越多,CPU、內存、存儲資源也就越多,能夠處理的併發訪問和數據流就越大。

  • 分佈式應用和服務
  • 分佈式靜態資源
  • 分佈式數據和存儲
  • 分佈式計算

集羣

使用分佈式雖然已經將分層和分割後的模塊獨立部署,但是對於用戶訪問幾種的模塊,比如網站的首頁,還需要將獨立部署的服務器集羣化,即多態服務器部署相同應用構成一個集羣,通過負載均衡設備功能對外提供服務。

緩存

緩存就是將數據存放在距離計算最近的位置以加快處理速度。緩存是改善軟件性能的第一手段,現代 CPU 越來越快的一個重要因素是使用了更多的緩存,在複雜的軟件設計中,緩存幾乎無處不在。大型網站架構設計在很多方面都使用了緩存設計。

  • CDN
  • 反向代理
  • 本地緩存
  • 遠程緩存

異步

計算機軟件發展的一個重要目標和驅動力是降低軟件耦合性。事物之間越少直接關係,那麼就越少被彼此影響,越可以獨立發展。大型網站架構中,系統解耦中的手段除了前面提到的分層、分割、分佈等手段,還有一個重要手段是異步,就是講一個業務操作分成多個階段,每個階段之間通過共享數據而不是直接調用的方法進行協作。

  • 提高系統的可用性。
  • 加快網站響應速度。
  • 消除併發訪問高峯。

冗餘

互聯網應用需要 7 x 24 小時連續運行,但是服務器總有可能出現故障,特別是服務器規模比較大的時候,服務器宕機是必然事件。要想保證在服務器宕機的情況下網站依然可以繼續服務,數據不會丟失,就需要一定程度的服務器冗餘運行,數據冗餘備份。

2007年,阿里巴巴在香港上市期間,要求開個服務器可以查詢數據,阿里巴巴僅僅提供了一臺服務器,而這臺服務器竟然宕機了,香港證監會就發了一個很嚴肅的警告,如果再次宕機,就不允許上市。這個例子說明,任何一個服務,都要有災備意識。

自動化

在無人值守的情況下網站可以正常運行,一切都可以自動化是網站的理想狀態。目前互聯網的自動化架構設計主要集中的運維方面。

安全

互聯網的開放特性使得其從誕生起就面對巨大的安全挑戰,網站在安全架構方面也積累了許多模式:通過密碼和手機校驗碼進行身份認證;登錄、交易等操作需要對網絡通訊進行加密,網站服務器上存儲的敏感數據如用戶信息等也進行加密處理;爲了防止機器人程序濫用網絡資源供給網站,網站使用驗證碼進行識別;對於常見的用於攻擊網站的 XSS 攻擊, SQL 注入,進行編碼轉換等相應處理;對於垃圾信息、敏感信息進行過濾;對轉賬交易等重要操作根據交易模式和交易信息進行風險控制。

注意:以上信息如有侵權,請聯繫作者刪除,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章