摘要:本文就以一个企业内部培训网站为例,拆解云上成本优化方案需要注意的点,抛砖引玉,帮助大家参考业务架构,合理节省费用。
本文分享自华为云社区《云上成本优化方案——以一个企业内部培训网站为例》,作者:云存储开发者支持团队。
越来越多的企业选择将服务搭建在云上,业务初期访问量、数据量都较小,成本问题还不显著。随着业务规模的不断扩张,云上的资源消耗也在不断增多,云资源成本开始成为一个不得不考虑的问题。本文就从一个企业内部培训网站为例,拆解云上成本优化方案需要注意的点,抛砖引玉,帮助大家参考业务架构,合理节省费用。
1. 业务背景介绍
某集团客户 A,内部业务系统中包含一个内部在线教育网站,原部署在线下 IDC 机房,为集团内部各地分公司部提供内部培训服务。网站除了提供点播服务外,还要在后台为讲师上传的原始视频添加水印,转换为指定清晰度,截取首帧作为视频封面,并隔固定时间截取一张截图方便学生跳转。现集团业务整体搬迁上华为云,需要考虑搬迁上云后成本问题。
2. 基础方案与成本优化点识别
在方案搬迁初期,客户考虑对系统做微量改动后上云,即系统整体架构不变,仅将存储介质替换为对象存储 OBS。为保证视频转码性能,采购一台 8U32G 服务器。在此方案中涉及的成本优化点全部集中在基础资源 IaaS 中,即计算、存储、网络,我们逐项目进行优化。
2.1 计算成本
对计算来说,最理想的降成本方案就是极致的弹性,不使用时不计费,使用时也仅出使用了的计算资源,而不是直接整台 8U32G 的服务器,然后大多时间资源利用率仅有 10% 以下。所以第一处改动就是通过使用华为云 MPC 服务替换其自建的转码服务,相较于自己采购服务器,且大多数时间处于闲置状态,MPC 服务按视频转换时间收费,H.264 标准转码包 5000 分钟仅 88元,成本极低。添加水印和截取指定帧的动作同样可以较由 MPC 完成。同时将所有网页静态资源均存储至 OBS 中,降低服务器压力,在不调整其他组件的前提下,可直接将服务器降级为 4U8G 规格,节省费用。可配合数据工坊 DWR 的工作流进行使用,在上传视频时自动触发工作流,进一步降低上手难度,详情参考 视频转码工作流最佳实践
当然,现在还不是最极致的弹性,如果想要进一步优化计算成本,应考虑通过使用 CCI 容器或改造为 serverless 应用,进一步压缩,限于篇幅暂不展开讨论。
2.2 存储成本
计算资源可以弹性伸缩,不用时候关机,但是存储资源则不可能不用时删掉,所以就要考虑合理规划存储类型,根据数据对性能的要求合理划分到不同类型的存储介质中,如块存储、对象存储、对象存储的归档存储等。
在当前业务中,转码过后的视频需要经常播放,但转码前的原视频、培训会议现场录制的视频则不需要经常查看,又不能直接删除。此时可以考虑使用对象存储的归档存储与深度归档存储功能,配置生命周期规则,指定部分目录下的视频超过一定时间自动转归档,再超过一定时间后自动转深度归档。
除此之外,即使是转换后的视频也不是所有都经常播放的,可以将上架时间长、播放次数少的视频也转换为归档存储,并配置归档直读功能,进一步降低存储成本。
除了视频外,该网站还存储了很多图片,往往同一张图片还要存储多份,如封面视频就需要有低、中、高清晰度分别的有无水印版本,共六个版本。此时可以考虑使用 OBS 自带的图片转码服务,仅需存储一张原图,在加载时通过添加参数自动转换清晰度或添加水印。
2.3 网络成本
网络成本是视频网站成本中不容忽视的一个大类,而且与可以事先规划的计算与存储成本不同,很多服务都会产生公网出流量费,每次请求会产生的公网出流量也有不同,无法做到精准的定量预估。不过我们可以针对以下几个问题进行分析,设计最佳的网络成本优化方案:
- 数据该从哪个出口出?
- 每月分别会有多少出流量?
- 数据能否进行压缩?
- 数据能否分片/分级?
- 数据能否在客户端进行缓存?
2.3.1 数据出口选择
在本案例中,共有三个位置会产生公网出流量,分别为 ECS、OBS、CDN,其按需计费流量费分别为 0.8元/G、0.5元/G 与 0.2元/G。所以,我们要尽可能的增加从 CDN 流出的流量,减少从 ECS 流出的流量。可以通过改造业务系统,将静态文件托管至 OBS,并通过 CDN 加速进行分发来达到此目的。可参照 CDN加速访问 OBS一文配置 OBS + CDN 联动。
2.3.2 通过预估流量合理购买套餐包
相较于直接按需计费,提前购买套餐包可以节省更多成本。以 OBS 为例,如若每月流出 100GB,按需计费时一年的流量费为 600 元,而提前购买包年流量包则仅需 411.59 元,节省了 27%。CDN 如果合理购买闲时流量则可以节省更多,具体可前往 OBS 官方活动页 与 CDN 官方活动页查看并选购套餐包。
2.3.3 数据能否进行压缩
现在主流的浏览器都已具备自动解析 gzip 压缩后的 html、js、css 文件,可以在静态资源转储至 OBS 时也可以利用该特性,简单来说就是将 OBS 中的静态文件进行 gzip 压缩,并配置 http 头域来告知浏览器自动解析。更详细教程可参见将 Vue.js 项目部署至静态网站托管,并开启 Gzip 压缩 一文,在节省网络传输流量成本同时也降低了存储成本。
除了文本外,图片也可进行压缩。图片压缩有几种思路,一是通过转换格式为 heic、avif、webp 等压缩效率更高的格式来进行无损压缩;二是使用一些比较知名的工具,如 tinyjpg等进行一些肉眼不可见的有损压缩;三则是在传输过程中,针对对图片清晰度要求不高的场景——如缩略图,使用 OBS 自带的图片转码能力,返回分辨率更低的图片。
2.3.4 数据能否分片/分级
对视频数据来说,很难在不降低肉眼观感的前提下进行压缩,但可考虑对视频数据进行分片,前端播放时仅加载当前播放位置前后片段,而不再每次都将全量数据都缓存至本地。MPC 的转码服务已提供了视频转 hls 格式的能力,将视频切分为多个片段,用户播放视频时,可随意拖动视频进度,会读取相应进度的分片文件进行加载。除此之外,MPC 还可以将一个视频转换为多种清晰度,可根据用户需要选择不同清晰度进行播放,既降低了网络流量费,也提升了用户体验。
3. 最终方案
综合上述分析,最终方案架构如下:
- 使用 DWR + MPC 服务进行视频转码和截帧,用户上传源视频后自动转换为不同清晰度的 m3u8 格式视频,降低计算成本。
- 配置 OBS 生命周期,定时将访问频次低的数据(如原始视频文件等)逐级转换为归档存储与深度归档存储,降低存储成本。
- 配置 OBS + CDN 加速,并提前购买 CDN 流量包,降低网络成本。
为简化费用对比,我们假设用户共 100T 数据,其中 20T 数据为历史归档数据,基本不需要访问,20T 数据为低频数据,不经常访问。假设全部用户每月共播放 10 万分钟,平均每分钟标清视频约 20M,这 1 万分钟的播放中 20% 时间可以播放低清视频(480P移动端),80% 时间播放高清视频(1080P),同长度高清视频大小为标清,也就是说总流出流量约为3.5T。
最终费用为原本的 67%,节省了 1/3 的成本。当然,为了方便理解,本文做了很多假设性的简化,实际项目可能会有偏差,但总体来说成本优化时可以从这几个方面进行考虑总是或多或少有点收获的,在此抛砖引玉,大家可以根据自己项目实际情况针对性的再次优化。