最近花了不少时间把反代服务器用rust进行重构,昨天完成了。
主要是给自己用的,现在这网站就由这个版本承载前端请求。系统为windows 2008 R2 sp1,古董了。但是古董的好处就是我所需程序都可以正常运行,而系统自身使用cpu和内存、硬盘都很少。
捣鼓这么个东西,主要是我有必须使用windows的需求,但资源使用率又不高,所以想着顺带做个前端节点,也免得长时间空转。
实际搞下来很费劲,因为新版的go和rust都不再支持这种古董系统,所以要多次尝试旧版的库,而库的api变动还挺大的。。。
最终这个版本,已经是第四次重构了,实际上第三次的版本是功能最强的,与之前的go版本有的一拼,比nginx那种弱鸡强大太多了。
而go版本,对标的就是cloudflare的功能。
这么说吧,当你深入进来做这个事情的时候,你会发现用nginx做cdn是一个很痛苦的事情,基本就是个阉货,除了反代,啥球功能都没有,如果做插件,那费劲程度太大,所以我一开始就选择自己干。
按照cloudflare的数据,每秒4000次,说真的,算个球!也不算算他多少机器啊,几万个机器平均每秒几千次,哪怕一个节点几千次,我这全功能程序一样很轻松。所以真心没觉得他牛b到哪去。
孩子也拿到高中的录取通知了,这几个月跟做梦一样,考前为了不影响他,我有半年时间都跟做贼一样,玩两盘游戏都要趁他不在家,考前一周直接全家到考点跟前住酒店,每天从早到晚伺候着,好在考上了。
这货实际上是逆袭了,初中几年一直倒数前三名的人,居然中考进入了中等名次。为了体考分数,给他大补了半年的牛肉,综合下来分数还是不错的,也算松口气了。
后面就不指望了,都跟他明说了,希望他上高中只是因为这是人生比较重要的阶段,有这个经历就行,能考上大学最好,考不上算求。高中了,能学就学,学不会就睡觉,无所谓,老子不期待你学业有成,反正路都给你铺好了,高中你混就行了,哈哈。
阶段性,我也该歇一下了,休整一下,我要努力赚钱了。
=========================
2025.08.07 更新
咬了咬牙,又花了两天强化了一下,把rust版本也升级为全功能版本了,目前与go版本的功能对比,大概在98%左右,还有一点点小毛病,抽空搞一下就完事了。
能这么快增加这么多功能,主要是上个版本把功能都做完了,却发现底层有些问题很难搞,如果解决的话代价太高,所以就直接重构了。所以这两天把之前的处理器代码直接拿过来略作改动就可以用了,简单调试一下排除一些接口的小毛病就直接用了。
得益于我设计的优秀架构以及rust的强大,此版本是让我很满意的一版了,在5个站点全功能配置的情况下,程序自身内存使用仅仅3.4M,而功能很强。。。
暂时能想到的唯一缺憾就是配置文件偏复杂了,json的。但是格式化配置的优势,是便于api统一运行时管理,便于热重载,并且不太容易出错。
功能强到什么程度呢,其实有许多功能我自己都用不上,起初只是想对标cloudflare的功能,因为我确实看到他有一些很精巧的设计,从技术来讲其实都很简单,但是把合适的东西放在合适的位置,就可以展现很强大的功能。
比如,minify这个,其实就是简单的对字符串进行一些处理,比如删除无意义的空白、换行、注释等等,但是对一个访问量巨大的网站或者对CDN这种场景来说,这个功能可以较大幅度提升用户体验,而且还节约用户与运营商的成本。当然说起来也简单,但实际搞起来并没那么容易,我也是用了较成熟的库,但也发现比较容易让某些页面变形。。。
再比如,据我观察,实际上现在的浏览器大都支持zstd和br,所以现在还把gzip作为第一优先,这就是不合适的选择了。所以我这里做了压缩算法的优先级设计,在确保浏览器支持的前提下,优先选择最佳算法。但是作为缓存节点的身份,需要面对一个艰难的抉择。
比如缓存的算法是br,而遇到一小部分不支持br的浏览器,那么就需要解压+重压缩,这样很明显会消耗cpu时间。但是gzip确实功力也太差了,而且gzip本身也比较消耗cpu,所以这是一个艰难的选择,可以从配置文件直接设置存储成gzip,这是最省事的,但是这次我决定追新一把,把zstd和br作为优先算法。