本站图片、视频储存及处理方案
前言
本站是朋友圈模式,会有比较多的照片及视频,如果这些照片和视频都放在服务器上,先不说国内服务器带宽都是小水管,无法支撑视频的在线播放,以后文件会越来越多,日常备份和迁移都是很大的麻烦。
而且如果照片和视频都用服务器来处理,会占用大量的资源。至于先在手机上把照片和视频压缩、添加水印等,这是传统博客的做法,太麻烦了。本站既然是朋友圈模式,那应该是发朋友圈的体验,只需要选中照片,配上文字,上传发布即可,照片和视频的压缩、转格式、添加水印应该是在后端无缝完成的。
鉴于此,本站选择了腾讯云对象存储(COS)来存放照片和视频,腾讯云数据万象(CI)来处理照片和视频,腾讯云内容分发网络(CDN)来访问照片和视频。用阿里云的产品也可以,不过我网站用的是腾讯云服务器,自然而然用腾讯云的产品。
目录
正文
1、安装腾讯云COS插件
使用插件可以将上传的图片和视频实时同步到腾讯云COS,同时删除本地文件。
我用的是腾讯云官方出的插件:腾讯云对象存储插件
2、数据万象创建工作流
如图,我创建了2个工作流,分别是压缩照片和压缩视频的,当上传了图片或者视频时,会自动触发工作流,对这个图片或视频进行处理。
图片上传之后会把图片质量压缩为80%,并覆盖原图,考虑到以后文件增加带来的存储压力,先对原文件进行压缩。
视频也是一样的,我这里是把视频压缩成1280×720的尺寸,同时在视频左上角添加水印,码率自适应,最高2500Kbps,并覆盖原视频。没有选择固定码率,部分网络视频本身码率就很低,没必要还给他增加码率。
3、配置图片处理样式
一张图片会在多个地方使用,很多时候并不需要那么大的图片,如果通通都使用原图,会浪费很多不必要的流量。而如果是在后端生成多个尺寸的图片,很多尺寸用不上,又会浪费储存空间,不够灵活。
腾讯云数据万象的图片处理功能就十分好用,能实时动态生成多个尺寸的图片,我一共设置了6种方案。
拿800举例,这个样式我设置了图片缩放为长边800px的图片,图片格式转为webp,质量压缩为70%,右下角添加水印,同时去除图片的EXIF参数。
只需要在前台访问“图片地址!800”,就可以查看到这张被压缩过的照片了,其他样式也是类似,0是不缩放,500以上添加水印,500及以下不添加水印。
4、配置CDN
既然用了腾讯云的COS和CI,CDN也继续用腾讯云的了,CDN没哈说的,直接接入就行了,不过为了防止被人刷流量而倾家荡产,还是要做些措施的,比如开启防盗链,限制访问频率,下行限速,用量封顶等,下面是我的一下配置,根据个人网站情况配置,我现在网站就我自己访问,要是一天超过1G流量肯定是不正常的。
腾讯云CDN的优点是节点很多,但对于没什么访客的小网站体验并不是很好,用户访问的时候,最近的节点上大概率是没有缓存的,需要去对象存储取,对象存储里的文件经过数据万象处理之后,发送到CDN节点,再由CDN节点转发给用户,这一套流程下来延迟不会太低,以后考虑用服务器反代,或者选用更加经济的CDN。
5、访问效果
5.1、图片
这里有一张5.2MB的照片
上传到对象存储,自动触发图片压缩的工作流,原图质量压缩为80%,在对象存储里为1.79MB。
分别访问不同样式
https://file.dongyuwei.com/img/test.jpg!0
尺寸:4096×3072 大小:1.4MB
https://file.dongyuwei.com/img/test.jpg!2500
尺寸:2500×1875 大小:542kB
https://file.dongyuwei.com/img/test.jpg!2000
尺寸:2000×1500 大小:365kB
https://file.dongyuwei.com/img/test.jpg!800
尺寸:800×600 大小:58.1kB
https://file.dongyuwei.com/img/test.jpg!500
尺寸:500×375 大小:26.4kB
https://file.dongyuwei.com/img/test.jpg!300
尺寸:300×225 大小:10.0kB
由于图片开启了防盗链,直接访问图片地址是看不到的,可以打开这个网址查看:https://dongyuwei.com/html/test-img.html
在网站中的实际应用:
5.2、视频
这里有一个47.9MB的视频,视频时长15秒,1080P,60帧。
上传到对象存储,自动触发视频压缩的工作流,原视频尺寸压缩为720P,自适应码率1789kbps,帧率为60帧,左上角添加水印,最终大小为3.44MB。
查看地址:https://dongyuwei.com/html/test-video.html
到这里其实已经结束了,不纠结异地容灾的可以不用往下看了。
6、异地容灾
虽然腾讯云对象存储承诺99.9999999999%的可用性,但凡事总有意外,我做了个异地容灾,源储存桶在上海,备份储存桶在成都,有备无患。从网站上传一张照片,先上传到上海的源桶,再从上海的源桶实时同步到成都的备份桶。
因为使用储存桶复制功能要开通版本控制,而源桶使用了工作流,压缩图替换原图,但有了历史版本,就导致原图会成为压缩图的历史版本,虽然桶里显示的是压缩图,但实际上原图还在占用空间。这里可以用生命周期功能解决。
备份桶的生命周期,1天之后删除历史版本。
同时2天之后把文件沉降为深度归档存储,毕竟两者之间存储费用相差10倍。
之所以没在存储桶复制的时候就选择深度归档存储,是因为多了个原图的历史版本,深度归档存储时间不足180天,按180天计算,1天之后就把历史版本删除了,按180天储存费用来算非常的吃亏。
深度归档存储的文件不能实时访问,需要提前申请,正好适合作为备份。
源桶里的生命周期,我选择的是60天后删除历史版本,如果自己误删除,或者被黑客删除,还可以在历史版本里找回来,时间设置的长点没关系,源桶里的文件都经常访问,所以用标准存储就可以了,不需要沉降。
7、费用
本站主要使用了对象存储、数据万象、CDN,可以直接去腾讯云官网查看价格。
活动的时候买资源包还是很划算的,新用户官价1折起,老用户基本上也能官价的5折左右。
站长作为腾讯云前几批老用户,每个月赠送50G的对象存储容量、200万次请求、10G外网流量、10GCDN回源流量。
老用户每个月可以主动领10G的CDN流量,以前都是每个月送60G的,现在改成10G了,良心云成凉心云了。
所有用户每个月都有10T的数据万象图片处理包,用来处理图片的压缩、转格式、添加水印等、正常使用怎么都够了。
目前网站使用的所有服务都在免费的额度里,就视频上传之后的转码服务没有免费额度,每个月要扣钱,我网站用的都是1280×720的分辨率,一分钟3分钱,用多少算多少。
空空如也!