架構圖解

架構圖

這是一個很典型的架構描述圖,下面咱們就以此爲例聊聊架構的基礎概念。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

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

  • 用戶服務
  • 內容服務
  • 支付服務
  • HTML 轉 PDF 服務

9. Data

現在,數據能夠說是企業的命脈,你們都會盡量的收集數據、分析數據,以便進行有效的商業決策。

典型的數據管道包括:

  • 應用發送數據,例如用戶交互行爲,發送到流數據系統中,如 kafka。
  • 保存原始數據,就是從應用端發送來的數據,未經處理的,保存起來,例如保存到雲存儲系統中。
  • 放入數據倉庫進行分析,根據本身的分析模型對數據進行處理。

10. Cloud storage 雲存儲

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

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

11. CDN

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

沒有CDN時,須要直接請求從服務器,若是用戶距離服務器很遠,那就很是慢了。

有了CDN之後,用戶能夠從距離本身最近的 CDN 節點中拿到資源,速度快,還減輕了服務器的壓力。

推薦閱讀:

相關文章
相關標籤/搜索