作者 | Alfred Gao
编辑 | Ken Zheng
信也科技经过12多年的发展,已积累1亿多的用户,每天都会产生百G级的用户图片资料。2019年之前由于业务的迅速发展,用户的图片资料为确保安全,采用加密、切片技术存储在多个公有云上。公有云的稳定性大部分时候都宣称能保证99.95%的服务可用性和99.9999999%的数据可靠性,直到某云服务商发生了“数据丢失事件”,才意识到数据的可靠性完全不能依赖公有云。同时,信也科技是一家科技金融公司,对用户图片资料的安全性有着金融级的要求,综合多方面因素,我们需要建立一套私有的对象存储了!
既然选择建立一套自有对象存储,就会面临着自研 or 开源的选择。如果自研一套分布式文件存储,我们需要相应的人才储备,至少需要存储架构师、存储产品经理、存储运维工程师、存储开发工程师。基于公司的现状,筹备这一套研发队伍,无论是资金成本还是时间成本都无法满足需求。鉴于此,只有选择开源产品一条路可以走。
在对开源框架选型之前,需要先了解信也科技的用户图片资料在业务中的使用场景。信也科技的图片资料主要使用场景是对用户进行实名认证、OCR、人脸识别、活体检测等用途。在助贷业务中,也会将用户资料授权给机构进行二次认证,同时也会给内部运营、客服进行人工审核、信息确认等用途。
确立了开源的路线之后,下面要做的就是对开源产品的选型。在社区搜索会发现,目前有五个主流分布式存储技术,分为Cehp、GFS、HFDS、Swift、Lustre,其中GFS/HDFS/Lustre属于文件存储,Swift属于对象存储,而Ceph可支持块存储、对象存储和文件存储。详细对比如下表:
分布式存储 | Ceph | GFS | HDFS | Swift | Lustre |
---|---|---|---|---|---|
平台属性 | 开源 | 闭源 | 开源 | 开源 | 开源 |
系统架构 | 去中心化架构 | 中心化架构 | 中心化架构 | 去中心化架构 | 中心化架构 |
数据存储方式 | 块、文件、对象 | 文件 | 文件 | 对象 | 文件 |
元数据节点数量 | 多个 | 1个 | 1个(主备) | 多个 | 1个 |
数据冗余 | 多副本/纠删码 | 多副本/纠删码 | 多副本/纠删码 | 多副本/纠删码 | 无 |
数据一致性 | 强一致性 | 最终一致性 | 过程一致性 | 最终一致性 | 无 |
分块大小 | 4MB | 64MB | 128MB | 视对象大小 | 1MB |
适用场景 | 频繁读写场景 | 大文件连续读写 | 大数据场景 | 云的对象存储 | HPC超算 |
由于信也科技的业务场景大多数都是小图片的文件存储,可以将选择范围直接缩小至适合小对象存储的Ceph和Swift。另外,信也科技同时也是一家科技金融公司,对数据具有安全性、强一致性等需求,且对图片资料需要频繁读写的场景,最终确定选择了Ceph。
引入Ceph之后,将图片处理分为了对象流服务,资料服务、对象存储网关服务和离线图片处理服务。为了保证数据的稳定性和高可用性,将公有云与私有云融合做成双活机制,确保用户图片资料的信息安全,所有用户的图片经过RSA加密之后进行存储,然后将公钥下发到图片使用方进行解密。
由于在引入Ceph的过程中,考虑到整个技术团队对Ceph的掌握能力处于初级阶段,以及服务的整体稳定性,采用了公有云与私有云的双活模式,通过双写公有云与私有云,并将链接的hash映射存储至DB中,当公有云或私有云某一方出现故障的时候,能够自动进行切换。
为了保证用户图片资料的安全性,后台运营、客服人员查看图片时,给图片添加工号、登录用户名等明暗水印,防止运营、客服人员将图片外泄。
明水印是通过JDK自带的Graphics2D
实现的,其原理就是将图片流转换成java.awt.Image
对象,然后通过java.awt.Graphics#drawImage(java.awt.Image, int, int, int, int, java.awt.image.ImageObserver)
方法添加水印。
暗水印是利用OpenCV包中的傅里叶变换实现的,原理如下:
利用OpenCV提供的傅里叶变换方法对图片进行DFT转换成频域图,然后合成含水印编码的频谱图,然后再进行一次iDFT逆变换输出含有暗水印的图像。
为了防止用户图片资料的泄露,对用户上传的资料图片都进行了RSA加密再上传至公有云与私有云。
当前,信也科技金融业务仍然处于快速增长阶段,日产生图片量也在稳定增长,虽然通过公私双活的方式解决了服务稳定性的问题,但同时也增加了高昂的服务成本。
未来我们的建设主要集中在2个方向:
作者介绍
Alfred Gao,信也科技布道师,高级架构师,主要负责用户中心、安全中心、私有云存储等业务的架构设计以及落地实施。
更多福利请关注官方订阅号“拍码场”
好内容不要独享!快告诉小伙伴们吧!
想加入我们?长按下方二维码!
喜欢请点击↓↓↓