阿里千萬級高性能、高併發架構的經驗之談

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

在開始談我對架構本質的理解以前,先談談對今天技術沙龍主題的我的看法,千萬級規模的網站感受數量級是很是大的,對這個數量級咱們戰略上 要重 視 它 , 戰術上又 要 藐 視 它。先舉個例子感覺一下千萬級究竟是什麼數量級?如今很流行的優步(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,後面會將。 第三代 架構 要解決的 問題,就是用戶量和業務趨於穩步增長(相對爆發期的指數級增加),更多考慮技術框架的穩定性, 提高系統總體的性能,下降成本,還有對整個系統監控的完善和升級。

總結

這裏以Java語言爲例,首先必定要 理解 JAVA;第二步,JAVA完了之後,必定要 理 解 JVM;其次,還要 理解 操做系統;再次仍是要了解一下 Design Pattern,這將告訴你怎麼把過去的經驗抽象沉澱供未來借鑑;還要學習 TCP/IP、 分佈式系 統、數據結構和算法。

程序員必定要經過不停的學習、練習和總結, 造成本身的一套架構設計原則和方法!

如何一塊兒學習,有沒有免費資料?

 

歡迎工做一到五年的 Java 的工程師朋友們加入的 Java 架構開發:697-579-751

本羣提供免費的學習指導架構資料以及免費的解答

不懂得問題均可以在本羣提出來以後還會有職業生涯規劃以及面試指導

相關文章
相關標籤/搜索