摘要:web server 接下來需要獲取相關類似圖片信息,使用“圖片標題”請求全文搜索服務(圖中的【7】)。用戶點擊鏈接後,瀏覽器首先會去請求 DNS 服務器(圖中的【1】),獲得網站的 IP 地址,然後通過 IP 請求網站。

架構圖

這是一個很典型的架構描述圖,下面我們就以此爲例聊聊架構的基礎概念。

架構流程示例

假設用戶在搜索引擎中搜索“ 森林裏濃霧和陽光 ”。

用戶點擊了搜索結果中的一個圖片網站鏈接,打開一張圖片的詳情頁。

這個頁面的主要內容包括:

  • 主圖

  • 圖片信息,如標題、作者、描述、標籤、評論 ……

  • 相關類似圖片

  • 用戶信息

從用戶點擊了搜索結果中的那條連接,一直到呈現出最終的頁面,中間經歷了什麼?

架構圖

(爲了便於對照,再放一張)

用戶點擊鏈接後,瀏覽器首先會去請求 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

不直接暴露給外部,內部調用,例如:

  • 用戶服務

  • 內容服務

  • 支付服務

  • HTML 轉 PDF 服務

9. Data

如今,數據可以說是企業的命脈,大家都會盡可能的收集數據、分析數據,以便進行有效的商業決策。

典型的數據管道包括:

  • 應用發送數據,例如用戶交互行爲,發送到流數據系統中,如 kafka。

  • 保存原始數據,就是從應用端發送來的數據,未經處理的,保存起來,例如保存到雲存儲系統中。

  • 放入數據倉庫進行分析,根據自己的分析模型對數據進行處理。

10. Cloud storage 雲存儲

雲存儲太方便了,使用簡單、擴展性好、性能強。

本地的文件都可以放到雲存儲上,例如圖片、音頻、視頻、JS、CSS ……

11. CDN

CDN 是內容分發網絡,可以簡單理解爲資源緩存,圖片、音頻、視頻、JS、CSS 都可以加載到 CDN。

沒有CDN時,需要直接請求從服務器,如果用戶距離服務器很遠,那就非常慢了。

有了CDN以後,用戶可以從距離自己最近的 CDN 節點中拿到資源,速度快,還減輕了服務器的壓力。

推薦閱讀:

相關文章