每次安装部署开发环境都很折腾。不是这个依赖就是那个依赖,然后基开发资源如果有限的话就更头疼,有没有可能有开箱即用的开发环境呢。可以让新人一来项目,部署环境就像安装个exe文件那么简单。

rsync+inotifywait +wsl2

主要还是因为公用资源有限,代码解析速度很慢。

用wsl同步代码的理由

  • 服务器资源有限,但是办公电脑的配置很高,可以用办公电脑来做这件事
  • 只是在本地生成compile_commands.json和运行clangd服务器,并不需要很多依赖

谈谈rsync

事情起因是因为服务器配置有限,没那么好用。就用inotifywait来监听文件变化,然后触发rsync进行增量同步。rsync的增量同步大致就是在执行初期,remote会将每个dest文件的rolling checksum和checksum 组成列表发给local机器。本地机器将需要同步的文件分成多个chunk,每个chunk有对应的check sum和rolling checksum。这些chunk以rolling checksum 为key,存入hash table中。如果有哈希碰撞就在后面用数组链表来存value(check sum + chunk no)

前面说到,remote发过来的列表会和本地的进行比对,然后有不同的chunk就会发到remote进行同步。这里用rolling checksum的好处是,正常的checksum计算是每次都是全量的输入计算,但是rolling checksum有点类似于滑动窗口,只需要将当前值减去上一个,再加上下一个的值就可以。

更好的想法

其实这是一个比较糙的想法。有很多没有考虑到,一般来说,如果自己本地电脑的配置还不错,装个VMWare15.5.5其实更好一些(这个版本支持同时启动虚拟化),这样新人在配置环境的时候就可以开箱即用了!虽然代价是损失一些服务器运行的资源,毕竟虚拟机里运行服务器资源有限。但是个人开发环境并不需要高并发。

环境搭建无非是开发环境和部署运行环境。这两个都可以放在一个Docker里,然后通过NET模式 + 虚拟机的端口转发,vscode 用remote的方式连上workspace。

至于其他人的访问,如果都是同处在一个局域网下改改配置就没问题了。(相关博文在这里可以借鉴下:https://cloud.tencent.com/developer/article/1599108)然后用Docker配置开发环境和运行服务端,然后用端口转发的方式。

如果不是在一个局域网下,那么可以用rsync+inotifywait的方式吧。


推荐两篇讲rsync原理的博文

https://juejin.cn/post/6874919265917632525#heading-9

https://coolshell.cn/articles/7425.html/comment-page-2#comments