這是一個很典型的架構描述圖,下面咱們就以此爲例聊聊架構的基礎概念。web
假設用戶在搜索引擎中搜索「森林裏濃霧和陽光」。算法
用戶點擊了搜索結果中的一個圖片網站連接,打開一張圖片的詳情頁。數據庫
這個頁面的主要內容包括:後端
從用戶點擊了搜索結果中的那條鏈接,一直到呈現出最終的頁面,中間經歷了什麼?瀏覽器
(爲了便於對照,再放一張)緩存
用戶點擊連接後,瀏覽器首先會去請求 DNS 服務器(圖中的【1】),得到網站的 IP 地址,而後經過 IP 請求網站。服務器
請求首先會到達網站的負載均衡器(圖中的【2】)。網絡
負載均衡器從多個 web server 中選擇一個,把請求轉過去,讓他處理。(圖中的【3】)。架構
web server 從 cache 中獲取圖片的經常使用信息,從數據庫中獲取圖片的其餘信息。(圖中的 【4】【5】)。併發
若是發現圖片尚未被處理過,例如顏色還沒調整,就向隊列中發一個任務(圖中的【6a】),任務處理服務器從隊列中接收任務並處理(圖中的【6b】)。
(爲了便於對照,再放一張)
web server 接下來須要獲取相關相似圖片信息,使用「圖片標題」請求全文搜索服務(圖中的【7】)。
若是發現此用戶是已經登陸的用戶,請求 account service 獲取用戶的詳細信息(圖中的【8】)。
web server 如今已經拿到頁面展現所需的所有信息。
最後,發送一個頁面訪問事件,放入流數據處理系統,事件會進入到雲存儲系統和數據倉庫,用於作商業分析(圖中的【9a】【9b】【9c】【10】)。
web server 開始組織 HTML 頁面,而後經過負載均衡器返回給瀏覽器。
頁面中包含 JS 和 CSS 資源,這些資源會被放入雲存儲系統,這個系統與CDN鏈接,因此 JS 和 CSS 就會載入 CDN。
這樣,瀏覽器加載頁面中的 JS 和 CSS 時就能夠直接從 CDN 中讀取(圖中的【11】)。
最終,瀏覽器把頁面渲染出來,呈現給用戶。
1. DNS
全稱「Domain Name System」,提供根據域名找 IP 的服務。
例如:google.com -> 85.129.83.120。
2. Load Balancer 負載均衡器
用戶的請求先發到負載均衡器(LB)上,LB 再從後面衆多的 web 服務器中選一個,把請求交給他處理。
後面的那些web服務器都是同樣的,處理邏輯一致。
web 服務器處理完後,把結果交給 LB,LB 再返回給用戶。
3. web 服務器
接收請求,執行業務邏輯,返回響應信息。
會調用後端一系列的服務,如數據庫、緩存、隊列、搜索、其餘服務、日誌 ……
4. 數據庫
數據庫能夠是 SQL,也多是 NoSQL,或者混合使用。
5. 緩存
用來進行簡單的 key/value 存儲,速度快。
例如搜索引擎能夠把經常使用的搜索結果保存在緩存中;內容型網站會把文章放到緩存 ……
6.任務隊列、任務處理服務器
用於作異步處理。
隊列接收任務,任務處理服務器(worker,能夠有多個)從隊列中拿出任務進行處理。
隊列是一個須要異步執行的任務列表,經常使用的是先進先出模式,嚴格按照入隊順序出隊,還有優先級模式,入隊時給任務添加一個優先級,出隊按照優先級出隊,至關於給任務賦予了特權。
隊列應用的場景很是多,例如:
7. 全文搜索
有一個重要的概念:倒排索引。
例如上圖,對標題進行分詞,而後以每一個詞做爲關鍵字,指出誰的標題中含有這個關鍵字,這就是倒排索引。
主流的全文搜索服務有 Elasticsearch、Sphinx、Apache Solr。
8. Service
不直接暴露給外部,內部調用,例如:
9. Data
現在,數據能夠說是企業的命脈,你們都會盡量的收集數據、分析數據,以便進行有效的商業決策。
典型的數據管道包括:
10. Cloud storage 雲存儲
雲存儲太方便了,使用簡單、擴展性好、性能強。
本地的文件均可以放到雲存儲上,例如圖片、音頻、視頻、JS、CSS ……
11. CDN
CDN 是內容分發網絡,能夠簡單理解爲資源緩存,圖片、音頻、視頻、JS、CSS 均可以加載到 CDN。
沒有CDN時,須要直接請求從服務器,若是用戶距離服務器很遠,那就很是慢了。
有了CDN之後,用戶能夠從距離本身最近的 CDN 節點中拿到資源,速度快,還減輕了服務器的壓力。
推薦閱讀: