1. 程式人生 > >架構師項目實戰高並發高性能

架構師項目實戰高並發高性能

項目實戰 之前 ima 三層 inf 詳細 and 可用 訂單

架構以及我理解中架構的本質

在開始談我對架構本質的理解之前,先談談對今天技術沙龍主題的個人見解,千萬級規模的網站感覺數量級是非常大的,對這個數量級我們戰略上 要重 視 它 , 戰術上又 要 藐 視 它。先舉個例子感受一下千萬級到底是什麽數量級?現在很流行的優步(Uber),從媒體公布的信息看,它每天接單量平均在百萬左右, 假如每天有10個小時的服務時間,平均QPS只有30左右。對於一個後臺服務器,單機的平均QPS可以到達800-1000,單獨看寫的業務量很簡單 。為什麽我們又不能說輕視它?第一,我們看它的數據存儲,每天一百萬的話,一年數據量的規模是多少?其次,剛才說的訂單量,每一個訂單要推送給附近的司機、司機要並
發搶單,後面業務場景的訪問量往往是前者的上百倍,輕松就超過上億級別了。

今天我想從架構的本質談起之後,希望大家理解在做一些建構設計的時候,它的出發點以及它解決的問題是什麽。

架構,剛開始的解釋是我從知乎上看到的。什麽是架構?有人講, 說架構並不是一 個很 懸 乎的 東西 , 實際 上就是一個架子 , 放一些 業務 和算法,跟我們的生活中的晾衣架很像。更抽象一點,說架構其 實 是 對 我 們 重復性業務 的抽象和我 們 未來 業務 拓展的前瞻,強調過去的經驗和你對整個行業的預見。

我們要想做一個架構的話需要哪些能力?我覺得最重要的是架構師一個最重要的能力就是你要有 戰 略分解能力。這個怎麽來看呢:

  • 第一,你必須要有抽象的能力,抽象的能力最基本就是去重,去重在整個架構中體現在方方面面,從定義一個函數,到定義一個類,到提供的一個服務,以及模板,背後都是要去重提高可復用率。
  • 第二, 分類能力。做軟件需要做對象的解耦,要定義對象的屬性和方法,做分布式系統的時候要做服務的拆分和模塊化,要定義服務的接口和規範。
  • 第三, 算法(性能),它的價值體現在提升系統的性能,所有性能的提升,最終都會落到CPU,內存,IO和網絡這4大塊上。

技術分享圖片

這一頁PPT舉了一些例子來更深入的理解常見技術背後的架構理念。

  • 第一個例子,在分布式系統我們會做 MySQL分 庫 分表,我們要從不同的庫和表中讀取數據,這樣的抽象最直觀就是使用模板,因為絕大多數SQL語義是相同的,除了路由到哪個庫哪個表,如果不使用Proxy中間件,模板就是性價比最高的方法。
  • 第二看一下加速網絡的CDN,它是做速度方面的性能提升,剛才我們也提到從CPU、內存、IO、網絡四個方面來考慮,CDN本質上一個是做網絡智能調度優化,另一個是多級緩存優化。
  • 第三個看一下服務化,剛才已經提到了,各個大網站轉型過程中一定會做服務化,其實它就是做抽象和做服務的拆分。第四個看一下消息隊列,本質上還是做分類,只不過不是兩個邊際清晰的類,而是把兩個邊際不清晰的子系統通過隊列解構並且異步化。
    技術分享圖片

新浪微博整體架構是什麽樣的

接下我們看一下微博整體架構,到一定量級的系統整個架構都會變成三層,客戶端包括WEB、安卓和IOS,這裏就不說了。
接著還都會有一個接口層, 有三個主要作用:

  • 第一個作用,要做 安全隔離,因為前端節點都是直接和用戶交互,需要防範各種惡意攻擊;
  • 第二個還充當著一個 流量控制的作用,大家知道,在2014年春節的時候,微信紅包,每分鐘8億多次的請求,其實真正到它後臺的請求量,只有十萬左右的數量級(這裏的數據可能不準),剩余的流量在接口層就被擋住了;
  • 第三,我們看對 PC 端和移 動 端的需求不一樣的,所以我們可以進行拆分。接口層之後是後臺,可以看到微博後臺有三大塊:
  • 一個是 平臺服 務,
  • 第二, 搜索,
  • 第三, 大數據。
    到了後臺的各種服務其實都是處理的數據。 像平臺的業務部門,做的就是 數據存儲和讀 取,對搜索來說做的是 數據的 檢 索,對大數據來說是做的數據的 挖掘。微博其實和淘寶是很類似

技術分享圖片

微博其實和淘寶是很類似的。一般來說,第一代架構,基本上能支撐到用戶到 百萬 級別,到第二代架構基本能支撐到 千萬 級別都沒什麽問題,當業務規模到 億級別時,需要第三代的架構。

從 LAMP 的架構到面向服 務 的架構,有幾個地方是非常難的,首先不可能在第一代基礎上通過簡單的修修補補滿足用戶量快速增長的,同時線上業務又不能停, 這是我們常說的 在 飛 機上 換 引擎的 問題。前兩天我有一個朋友問我,說他在內部推行服務化的時候,把一個模塊服務化做完了,其他部門就是不接。我建議在做服務化的時候,首先更多是偏向業務的梳理,同時要找準一個很好的切入點,既有架構和服務化上的提升,業務方也要有收益,比如提升性能或者降低維護成本同時升級過程要平滑,建議開始從原子化服務切入,比如基礎的用戶服務, 基礎的短消息服務,基礎的推送服務。 第二,就是可 以做無狀 態 服 務,後面會詳細講,還有數據量大了後需要做數據Sharding,後面會將。 第三代 架構 要解決的 問題,就是用戶量和業務趨於穩步增加(相對爆發期的指數級增長),更多考慮技術框架的穩定性, 提升系統整體的性能,降低成本,還有對整個系統監控的完善和升級。

大型網站的系統架構是如何演變的

技術分享圖片

我們通過通過數據看一下它的挑戰,PV是在10億級別,QPS在百萬,數據量在千億級別。我們可用性,就是SLA要求4個9,接口響應最多不能超過150毫秒,線上所有的故障必須得在5分鐘內解決完。如果說5分鐘沒處理呢?那會影響你年終的績效考核。2015年微博DAU已經過億。我們系統有上百個微服務,每周會有兩次的常規上線和不限次數的緊急上線。我們的挑戰都一樣,就是數據量,bigger and bigger,用戶體驗是faster and faster,業務是more and more。互聯網業務更多是產品體驗驅動, 技 術 在 產 品 體驗上最有效的貢獻 , 就是你的性能 越來越好 。 每次降低加載一個頁面的時間,都可以間接的降低這個頁面上用戶的流失率。

架構師項目實戰高並發高性能