摘要:轉發通過,將請求通過負載均衡,均衡給后端處理的服務。圖床同時也支持同步上傳回調通知的方式,將圖片上傳結果反饋給業務方。
Hulk 圖床是支持 360 公司絕大部分業務的圖片服務,支持多種圖片處理功能,如:裁剪、壓縮、濾鏡、pHash 計算、人臉識別、格式轉換、gif 首幀提取……等等,支持的業務線包括:搜索、圖搜、新聞、信息流、廣告……等等,每天 CDN 回源圖床后端 150+ 億 PV。
圖床業務邏輯相對簡單,抽象看就是:上傳和下載,這里簡單分享圖床這兩個模塊的架構以及圖片的上傳和下載時所經歷的服務。
1. 上傳模塊(Davinci)
【Davinci 架構圖】
業務上傳圖片到圖床邏輯大致如下:
SDK 上傳
通過 SDK (或者業務自己構造 HTTP 請求)將圖片 POST 到 Davinci 上傳接口 ,接口域名解析的 VIP 均衡到后端 Nginx (80 端口)。
Nginx:80 轉發
Nginx 80 通過 upstream,將請求通過負載均衡,均衡給后端處理的服務(Nginx 8360) 。
排隊等待上傳處理
后端服務將上傳任務進行排隊,等待 Gearman 異步服務進行隊列消費和任務調度,同時給該上傳請求返回任務 ID,用于查詢處理結果。
圖片初始處理和存儲
Gearman worker 異步對圖片進行處理,比如壓縮、初始裁剪、人臉識別等,并將圖片以及圖片處理后的元信息落地存到 Cassandra。將任務 ID 對應的處理結果,存在 Redis,用于提供用戶查詢。
獲取上傳結果
通過
PS: 圖床同時也支持同步上傳、回調通知的方式,將圖片上傳結果反饋給業務方。
2. 下載模塊(Picasso)
【Picasso 架構圖】
用戶通過 URL 請求圖床的一張圖片,大致流程如下:
圖片 URL 請求
圖片 URL 根據圖床域名 CNAME 配置,請求到 CDN 節點。如果所請求的 CDN 節點已緩存過該圖片,則直接返回數據。
CDN 回源
如果 中沒命中 CDN 緩存,將會回源到圖床后端(Nginx 80 端口)。
圖床后端緩存(Varnish)
為了減少圖床后端的計算壓力,圖片請求回源到圖床后端時,并不是直接到存儲集群讀圖片、處理圖片,而是先通過 varnish 前端緩存服務,如果 varnish 緩存命中,則直接響應圖片數據。
Varnish 緩存沒命中
如果 varnish 緩存沒命中,則轉發給 Nginx 8360 端口,進而轉發給 PHP fast-cgi 進行圖片讀取和響應。
圖片處理
在
響應處理后的數據
通過 Nginx (8360)這層模塊的處理,得到符合 URL 指定規則的圖片,最后響應并緩存到 CDN 節點。
以上就是圖床上傳和下載模塊的處理邏輯。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61837.html
摘要:轉發通過,將請求通過負載均衡,均衡給后端處理的服務。圖床同時也支持同步上傳回調通知的方式,將圖片上傳結果反饋給業務方。 Hulk 圖床是支持 360 公司絕大部分業務的圖片服務,支持多種圖片處理功能,如:裁剪、壓縮、濾鏡、pHash 計算、人臉識別、格式轉換、gif 首幀提取……等等,支持的業務線包括:搜索、圖搜、新聞、信息流、廣告……等等,每天 CDN 回源圖床后端 150+ 億 P...
閱讀 1297·2021-11-22 09:34
閱讀 2162·2021-10-08 10:18
閱讀 1724·2021-09-29 09:35
閱讀 2453·2019-08-29 17:20
閱讀 2137·2019-08-29 15:36
閱讀 3398·2019-08-29 13:52
閱讀 775·2019-08-29 12:29
閱讀 1183·2019-08-28 18:10