大项目复盘3|青训营笔记

127 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第16天。

今天主要针对大项目已经实现的东西进行复盘,回顾一下大项目的存在的问题和演进的可能性。

项目总结与反思

目前仍存在的问题

  • redis 没有处理 expire,可能会出现大量缓存同时过期,缓存雪崩的问题。
  • 个别服务并没有考虑到删除逻辑,对于脏数据可能会出现服务异常返回的情况。
  • 对于缓存和数据库一致性问题,我们采用的是:「更新数据库 + 更新缓存方案」,该方案在「并发」场景下无法保证缓存和数据一致性,虽然我们能直接在此基础上加「分布锁」锁,但是会存在「缓存资源浪费」和「机器性能浪费」的情况。

已识别出的优化项

  • 权限管理可以根据具体业务优化细分。
  • 测试方面通过 apifox 进行的手动测试和 mock 测试,没有书写相关功能测试脚本来适配回归和冒烟测试。
  • 并没有配置 CI / CD 自动化流程。
  • 日志系统没有进一步处理。
  • 学习并使用 proto3 时遇到了 json tag omitempty的问题,后续根据框架和该语言特性进一步优化返回场景。
  • 对于双写一致性问题,可以采用「先更新数据库,再删除缓存」方案,考虑到该项目数据库是采用[读写分离」,会有「主从库延迟」,采用「延时双删」策略(延时消息(MQ))可以缓解此问题。

框架演进的可能性

  • 对 redis 进行部署哨兵和集群。
  • 利用 k8s 实现容器编排。
  • 将业务模块从不同维度上进行区分,优化微服务拆分策略。

项目过程中的反思与总结

在进行项目开发时,太倾向于注重业务实现,没有做深度思考,导致一些模块并没有优化完全;另一方面,由于团队内人手很多,没有即时协同和沟通,出现了前期学习进度缓慢和代码风格不一致等问题;也由于前期的整体项目设计时有疏忽遗漏,导致后期开发出现了不必要的难点,项目进度稍显拖沓。