一篇文章看懂大型網站的架構技巧

1、寫在前面前端

    「架構」一詞,是一個很是大命題,一般很難用語言來描述這個東西,咱們先不談「架構「這個詞,咱們先來看一些現象。web

    一、對於真正作實事的開發者來講,一般會有相似的感受,架構師一般就畫畫ppt,代碼也寫不了,畫的各類ppt也就看看,也解不了什麼實際問題。後端

    二、每次開會,就會大聊各類概念,又沒法落地。瀏覽器

    三、什麼技術都能誇誇奇談,你問細節,怎麼實現,他不知道,老是表示本身不關心細節。緩存

    四、老是以高屋建瓴的姿態來標榜本身。安全

    諸如上面的現象其實很是多,我不過多的評價,只能說他們並不是熱愛軟件這個行業,至少心裏是排斥這個行業的。但我以爲,一個樸素的技術人,應該是有追求的,把」傳到授業解惑「當成一種責任,剖開技術的華麗包裝,還原技術想告訴人們的真相。服務器

    注:上面並不是想批判什麼。cookie

2、起因網絡

    回顧這些年的技術生涯,感觸仍是很是深的,從Java web開發,到大數據,再到機器學習,再到深度學習這一路走來,都源於我想要揭示技術的真相。也慢慢想通一些事情,程序本質上所作的事情能夠這樣描述,有一個黑箱子,你給它一個input,它給一個output。那麼獲得這個」黑箱子「,有兩種辦法,硬編碼和機器學習,那麼這樣即可以描述全部技術的真相了。程序和機器學習,本質上作的事情並無什麼不一樣,只是獲得這個黑箱子的辦法不一樣而已,請看下圖。ps:大數據技術到底解了什麼,我從」冷眼」的視角,也總結了一些話,後面再寫成文章。session

    

    上面有點扯遠了,最近又從新翻了一遍李智慧的《大型網站技術架構》一書,這是一本很是簡潔而充滿智慧的書。總結一個大型網站所具有的核心要素。本片博客將結合這本書,寫一些東西。

3、架構

    再說架構以前,咱們先來講說一個B/S結構想解的核心問題是什麼?它想解的核心問題是,數據任什麼時候候高速、準確的讀或者寫的問題。圍繞着這個問題,咱們得對設計作一些考量,這種設計,它應該叫架構。架構是最高層次的一種規劃,一旦規劃好,便難以改變,就像人生的規劃同樣,走過的路,不能從新走。

    一、核心要求

    高性能:任什麼時候候操做網站,都能立刻響應

    高可用:任什麼時候候都是能夠訪問的

    擴展性:能夠隨意擴展業務,並不對原業務形成影響

    伸縮性:能夠任意橫向、或者縱向擴展服務器,固然也能隨意縮減

    安全性:抵禦攻擊

    二、架構模式

    圍繞着上述要求,咱們有哪些設計思想是能夠用的?

    分層:分層這種思想實際上是計算機裏很是樸素的一種設計思想,例如網絡7層模型,5層模型等,固然對於web系統而言,視圖層、服務層、數據層,這是最基礎的分層。

    分割:將業務進行合理的切分

    分佈式:不一樣的業務,分而治之

    集羣:單一應用橫向擴展

    緩存:前端、後端緩存,多級緩存等等

    異步:多階段拆分業務,消息驅動

    冗餘:web節點冗餘、數據冗餘,異地容災等等

    三、高性能

    衡量指標:響應時間、併發數、吞吐量(TPS、QPS、HPS)

    web前端優化:減小http請求、使用瀏覽器緩存、壓縮、減小cookie傳輸、CDN加速

    服務端優化:分佈式緩存、異步、集羣、代碼優化(多線程、資源複用、減小fullgc)

    存儲性能:機械硬盤、固態硬盤,索引技術(B+樹、LSM)

    四、高可用

    高可用應用:無狀態服務集羣、有狀態的session服務集羣

    高可用服務:集羣(分級管理、超時設置、異步調用、服務降級、冪等設計)

    高可用數據:CAP理論、數據一致性、數據備份(冷熱備份)、失效轉移

    五、伸縮性

    伸縮性設計:不一樣功能進行物理分離、單一功能集羣

    負載均衡

    分佈式緩存

    數據伸縮:分庫分表、主從備份

    六、擴展性

    事件驅動:經過消息隊列解耦合,用事件驅動的思想擴展

    服務化:用interface的手段解耦合,橫向擴展

    七、安全性

    xss、注入攻擊、CSRF

    固然,有了deeplearning,能夠用Gan的思想,找到攻擊流量的邊界。

4、附上大圖

    如下是我梳理的全書的重要部分。

    

  5、結束語

    衡量一我的技術的好壞,廣度和深度當然重要,但有一個最最重要的指標是:可否快速、優雅地解當前問題。還有最重要的一句話,不能爲了技術而技術。

 

快樂源於分享。

此博客乃做者原創, 轉載請註明出處

相關文章
相關標籤/搜索