授权重构及微服务开发问题总结

项目回顾

重构目的

优化授权数据的存储方式,避免原先冗长的缓存计算

成果

无需再做定时的缓存刷新,据实施和客户反馈操作授权速度和流程度比原先有大幅提升

槽点和败笔

  1. 从目的出发业务基本无改动,完全搬运原先代码,也因此出现了一些纰漏
  2. 过度设计,ra-backend无意义的透传,首先侧重代码的清晰、可读性,再考虑其他规范,避免形式主义
  3. 缺少自测手段,过度依赖测试团队,效率很低
  4. 前期在基础组件花费时间过长,缺乏进度管控,后期赶工,代码质量缺少保障
  5. // 沟通问题

开发体感

业务代码

  1. 修改依赖授权数据的项目非常痛苦,要去了解原先的业务场景和数据格式后再设计接口,在后期测试时,这块花费了很大时间,出了bug难以排查
  2. 原先项目参数定义比较奇怪,使用-1表示否定,mongo支持undefined为查询条件

基础组件

  1. 缺少服务地址组件: 本地开发启动多服务联调比较麻烦,连接线上服务也需要不断修改配置文件
  2. log插件:线上报错信息不完整,没有显示具体的调用信息

工程化

解耦

  1. 服务拆分颗粒度 要与公司业务发展趋势相契合,不能生搬硬套教程,做适当整合(基础信息类)
  2. 避免类似ra-backend只做透传的项目
  3. 传入参数的校验,存在将前端传入参数直接透传查询的情况,需要加以验证和鉴权

模块化

  1. 因为docker构建缓存,私有包不自动更新,增加Jenkins配置或者写明使用包版本
  2. 私有包版本管理,不兼容问题

质量保证

  1. 最小单元测试 确保不出现语法错误(await、拼写)
  2. 健康检查,考虑开放http来提供健康检查,通过fx-rpc插件实现再调用rpc来自检

代码风格

  1. 下划线转驼峰
  2. 单文件代码行数,按controller映射service容易出现代码行数过大 需要做适当拆解

临时发布环境搭建

测试

测试准备

  1. 撤下老的项目,防止再被调用

自测能力

对复杂业务场景的自测能力

沟通

团队会议

  1. 回顾本周进度,指定下周计划,预防延期或及时做进度调整
  2. 对于有争议的问题由tl做决策避免拖延
  3. 确定责任边界,避免扯皮;回顾、调整目标,确保团队整体方向正确(避免无用功,有争议时从目标出发)
  4. 做好会议记录(记录决策)发给与会者

下阶段计划

rpc包更换

  1. 精简rpc包,剔除mq功能
  2. 使用egg agent,支持多worker启动

mq包更换

  1. 封装http版本的包
  2. 避免一个业务动作批量发送mq的场景(类似多段的分布式事务) 需要由业务侧做拆分

log

  1. 错误日志输出适配rpc,打印调用参数和traceId

减少rpc传输字段

  1. 禁用select * ,自协调参数输出

服务地址组件

  1. 暂定在本地开发使用,线上运行不依赖它
  2. 通过简单的声明即可获取服务地址,包括测试、预发、生产

技巧分享

在node中实现高效缓存
http://wmtcore.com/2020/04/23/%E9%AB%98%E6%95%88%E7%BC%93%E5%AD%98%E7%9A%84%E4%BD%BF%E7%94%A8/

反向授权性能优化
http://wmtcore.com/2020/03/20/%E5%8F%8D%E5%90%91%E6%8E%88%E6%9D%83%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/