最近DidaOJ的用户量开始上来了,想寻找一种尽可能正式并且成本能接受的部署方式。
分析
核心可能需要处理下面几个部分:
- 站点静态文件
- 用户图片
- 站点Web接口
- 运行程序
- 数据库
- Redis
- 判题端
- 运行程序
- 判题数据
- go-judge
结论
最终选择了以下几个服务:
- Cloudflare R2
- 用户图片
- 判题数据
- Aliyun
- ECS
- Redis
- ECS
- Tencent Cloud
- EdgeOne
- 站点静态文件
- Lighthouse
- 判题端运行程序
- go-judge
- EdgeOne
Cloudflare的R2存储不按流量计费,而是按照存储空间和操作次数计费,在当前访问量下成本极低。
EdgeOne腾讯云正在推广中,有免费站点的额度,测试下来国内访问速度比Cloudflare提供的Pages还是要强不少的。
阿里云和腾讯云各有一台额度的优惠价格,因此可以用来跑长时间运行的程序。
Web后端接口使用了阿里云的函数计算,按量计费,比起直接在ECS上部署稳定性更强。
数据库选择了阿里云的PostgreSQL,目前成本也比较可控。
杂记
DNS代理
目前didapipa.com域名的DNS记录托管在Cloudflare上,它提供了DNS代理服务,可以把http站点转换为https,并且提供了分析和加速功能。
不过测试下来在国内环境下,这个变成了一个降速优化,因此目前关闭了这个代理直接走国内云服务。
不过这样的话需要自己解决以下ssl证书,目前临时申请了3个月有效期的,需要再做一个自动续签机制。
数据库
数据库在本次调整中,由Mysql迁移到了PostgreSQL。
动机是之前调研的时候发现Dify用的是PostgreSQL,虽然之前也多多少少听说过,但一直没有事件。趁着这个机会,又深入了解了一下,发现还是比较好用的。而且本身也是开源免费的产品,基本上可以当作Mysql的上位替代产品来使用。
于是在改造了一批接口之后,把数据库整个迁移到了阿里云托管的PostgreSQL上,目前看来也挺稳定。
说起来这个系统做完之后都迁移了好多次数据库了,起初选择的MongoDB,从各个系统导入数据时就一通折腾。
后面为了减轻部署成本,选择迁移到了Mysql,期间又顺便做了一些字段整理,导致了零零散散没发现的BUG。
这次迁移之后,应该短时间内可预见地不会动了。