2023年1月27日,今天是大年初六
总想找时间总结过去的一年,但是过于沉迷游戏,拖延到今天,啊哈哈哈(尴尬).
今天回到福州,坐下好好总结一下去年.
前言:
过去三年的疫情,整个社会面发生了很大变化,口罩罩在大家嘴上,但悲观罩在大家心里.
经常能收到一些负面信息,哪哪又封了,哪哪又停了.
后来又蔓延到福州,以致于制定好的计划,被打乱,被延后,因此也产生了很多负面情绪.
但是好在地球依然在转,太阳依旧升起.大家都还是向阳而生,努力生活.
回首:
往前倒数13个月,是项目仓库初建的日子,从0开始搭建一套后端框架是我去年的主旋律.
得益于过去几年的经验还有教训,这件事对我来说,做起来还是比较顺利的.
从最开始的收集需求,总结经验,参考资料,到后来慢慢成型,慢慢丰满,就像是怀胎十月,点滴辛苦,换来新生.
接下去的内容很技术,非技术的朋友可以关了,哈哈哈,但好在大多数朋友都是技术出身.
很自然地回想起几年前的自己,对老代码缺乏敬畏,对改变缺乏计划,很无知,也很迷茫.
经过这几年,设身处地地思考以后,明白了大多数的设计是要做取舍,要学会克制.
设计时看似理工思维,却又不全是,因为并不是只有一条路才是正确的,但又需要有一条路让大家结伴同行.
行动:
首先我们从最简单的分层架构开始,把规矩先立下.
明确了层间依赖关系,明确了代码的规范,明确了代码审查的制度和方式,更明确了代码的整洁统一.
很多人会纠结oop还是函数式,又或者其他的编程范式,在我们看来最终是要让代码可读可维护.
那保持所有人在同一个思维惯性上编码才是最核心的需求.
所以无论是集群内的服务还是服务内的不同模块,我们都选择了oop,因为大家都明白它怎么运行,它怎么书写.
其次就是做了大量的基础组件封装,这一块因为有过去的经验,以及足够的时间,所以产出很高.
做了lua层的基础数据结构的重写,做了日志库的c语言的库封装,做了分布式的广播,分布式事件,分布式的主从同步,分布式锁等等类库的封装.
因为效率高,时间足够,我们也写了所有的单元测试.至于为什么造了这些轮子,因为找不到匹配的,同时又能让很多业务场景简化.
再来就是来自于上级的支持,我们对过去的数据存储方案做了重新选型和重构.
我们又在不同的数据库上层加了oop的封装,让用的人不关心怎么持久化,让将来可能的数据库替换做到简单.
同时,在业务层面,我们对某一类必须的业务做了抽象,更多的配置化,更少的代码量.
针对分布式集群做了注册中心和sidecar的支持,让整个集群更易于分布式管理.
业务上也做了些创新,在某些场景下尝试更易于扩展的代码组织形式.
比如引入决策树到世界地图的业务,让变化的部分由策划可视化编辑.还有世界地图以及aoi的实体和组件的抽象.
然后就是大量的业务需求,此处省略一万字.
接下来是做了大量的配套工具,包括重写了容器的dockerfile,以及部署的compose文件,将所有的第三方应用容器化.
同时cicd相关的,重写了jenkins的python脚本,集群本身的shell脚本,apollo在python,shell和lua层的客户端封装.
引入了prometheus grafana的性能监控方案,做到每一个服务的每一个接口都能监控到.
引入了基于jaeger的opentrace链路追踪方案,消息走到哪,用了多少时间,再也不会灯下黑了.
引入了基于elk kafka filebeat的分布式日志集中方案,希望bug无所遁形.
引入了基于apollo的集群配置管理方案,多台机器的配置,一站式管理.
重写了qa用的测试框架,让内存只用到原先的20%的同时,释放的压力却能翻倍.
加入了研发环境下非侵入式的热更,让组员在改动代码时做到无需重启就能生效.而且是在ide上一键生效,算得上所见即所得了.
发布了项目定制的vscode插件,把很多代码模板,甚至清理数据库都集成到ide上,一键解决.
遗憾:
虽然我洋洋洒洒写了一大堆,完成了很多工作,但是却也留下了些许遗憾.
还没有做到真正的持续集成和自动部署.
还没有做好组内的技术分享和学习氛围营造.
还没有做monkeytesting,容灾测试.
还没有真真正正地接受玩家洗礼.
最大的遗憾是头发越来越少了.
寄语:
如果有人能看到这里,估计是个技术宅.
那么你可能会发现我用了很多我们,这是因为我们是一个团队,也感谢团队里的每一个成员都贡献了不少自己的头发.
那么,希望2023年,这些遗憾都能被消除把.
彩蛋:
2022年,对我最大的冲击,是随着aigc的发展,越来越感到危机和紧迫,并非只关乎我的行业,更多地是对全行业的压力.
无论身处于什么行业,一觉醒来,都可能会被ai取代,只能寄希望于保持进取心,持续进步,才有可能让它为己所用.