1. 程式人生 > >大型網站的演化之路——讀《大型網站技術架構》

大型網站的演化之路——讀《大型網站技術架構》

大型網站的演化之路——讀《大型網站技術架構》
____

author:姚毛毛的部落格 & 妖生

01 大型網站or軟體有什麼特點?

高併發、大流量,微信都日活10億了
7×24的高可用,俗稱的4個9(99.99%)
海量資料的儲存與管理
全國甚至全球的使用者分佈,複雜網路
安全環境很差
需求變更頻繁,需要快速迭代

最後,是漸進式的發展。
所有大型網站都是從一個小網站發展起來的。
好的網站與複雜的架構都是演化來的,而不是一開始就設計好的。
當年才出發的時候,誰也想不到微信可以日活十億,最初的時候肯定也沒有成千上萬的伺服器叢集對不對。

02 最初與第一次的演化之路:應用與資料的分離

我們最初的小型網站是什麼樣的?
從邏輯上看,一個應用服務、一個數據庫;從物理上看,一臺伺服器就搞定了。
在使用者量增多後,我們開始需要將應用跟資料庫分離。

那應用跟資料庫所需要的伺服器配置是一樣的嗎?
當然是NO。
應用需要處理更多的業務邏輯,所以需要好一點多一點的CPU。
資料庫則要快速檢索磁碟跟放置資料快取,因此需要快一點的磁碟和大一點的記憶體。

當然,所有演進的目的都是想更高、更快、更強。只是有時候沒法做到面面俱到,需要取捨。

03 第二次演進:快取優化

恭喜你,網站優化了一次,體驗變好了,使用者也開始增多了,可是煩惱的又來了。
使用者的增多,帶來的資料庫壓力也大了,怎麼辦?

在IT行業甚至所有現實模型中都存在一個顛撲不破的真理,即二八原則。
在網站訪問上也是如此,80%的業務訪問總是集中在20%的資料上。
淘寶買東西就翻前面那麼一點,淘寶已經為我們找好了信用好、成交量高的賣家;百度一下也就是翻前面那兩三頁,甚至一頁裡的前幾條(如果沒有廣告的話);微博熱搜吃瓜也就看前十吧,後面的你會一個個點過去嗎?

那麼,把這20%的資料快取起來,是不是就可以減少資料庫的訪問壓力,提高網站訪問效能了?
YES。

那麼,怎麼快取呢?
我們通常使用的快取方案有兩種,即應用伺服器上的本地快取,和獨立的分散式快取。

有什麼優缺點?
本地快取速度快些,但是受限於應用伺服器的記憶體,且會導致與應用爭用的情況。
獨立的分散式快取可以使用叢集,速度稍慢,但也很快,基本只有網路IO的消耗;但是缺點就一個字:貴。因為需要購買獨立的快取伺服器。
所以在現實中,有時候,我們有時並不會購買獨立的快取伺服器,而是放在大記憶體的應用或資料庫伺服器上,設定好閾值,共用記憶體。

04 第三次演進:應用叢集與資料庫的叢集和讀寫分離

哇,用了快取後,訪問資料好快啊。
可是使用者又增多了,應用支撐不過來了怎麼辦?真是幸福的煩惱啊。
單臺數據庫是不是有宕機的危險啊?

唉,叢集唄。花錢就完事了。

應用叢集、資料庫叢集。

這也是我們當今的軟體架構中最常用的部署方案。

通過負責均衡排程器(nginx、F5等),可以將使用者請求通過輪詢或者IP指定的方式,分發到應用伺服器叢集中的任意一臺伺服器上,緩解應用壓力。
而資料庫以Oracle為例,則是可以在生產伺服器上安裝RAC版本,而應用可以通過訪問資料庫的VIP(Virtual IP),或者JDBC叢集訪問的方式訪問資料庫。
但是在網站的應用開發中,則一般選擇mysql的較多。雖然淘寶早期也是使用了Oracle,但是後期也轉mysql了。
至於為什麼?
呵呵,一個字,貴。兩個字,很貴。三個字,太貴了。

叢集的好處有兩個:1、緩解服務壓力;2、高可用,其中一臺壞了,另一臺還可以繼續使用,給你恢復服務的機會。

一般軟體演化到這裡就完事了。

但是網站有個不一樣的地方,很多時候,都是讀多寫少。
點讚的、吃瓜的比上場評論的少很多對吧?

而讀多的情況雖然通過快取配置消化了一部分,但還是有一部分讀操作(快取未命中、快取過期)和全部的寫操作會訪問資料庫。
所以在你的使用者量又迅猛增加到一定規模時,又是資料庫成為了我們的瓶頸。

目前大部分資料庫都是支援主從熱備功能的,主資料庫通過主從複製機制將資料更新同步到從資料庫。
此時我們的應用就可以建設專門的讀、寫資料庫的訪問模組,使資料庫讀寫分離對應用透明。

有時我們甚至會將專門的查詢模組剝離出來,成為另一個子系統。

05 不算演進的第四次演進:CDN與反向代理

為什麼要做CDN?
移動、電信、聯通……,華東、華南、西南、西北……,網路環境複雜,每個地區訪問網站的速度都不太一樣。
CDN跟反向代理是加速訪問的一種手段,它們的基本原理都是快取。
區別是CDN部署在網路廠商的機房,反向代理是部署在網站機房。
CDN跟反向的目的都是儘早返回資料給使用者。

06 三國演義式的第五次演進:分散式演進、業務的拆分與合併

分散式資料庫是一種最後手段,只有在單表資料非常龐大的時候才使用。
很多網站和軟體根本用不到這一步,分散式資料庫會帶來更麻煩的複雜性。
網站更常用的手段是拆分業務,拆分不同的業務應用,拆分不同的業務庫,部署在不同的物理伺服器上。

這一招,在圍棋上,叫分治。在三國裡,叫合久必分。

以商城網站為例,可以將首頁、店鋪、訂單、賣家、買家拆分不同的產品線,這其中不同的產品線又可以拆分多個應用,分歸不同的業務團隊管理。

應用之間可以通過首頁超連結建立關係,也可以通過訊息佇列進行資料分發,當然,最多的還是訪問同一個資料儲存系統,來構成一個完整的系統。

這叫微服務。

隨著業務拆分越來越小,應用越來越複雜,其中又出現了一些可以共用的服務。如使用者管理、商品管理,那麼就可以將這些共用的業務提取出來,獨立部署。
用現在流行的話來說,叫業務中臺。

在技術上,大家又造了各種各樣的輪子,解決的問題其實有很多共性。例如檔案、圖片的處理、資料的儲存與搜尋系統。
技術中臺也有了。

在資料上,大家的系統因為拆分的愈來愈零碎,儲存到了不同的資料庫中,又形成了一個個資料孤島。把這些打通,做成資料倉庫,分析使用者畫像豈不美哉?優惠券推送、大資料殺熟了解一下。
而在技術上,隨著資料越來越多,資料儲存和檢索的技術需求也越來越高。所以我們又會引用一些非關係型的技術如NoSQL、搜尋引擎等等。
最後,資料中臺也有了。

所謂分久必合,新三國成型了。


歡迎關注我的公眾號:姚毛毛的部落格

這裡有我的程式設計生涯感悟與總結,有Java、Linux、Oracle、mysql的相關技術,有工作中進行的架構設計實踐和讀書理論,有JVM、Linux、資料庫的效能調優,有……

有技術,有情懷,有溫度

歡迎關注我:姚毛毛& 妖生

相關推薦

大型網站演化——大型網站技術架構

大型網站的演化之路——讀《大型網站技術架構》 ____ author:姚毛毛的部落格 & 妖生 01 大型網站or軟體有什麼特點? 高併發、大流量,微信都日活10億了 7×24的高可用,俗稱的4個9(99.99%) 海量資料的儲存與管理 全國甚至全球的使用者分佈,複雜網路 安全環境很差 需求變更頻

一個成熟的大型網站系統架構演化

二、應用、資料、檔案分離 隨著業務的擴充套件,一臺伺服器已經不能滿足效能需求,故將應用程式、資料庫、檔案各自部署在獨立的伺服器上,並且根據伺服器的用途配置不同的硬體,達到最佳的效能效果。 三、利用快取改善網站效能 在硬體優化效能的同時,同時也通過軟體進行效能優化,在大部分的網站系統中,都會利

大型網站架構演化

一、服務進化之路 單伺服器階段 應用程式、資料庫、檔案都在一臺伺服器上。 應用服務與資料服務分離 應用程式、資料庫、檔案分別部署在不同的伺服器上。 引入快取緩

從程式設計小白到架構總監:大型網站系統架構演化

前言 一個成熟的大型網站(如淘寶、京東等)的系統架構並不是開始設計就具備完整的高效能、高可用、安全等特性,它總是隨著使用者量的增加,業務功能的擴充套件逐漸演變完善的,在這個過程中,開發模式、技術架構、設計思想也發生了很大的變化,就連技術人員也從幾個人發展到一個

Android 學習(原始碼網站及書籍)

Android 開源專案分類彙總 https://github.com/Trinea/android-open-project Android官方培訓課程中文版(v0.9.5) http://hukai.me/android-training-course-in-chin

大型系統演進-負載均衡演進

Nginx做負載均衡 通過Nginx的反向代理將請求分發到tomcat中,如果tomcat支援100併發,Nginx支援5000

Java應用架構演化

當前 分析 c51 阻塞 發展 分布式緩存 如何 分布式 查詢 當我們架設一個系統的時候通常需要考慮到如何與其他系統交互,所以我們首先需要知道各種系統之間是如何交互的,使用何種技術實現。 1. 不同系統不同語言之間的交互 現在我們常見的不同系統不同語言之間的交互使用WebS

買單俠微服務的API網關演化

微服務 網關 api伴隨著買單俠業務的快速發展,能夠支持獨立開發、獨立部署、獨立擴展的微服務在秦蒼得到了廣泛應用和蓬勃發展,短短3年左右時間,已經發展到了300+個微服務,並且還在快速增長中。研發逐漸意識到伴隨著微服務規模化的增長,必需要重視微服務的基礎設施建設(API網關、服務註冊中心、調用鏈跟蹤等)才能保

構建高效能web------《構建高效能web站點》有感

一直想在web效能、可擴充套件性和可用性提升領域有所深入,但由於這些經驗的沉澱,沒有比較集中的學習資料輔助,並且也一直沒有接觸過有大規模訪問需求的web專案,因此總是在這個領域門外徘徊。上星期讀到一本書,《構建高效能web站點》,感覺有點如獲至寶,完全可以稱為高效能web的入

大資料平臺的技術演化 諸葛io平臺設計例項

如今,資料分析能力正逐漸成為企業發展的標配,企業通過資料分析的過程將資料中的資訊提取出來,進行處理、識別、加工、呈現,最後成為指導企業業務發展的知識和智慧。而處理、識別、加工、呈現的過程從本質上來講,就是實現對資料的採集、清洗、加工、載入、建模分析,再到視覺化的過程。 

你愛的小米是怎樣玩轉大資料的?大咖揭祕小米大資料整合架構演化

小米有眾多的智慧終端和裝置,資料規模非常大,對於資料採集和大資料整合提出了非常高的要求。此次演講主要介紹小米大資料整合解決方案,主要包括小米資料流平臺的架構演化,整個鏈路的資料質量監控,資料流生態的構建思路,最後會介紹典型的應用場景、未來的規劃和思考。 分享大綱: 1、問題與挑戰 2、資

高德億級流量接入層服務的演化

2019杭州雲棲大會上,高德地圖技術團隊向與會者分享了包括視覺與機器智慧、路線規劃、場景化/精細化定位時空資料應用、億級流量架構演進等多個出行技術領域的熱門話題。現場火爆,聽眾反響強烈。我們把其中的優秀演講內容整理成文並陸續釋出出來,本文為其中一篇。 阿里巴巴資深技術專家孫蔚在高德技術專場做了題為《高德億級流

以前寫的兩本書《安全:Web滲透技術及實戰案例解析(第2版)》和《黑客攻防實戰加密與解密》

Web滲透技術及實戰案例解析 黑客攻防實戰加密與解密 應一些朋友的要求,我重新將書封面和購買地址發一下說明一下:www.antian365.com原來域名轉移到國外去了。現在國家對境外域名在國內訪問必須實名制,進行備份啥的,情況你懂的。最近正在制作《黑客攻防實戰加密與解密》的視頻課程,對黑客攻防過程遇

天搜科技的自主創新:堅持把技術放在首位

目標 適應 歷史 集成電路 系統 簡單 提高 危機 實的 習主席在×××第十九次院士大會、×××第十四次院士大會上的重要講話指出:“中國要強盛、要復興,就一定要大力發展科學技術,努力成為世界主要科學中心和創新高地。我們比歷史上任何時期都更接近中華民族偉大復興的目標,我們比歷

架構師成長(1)--什麽是架構

自然 得到 場景 裏來 計劃 理論 混合 研發 既然 前言: 哲學家常思考的問題:" 我是誰?"" 我從哪裏來?"" 要到哪裏去?不只是哲學家,我想每個人都有自己對這三個問題的認知。 如果我們要成為架構師,我們自己要面臨的三

京東無人超市的成長 | 如何利用人工智慧技術在零售業做產品創新?

隨著消費及使用者體驗的需求升級、人貨場的運營效率需求提升、人工智慧技術的突破以及零售基礎設施的變革等因素共同推動了第四次零售革命的到來,不僅在國內,國外一線巨頭網際網路亞馬遜等企業都在研發無人駕駛、無人超市技術,京東也一直在無人科技方面不斷推出新技術和新產品。   在競爭日顯激烈的

MOT北京站 | 卓越研發:億萬級雲端架構演進

隨著IT行業技術週期的快速迭代,如何在激烈的市場競爭中突出重圍成為了不少技術人的困惑。除了要保持良好的技術視野外,多向IT行業精英學習他們分享的實戰經驗,也可讓技術提升,達到事半功倍的效果。   MOT北京站首期以『億萬級雲端架構演進』為主題邀請了微軟、京東、轉轉、Pivot

資料科學家——資料預處理技術基礎

現實世界中資料大多都是不完整,不一致的髒資料,無法直接進行資料探勘,或挖掘結果差強人意。為了提高資料探勘的質量,我們一般會在對資料建模前對資料進行預處理。資料預處理的過程主要包括:資料質量分析、資料審計、資料清洗、資料整合、資料變換、資料脫敏、資料歸約等。這些

架構--搜尋業務和技術介紹及容錯機制高階教程

java架構師、叢集、高可用、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰 視訊課程內容包含: 高階Java架構師包含:Spring boot、Spring  

【Java 安全技術探索系列:J2SE安全架構二:安全管理器

一 安全管理器的功能 安全管理器是一個允許程式實現安全策略的類,它會在執行階段檢查需要保護的資源的訪問許可權及其它規定的操作許可權,保護系統免受惡意操作攻擊,以達到系統的安全策略。 安全管理器負責檢查的操作主要包括以下幾個: 建立一個新的類載入器