博客迁移服务器,使用单体架构
柏舟 08-10
这篇文章简单记录一下博客迁移和下一步开发计划。阿里云购买的3年云服务快到期了,1核2G内存的服务器续费要450元每年,确实有点贵。找了一下阿里云的特惠活动,换成99计划的99元2和2G内存服务器,但是没找到如何直接迁移镜像。所以花了整整两天时间重构博客代码,然后迁移都新的服务器上。
新的架构:单体,直接读取文件
我还在上本科的时候就特别痴迷于微服务,当时还看了《数据密集型应用系统设计》,但是现在发现都是脱了裤子放屁。随着计算机性能的飞速提升,对于一般公司,单体的数据库绝对够用了。我只能说本科还是太闲了,有大把的时间干自己的事情,写这博客和用户认证服务可能加起来不超过两周,但是调docker的network这些花了好久。不像现在,我花了整整两天时间搞迁移,还要值不值那400块钱。
我对之前版本最大的不满意就是太复杂了,后端用rust和graphQL写的,前端还要写graphQL的语句,不仅难调,增加功能也很复杂。我再也不想又是操作数据库表格,又是debug后端,还要改前端graphQL的scheme。
所以我花了一天时间重写了服务,改成单体架构而且直接读取本地文件,删除了登录、后端和数据库。其实我使用cursor的agent花了10分钟就写完了,大多数时间是在debug,然后写临时脚本将原始的数据库导出成本地格式,然后合并本地文件。这个过程花了大量时间。
现在新的流程是直接本地写完,然后执行一个编译命令,得到以下目录:
articles/
1.md
2.md
...
meta/
articleList.json
topic.json
最后直接scp上传云端。虽然不像以前登录,然后在后台填表单方便,但是对内容的控制上灵活太多了。而且以后开发新功能也很方便,比如增加一个观看次数和点赞次数的功能,我就只需要在meta下面加一个json或csv文件,每次访问读写修改一下。
我感觉以前还是被数据库这些思路限得太死了,毕竟刚学web的时候教程都是起一个数据库,然后写个后端和前端。现在对这些东西有了更深入的认识,使用上也更加灵活。也不会觉得单体架构会过时,不会觉得在运行时频繁读取本地文件有什么问题。当然啦,底层的数据对象接入是抽象了的,可以同时兼容读取文件模式和GraphQL模式。
数据迁移
最让我意外的是迁移还比较顺利,迁移博客、nginx和证书都非常顺利,花费时间最大的是迁移是gitea。不仅要导出仓库和数据库的信息,设置ssh直通花了太多的时间。迁移博客倒是意外的顺利,还是单体项目爽啊。
干过这些东西的都知道,写代码其实不怎么花时间,debug也还好。搞cmake这些编译工具,配环境,配配置文件才是究极折磨。可能你在测试环境还好好的,一到生产环境瞬间爆炸。关键是不是所有的东西都支持或值得流程化,像证书和服务器的nginx都不好脚本化,最后还得手动操作。
总结
比起刚学的时候,设计模式上的应用更加娴熟,对技术应用的范围更加精准和自信。最重要的是,我现在的开发思路和3年前完全不一样,因为我的时间是真的很值钱。这次迁移也为以后的开发打下了良好的基础,我老早就想加入反向链接、点赞和浏览次数了,只是老架构开发起来太花时间,所以一直没弄。这周趁服务器到期一鼓作气把服务给迁移了。