博客 / 詳情

返回

信也科技圖片存儲高可用方案揭秘

一、背景

​ 信也科技經過12多年的發展,已積累1億多的用户,每天都會產生百G級的用户圖片資料。2019年之前由於業務的迅速發展,用户的圖片資料為確保安全,採用加密、切片技術存儲在多個公有云上。公有云的穩定性大部分時候都宣稱能保證99.95%的服務可用性和99.9999999%的數據可靠性,直到某雲服務商發生了“數據丟失事件”,才意識到數據的可靠性完全不能依賴公有云。同時,信也科技是一家科技金融公司,對用户圖片資料的安全性有着金融級的要求,綜合多方面因素,我們需要建立一套私有的對象存儲了!

數據丟失

二、分佈式文件存儲選型

2.1 自研 or 開源

​ 既然選擇建立一套自有對象存儲,就會面臨着自研 or 開源的選擇。如果自研一套分佈式文件存儲,我們需要相應的人才儲備,至少需要存儲架構師、存儲產品經理、存儲運維工程師、存儲開發工程師。基於公司的現狀,籌備這一套研發隊伍,無論是資金成本還是時間成本都無法滿足需求。鑑於此,只有選擇開源產品一條路可以走。

2.2 圖片資料使用場景

​ 在對開源框架選型之前,需要先了解信也科技的用户圖片資料在業務中的使用場景。信也科技的圖片資料主要使用場景是對用户進行實名認證、OCR、人臉識別、活體檢測等用途。在助貸業務中,也會將用户資料授權給機構進行二次認證,同時也會給內部運營、客服進行人工審核、信息確認等用途。

圖片文件的使用場景

2.3 開源框架選型

​ 確立了開源的路線之後,下面要做的就是對開源產品的選型。在社區搜索會發現,目前有五個主流分佈式存儲技術,分為Cehp、GFS、HFDS、Swift、Lustre,其中GFS/HDFS/Lustre屬於文件存儲,Swift屬於對象存儲,而Ceph可支持塊存儲、對象存儲和文件存儲。詳細對比如下表:

分佈式存儲 Ceph GFS HDFS Swift Lustre
平台屬性 開源 閉源 開源 開源 開源
系統架構 去中心化架構 中心化架構 中心化架構 去中心化架構 中心化架構
數據存儲方式 塊、文件、對象 文件 文件 對象 文件
元數據節點數量 多個 1個 1個(主備) 多個 1個
數據冗餘 多副本/糾刪碼 多副本/糾刪碼 多副本/糾刪碼 多副本/糾刪碼
數據一致性 強一致性 最終一致性 過程一致性 最終一致性
分塊大小 4MB 64MB 128MB 視對象大小 1MB
適用場景 頻繁讀寫場景 大文件連續讀寫 大數據場景 雲的對象存儲 HPC超算

​ 表1 Ceph、GFS、HDFS、Swift、Lustre的對比

​ 由於信也科技的業務場景大多數都是小圖片的文件存儲,可以將選擇範圍直接縮小至適合小對象存儲的Ceph和Swift。另外,信也科技同時也是一家科技金融公司,對數據具有安全性、強一致性等需求,且對圖片資料需要頻繁讀寫的場景,最終確定選擇了Ceph。

三、雲存儲上的圖片處理解決方案

​ 引入Ceph之後,將圖片處理分為了對象流服務,資料服務、對象存儲網關服務和離線圖片處理服務。為了保證數據的穩定性和高可用性,將公有云與私有云融合做成雙活機制,確保用户圖片資料的信息安全,所有用户的圖片經過RSA加密之後進行存儲,然後將公鑰下發到圖片使用方進行解密。

架構總覽

  • 對象流讀取服務:傳輸對象流的服務,包括JPG、PNG、GIF、PDF、ZIP等格式,支持CDN緩存加速
  • 對象流上傳服務:上傳圖片、文件等對象文件,防止上傳大對象,需要進行上行帶寬隔離。
  • 資料服務:資料服務主要維護用户圖片資料的生命週期,包括存儲、查詢以及銷燬。
  • 對象存儲網關服務:包括上傳對象進行公有云與私有云的雙備份存儲,對象流讀取的雙活邏輯,以及整個對象的生命週期管理和內容審核
  • 離線圖片處理服務:處理圖片格式的轉換、明暗水印的處理、以及圖片的離線裁剪與縮放等多媒體功能。

邏輯架構

部署架構

3.1 公有云與私有云的融合雙活

由於在引入Ceph的過程中,考慮到整個技術團隊對Ceph的掌握能力處於初級階段,以及服務的整體穩定性,採用了公有云與私有云的雙活模式,通過雙寫公有云與私有云,並將鏈接的hash映射存儲至DB中,當公有云或私有云某一方出現故障的時候,能夠自動進行切換。

雲存儲雙活

3.2 圖片加密處理

3.2.1 圖片水印

​ 為了保證用户圖片資料的安全性,後台運營、客服人員查看圖片時,給圖片添加工號、登錄用户名等明暗水印,防止運營、客服人員將圖片外泄。

明暗水印

  • 明水印

​ 明水印是通過JDK自帶的Graphics2D實現的,其原理就是將圖片流轉換成java.awt.Image對象,然後通過java.awt.Graphics#drawImage(java.awt.Image, int, int, int, int, java.awt.image.ImageObserver)方法添加水印。

  • 暗水印

​ 暗水印是利用OpenCV包中的傅里葉變換實現的,原理如下:

水印原理

​ 利用OpenCV提供的傅里葉變換方法對圖片進行DFT轉換成頻域圖,然後合成含水印編碼的頻譜圖,然後再進行一次iDFT逆變換輸出含有暗水印的圖像。

3.2.2 圖片加密存儲

​ 為了防止用户圖片資料的泄露,對用户上傳的資料圖片都進行了RSA加密再上傳至公有云與私有云。

加密存儲原理

四、展望

​ 當前,信也科技金融業務仍然處於快速增長階段,日產生圖片量也在穩定增長,雖然通過公私雙活的方式解決了服務穩定性的問題,但同時也增加了高昂的服務成本。

​ 未來我們的建設主要集中在2個方向:

  1. 提高私有云存儲Ceph的服務穩定性和數據可靠性,弱化雙活機制,逐步將流量切換至私有云存儲。
  2. 私有云存儲上構建豐富的多媒體處理功能,包括支持圖片、視頻、PDF文件等對象的多媒體處理。

作者介紹

Alfred Gao,信也科技佈道師,高級架構師,主要負責用户中心、安全中心、私有云存儲等業務的架構設計以及落地實施。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.