背景
我司产品业务环境中,依赖腾讯云互动白板的PDF静态转码功能,需要将大量的PDF静态页面转换为图片之后,供前端展示。
腾讯云TIW静态转码功能当前问题
- 云厂商服务,客户隐私文件有泄露风险。
- 异常问题需要联系云厂商技术支持人员处理,处理链路长不好掌控。
- 云厂商产品的功能点不会随我司需求为发展方向。个性化不好。
- 公有SAAS服务,和其他公司公用一个资源池,有性能互相影响的风险。
- 腾讯云的互动白板TIW有很多功能,我司产品其实只使用到了其中的PDF静态转码功能。
- 腾讯云费用较贵。费用计费项多。IT成本浪费。每月该项费用1W+。
- 白板使用时长费:初始化白板到使用完毕的时长累计。
- 静态转码费:2元/千页
- 月功能基础费:每个月固定1000元预付费,不管是否使用都收费。
程序目标
- 该程序代替腾讯云的PDF转图片功能。或者互为主备(我司业务程序优先使用该自研程序进行转码)
- 期望能以最少的计算资源/存储资源达到较为稳定安全高效的企业级PDF转图片功能。
程序依赖
Item | 说明 |
---|---|
ImageMagic | 安装最新版即可,使用其gs命令转码。 |
golang | 版本:1.21.0 |
gin | 版本:v1.9.1 |
mysql | 版本:5.7 |
redis | 版本:4.0 |
rabbitMQ | 版本:3.6.5 |
程序大致逻辑
- golang编码,使用gin框架提供高性能api服务,对标腾讯云TIW静态转码功能,提供2个接口,1个启动转码接口,该接口为异步处理,返回任务ID,主要逻辑是将具体信息发送到RabbitMQ队列,启动Worker异步的去消费通道里的任务(使用ImageMagic的命令对pdf文件进行转码)。另外一个是查询转码任务状态接口。
- 接口使用gin框架的middleware中间件提供认证、限流功能。
- 整个程序的设计考虑到了性能、健壮性、限流、转码效果、接口出参的简明性。
程序现状
- 该程序已经用于生产环境使用,正在陆续代替了腾讯云TIW。
图片展示
1.发起转码任务
2.日志
3.查询转码任务状态
4. 数据库记录
5.业务程序上使用pageCount遍历将imageBaseUrl和1.jpg(n.jpg)拼接即可访问到转码之后的图片。
第1页:
第8页:
业务可视化监控
最后,可以使用grafana采集数据库时序数据信息,进行业务数据展示。
记录
本项目由本人独立开发完成。目的是帮助公司大幅度节省腾讯云TIW的费用。预计每月会节省1W+。
另外,由于golang程序并发的性能以及可快速部署的特点,结合云厂商的弹性伸缩基础组件能力,稳定性&性能可得到很好的保障。