大项目复盘|青训营笔记

121 阅读2分钟

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

今天主要针对大项目已经实现的东西进行复盘,谈一谈大项目的安全模块、服务部署等。

安全模块

  • 在书写 model 层代码时,利用 gorm 库进行操作数据库,并尽量避免使用原生 sql 语句和字符串拼接的方式来保证不会出现 SQL 注入问题。
  • 使用 JWT 进行权限管理,并通过 Hertz 的路由组,中间件保证路由的权限分明并且即时判断 token 有效性和未过期。

服务部署

  • 单体架构中(V1.0),我们使用本机的 redis,MQ 和远程的 Mysql 作为持久层,在启动时利用 /boot 下的各个初始化函数启动,配置读取上,我们利用 viper 框架对私密配置进行读取。
  • 微服务架构中(V2.0),我们利用 docker-compose 对项目代码和环境进行部署,由于环境依赖,我们分成了环境 docker-compose 文件和微服务部署文件分别部署,其中微服务采用多副本和动态节点的方式部署。

其他模块(包含架构启动设计,日志记录,运行日志监测和性能监测,单元测试,跨域处理等)

  • 性能监测方面,我们在1.0版本使用了日志处理和 Hertz 的 log 中间件对每一次的请求进行监测和记录,主要包括SQL处理速度,请求返回速度和内存使用情况。2.0版本中,我们使用了 pprof 对网关层进行性能监测,同时我们使用了 jaeger 对微服务进行链路追踪。
  • 单元测试方面,我们对常用 jwt token 生成模块,error 解构模块,md5加密模块,uuid生成模块等进行了不同程度的单元测试,保证各类工具的正确使用和错误预防。
  • 日志记录上,我们在1.0版本使用到 zap 对 gorm 和 hertz 框架进行日志处理和重定向到日志文件中;在2.0版本中,我们使用了 hertz 和 kitex 自带的日志工具对服务情况和网关情况进行日志输出。
  • 跨域处理方面,我们在网关层使用中间件设置了跨域策略。