导言
从早期的门户网站,到后面的feeds流,再到如今的各种垂直行业的社区分享,一次次变更成就了近几年行业中的领跑者。从行业领先的微博,再看小红书、B站等等,绝对都是可以看到feeds和社区的影子。而其中跑不掉的原始素材便是基础的图片、音频和视频等。今天就来介绍基于腾讯云如何解决这些社区方案中原始基础素材的问题。
问题分析
前段时间的一个封闭开发项目中,用到了信息流的开发,期间涉及到了一系列典型的图文音视频场景。在介绍方案之前,我们先要来分析看下,当我们需要做feeds,做社区的时候,针对这些原始素材会遇到哪些典型的问题。
1、类型兼容
从类型来看,在做当前的社区功能或者feeds流时,主要还是在文本、图片、音频和视频这四类素材,当然我们的产品角度对这四类基本素材是可以相互结合的,如图文、多图、文本 视频等等。因此基本看下来,我们会需要对这些基本素材有支持存储、读取的功能等等。
2、数据安全
从数据安全角度,素材会分公有和私有,排列组合下来也就是需要有:公有读公有写,公有读私有写,私有读公有写和私有读私有写。不过其中的私有读公有写显然是没有该场景的,那么看下来就是需要支持:公有读私有写,公有读写和私有读写这三种读写操作。
3、数据量
从数据存储量角度,无论我们预估自己的产品会到什么量级,在后端架构设计上,存储是一定要做到可以水平扩展的,不然就是一个不合格的高可用产品,因此我们的素材在做存储方案时,也需要考虑到存储的扩展能力。
4、访问性能
从性能角度来看,这个问题比较清晰,因为无论是feeds流或社区产品,这些都是ToC类产品一定是需要高QPS的,也就是我们肯定是需要CDN相关能力支持的。
5、版权所有
从版权角度,如防盗链功能,可以防止不良网站盗用开发者的图片链接,盗取图片流量,给开发者带来经济损失;同时用户也会需要有对图片做一些水印保护的需求等等。
6、加载速度
从用户体验来看,更快的打开一个页面其实很重要,而现在所有的图片和视频都是高清、720P起步,那么我们就需要满足不同带宽下的不同分辨率视频流切换,同时对于图片或者视频封面图等,都是需要做预览功能,这样才可以显著提升页面加载速度和改善用户体验。
7、安全合规
从安全合规角度,也就是鉴黄、涉政等能力,在互联网行业尤其需要得到重视,否则会带来毁灭性的打击。
其实上面列出的这些待解决的问题还不是包括全部的,但是仅这些功能如果全部做出来的话就需要巨资打造一个上百人的团队花费上半年的时间(可能还bug不断,功能不止)。巨资还好,因为互联网行业最重要不是钱,但是时间,却是致命的。
因此,云服务就此而现,腾讯云的诞生就是为互联网创业团队或者公司去解决这些棘手的问题,让业务可以focus业务,下面我们就基于腾讯云解决方案来逐一化解上述的一个个问题。
对象存储 COS
COS,对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。
1、存储能力
也就是无论对于文本类文件、抑或是图片、音频和视频文件,都是可以存储于COS中。所以对于上面的第一个问题,通过COS已经可以完美解决。再来看COS生态,从当下来看,COS的读写支持已经到了十分变态的地步了,各种开发语言的API且不说,从js、java、go到ios、安卓和小程序等数十种SDK,同时也支持了大量的客户端工具,甚至当前的COSBrowser工具都已经在linux下可以界面化使用了,如下图。
我们这里不会详细的介绍SDK的使用方式,也不会对这些工具做开箱介绍,更多的是从解决方案的支持角度来讲解。
2、权限管理
下面让我们继续回到上面的第二个问题。首先,COS的存储是使用状态无关的分桶(下称bucket)机制,而针对于不同的bucket有不同的访问权限级别,在COS中支持的访问权限共三种:私有读写、公有读私有写和公有读写。这也就是说,在COS之下我们通过对bucket设置不同的权限,再将不同访问权限的文件存储于不同bucket之下,就可以完美的实现对访问素材的不同权限管理,如下图。
3、访问性能
同时,腾讯云 COS 的存储桶空间无容量上限,无需分区管理,这就是说明对于问题三的数据量问题,我们通过一个COS的bucket就已经解决了。不过,一般我们对于数据存储量和访问的QPS,也就是问题三和问题四总是同时考虑的。在COS中,单bucket的访问QPS是有一定限制的,从当下来看,单bucket有30000/s的读写性能,基本上在前期使用是完全OK的。如果需要考虑更高的性能场景,可以在业务层做一下一致性哈希,负载均衡的将数据存放到不同的bucket,如公有数据可以存放到demo-public-1,demo-public-2,demo-public-N等等,从而将存储的QPS能力可以水平扩展。
数据万象 CI
介绍完基础读写能力后,我们下面继续来看一些增值能力的支持。在问题5中,我们提到了图片的版权问题,这也是当下社区产品必须支持的一个基础功能了。这时候,就需要引入腾讯云的第二套产品,数据万象。
1、能力开启
数据万象(Cloud Infinite,CI),是腾讯云为客户提供的专业一体化的图片解决方案,涵盖图片上传、下载、存储、处理、识别等功能,将 QQ 空间相册积累的十年图片服务运作经验开放给开发者。目前数据万象提供图片缩放、裁剪、水印、转码、内容审核等多种功能,提供高效准确的图像识别及处理服务,减少人力投入,真正地实现人工智能。
看完上面这段介绍,基本上CI的能力大家也都知道了,这些功能极大的解放了我们的研发能力,而更关键的是实用角度的便利性。当下CI和COS早就已经完美打通,我们只需要前往CI控制台,通过预设权限,便可以在CI下直接绑定COS的bucket,而这些操作也十分方便,全部都是点点就可以完成,如下图。
一旦我们绑定完成后,再来看看CI的能力。其实CI的功能非常强大,基本的图片处理如缩放、裁剪,增值操作如水印能力,内容鉴别能力等等。
2、防盗链
那么,我们上面遇到的问题也就迎刃而解了,首先我们来看防盗链问题,腾讯云CI推出的防盗链功能,通过 HTTP 协议支持的 Referer 机制来进行相应的来源识别和管理,如下图所示,支持设置网站为黑名单或白名单,Referer 名单也支持多个域名。回车换行,一行输入一个,同时支持通配符。同时在开启防盗链设置后,可根据策略限定服务来源。
3、水印能力
再来看水印能力,CI同时支持可见水印和盲水印能力。首先我们来说一说这两种场景。
可见水印,就是我们社区图片中常见的场景了,CI支持了文本水印和图片水印的能力,文本水印比较好理解,就是例如图片中的用户ID,从而可以标明所有权。而图片水印,可以理解为是图片上覆盖另一个图片,在当下美图等产品中使用很多。
盲水印功能,通过该功能,可将水印图以不可见的形式添加到原图信息中,并不会对原图质量产生太大影响。在图片被盗取后,可对疑似被盗取的资源进行盲水印提取,验证图片归属。CI提供的盲水印功能拥有半盲、全盲和文字盲水印三种类型。
功能介绍完毕,我们再来看CI COS的结合所给开发者带来的解放是什么样的,简单看下下面两个url:
http://examples-1251000004.cos.ap-shanghai.myzijiebao.com/sample.jpeg
http://examples-1251000004.cos.ap-shanghai.myzijiebao.com/sample.jpeg?watermark/2/text/6IW-6K6v5LqRwrfkuIfosaHkvJjlm74/fill/IzNEM0QzRA/fontsize/20/dissolve/50/gravity/northeast/dx/20/dy/20/batch/1/degree/45
首先,我们来看两张图,视觉上看到的是,前者是原图,后者是加了水印的图片。而从域名角度,我们会发现两者依然是COS的域名,且url path的前面都是一样的。这说明了后面的?watermark这一参数实现了水印能力,也就是说,只要打通了CI和COS之后,代码无需任何改动,只需要根据产品逻辑拼接参数即可实现各种水印需求!这绝对是方便了我们的研发的很多时间。
4、图片缩放
同样的道理,我们再来看CI的图片缩放能力,我们继续给出下面两个url:
http://examples-1251000004.cos.ap-shanghai.myzijiebao.com/sample.jpeg
http://examples-1251000004.cos.ap-shanghai.myzijiebao.com/sample.jpeg?imageMogr2/thumbnail/!50p
原图还是上面的图片,而下面的缩略图也一样只需要通过?imageMogr2参数来实现即可。这个功能的意义是什么呢?我们前端APP或者页面在很多场景都需要展示图片列表,这时候需要很快速的拉取一个个图片,如果采用原图,图片质量过高,文件过大,会导致加载速度很慢,而如果只拉取缩略图列表,可以大大的降低了带宽,同时又提高了APP或者页面加载速度。
5、内容审核
CI支持对图片,视频,音频进行涉黄,涉暴,涉政,涉恐的审核,在控制台选择需要的审核操作,就可以对存储桶内图片,视频,音频进行审核。还支持对审核出的敏感文件进行冻结和人工复审,这大大提高了企业抗风险的能力。
6、视频处理
从快手抖音开始,视频流已经不是新鲜事了,而老罗加入直播带货,直接让直播行业进入了另一个维度。通过CI也能够对COS中存储的视频进行处理。
CI支持对存储在COS中的视频进行文件转码,视频截帧,视频转动图,智能封面的操作,只需要在控制台内创建任务,选择要处理的文件和对文件进行的操作即可。其中包含33种系统模板以及自定义模版,只需要在控制台上点击就可以对视频进行处理。对于输出路径来说,我们可以预置目标文件名的格式,这样极大的方便了前端同学对于诸如转码文件的获取。
当然了,CI的能力强大的远不止这些,还是建议大家多去看看、用用,一定可以极大的提升大家的研发效率。
内容分发网路 CDN
最后一部分,我们要说的就是CDN了, CDN的功能其实不用多说了,通过将站点内容发布至遍布全国的海量加速节点,使其用户可就近获取所需内容,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
这儿不会详细介绍CDN是什么,CDN原理等等了,还是要从解决方案的角度来说。其实很简单,一句话,上面说的这些诸如COS、CI的数据早已经和腾讯云CDN打通了。只需要通过简单的配置就可以完成CDN加速了,如下图所示。
总结
通过上面的这些介绍,我想大家基本上对于通过使用腾讯云中的诸如对象存储、数据万象和CDN等这些服务如何构建基础的社区或feeds流的能力已经有所了解,再遇到类似的需求,可以直接上手了。