宇宙安全声明:不涉及工作项目内容
流程化的东西忍不了一点
值班一般就俩事,回复问题/工单+查看报警/指标。因为我在一个新组建的团队,前者尚且没有太高的重复度和频率。报警就不一样了,因为是刚上线不久的服务,偶尔有考虑不周的地方。另外报警触发的条件也有根据实际流量调整的过程,刚开始流量低而且担心bug影响变大想把它扼杀在摇篮里,阈值设置得比较低。导致每天有多次报警,每次都去查属实头大。
在过了三次轮班后实在忍不住了,寻思我去查的过程大部分都是重复的确定的,太适合用脚本跑了。正好很久没写python了手痒痒,于是就有了我人生中的第一个上线的Bot🤪🤪🤪🤪🤪
实现和想不是一码事
报警会推送到我们的团队效率工具Slack(外企用的多,类似飞书钉钉)。自然就得建一个Slack bot来自动分析回复报警消息、定时发送健康指标。当然实际野心也不至于此,还有一些额外的功能就不提了。需求有了,恨不得立马写代码调API部署。还是太年轻🥵。
我为了这个简单的值班bot大概经历了这些:
- 和mentor、leader对需求和预期
- 官网现学如何构建运行Slack bot
- 注册slack QA并测试hello world版本的bot
- 注册创建应用程序
- 提了三个工单,保证Bot能够访问到秘钥系统、日志系统、报警平台系统。infra工单处理速度感人
- 出Bot底层设计文档,描述背景需求、设计实现、部署方案、预期效果收益等。好在不涉及业务,没有必要过审,不然得更久
- 到这个时候才开始写代码。代码和文档是互补的,我往往会根据代码实际处理修正之前的文档,或者文档里突然有一个优化的想法,对应改代码。
- 端到端测试。Happy unhappy都得测。
- 提工单进行脚本Bot安全审查,回复内容的保密程度必须足够低、只能在内部系统运行
- 在Slack正式环境中申请安装Bot,会拿到新的秘钥,需要更新确保不同Slack环境加载相应的秘钥
- 准备打包部署。写Dockerfile(脚本引用), 打包脚本(jenkins会用),K8S配置文件(infra部署会用)。docker基础镜像的坑,事实证明还是用一个下载量大的容易跑起来。
- 部署、测试、修正
- 更新文档、写用例
- 准备展示,根据反馈修改
虽然我事先也预计会比我想象的要复杂一点,会有写文档开会聊之类的沟通工作。要达到成功上线丝滑回复报警的目标,细节之多甚至超过了核心逻辑本身。
ChatGPT时代下的工作模式
虽然公司还没有放心到让员工用copilot。但是GPT的好大家都心知肚明了。我的实践观察是chatGPT > google。chatGPT的伟大之处在于它能完整回答一个复杂的问题,虽然偶尔会有细节上的错误所以我不得不细读校验他给的代码。
在google称霸的时代,我总是只能把一个我直觉上想到问题继续拆分成多个涉及到语言或者框架基础的小问题,分别查到答案后再按我自己的逻辑组装成一个能解决我最开始问题的代码段。
GPT帮我省掉了拆分问题组装答案的过程,取而代之的是简单的读代码&追问。查询效率保守估计提升2倍
经历了这次“合作"开发上线,我对GPT的信任也提高了。当然光靠GPT还是不太够,除了它偶尔的buggy回答以外,官网文档快速开始等章节还是比它给的入门解读要好很多;公司内部知识库还是得自己查
二八定律之核心和边缘代码
核心:happy case(socket&API交互、数据处理、数据结构映射);边缘:unhappy case、 test、exception、log、config、enum、util、retry等
Unhappy case特别重要,因为写文档、代码的时候能考虑到的例子是很有限的。测试保证Bot不会因为某种exception乱回复一个迷惑的消息甚至是挂掉。确保只回复打算回复的报警。能带有自动&人工重试功能等等,这样在99%的情况下都能及时拿到回复
画在设计时序图里的内容也就接近一千行。在test偷懒只写了一部分的情况下,总行数直接飙升到了接近三千行。
二八定律之写代码和非代码工作
十几个步骤里也就两三个步骤是专注在写代码上,更多的是非代码的工作:沟通及提工单、设计及出文档、测试优化、上线及展示。
写代码很容易,写符合实际需要的、能让所有人理解认可的、稳定高效运行的代码?不简单!
当设计和需求敲定的时候,代码其实已经跃然纸上了,我估计不远的将来,这个从设计到实现的“翻译”的过程也可以放心交给GPT
Bot重在玩耍,实际业务第一
成就感?有但不多。用python async风格+新的报警平台SDK成功写了个稳定能跑的slack bot,有自动回复分析报警的功能,我应该还是公司里的头一个。跑起来那一瞬间还是很骄傲的。
值班bot虽然方便且任务复杂度不低于大多数业务需求,但是实测讨论的优先级还是很低的。像我这样想玩一玩Bot提升效率还是很有趣的。但是有机会还是多在业务上创新吧。为公司、客户创造价值,提升可用性&利润,才是业务开发团队的第一要义。
评论区