最近几天优化了一下DidaOJ的部署

文章字数:863

最近DidaOJ的用户量开始上来了,想寻找一种尽可能正式并且成本能接受的部署方式。

分析

核心可能需要处理下面几个部分:

  • 站点静态文件
  • 用户图片
  • 站点Web接口
    • 运行程序
    • 数据库
    • Redis
  • 判题端
    • 运行程序
    • 判题数据
    • go-judge

结论

最终选择了以下几个服务:

  • Cloudflare R2
    • 用户图片
    • 判题数据
  • Aliyun
    • ECS
      • Redis
  • Tencent Cloud
    • EdgeOne
      • 站点静态文件
    • Lighthouse
      • 判题端运行程序
      • go-judge

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。

这次迁移之后,应该短时间内可预见地不会动了。

该内容采用 CC BY-NC-SA 4.0许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...