项目总结(持续更新)

微服务项目总结

python 编写服务层 + grpc + proto + go应用层 + gin(web框架) 完成一个电商项目

服务层总结 (python)

实现步骤梳理

  1. Models 数据库模型定义、与数据表生成
  2. proto 文件定义、生成proto文件
  3. 根据proto 编写服务层业务
  4. 编写业务 需要操作DB,所以 要将proto中的message和model类数据相互转换
    • 保存数据时,将request请求过来的数据信息 赋值给 模型类对象
    • 返回数据时,模型类对象 转换为 proto定义的数据类型
  5. 启动grpc 服务,供应用层连接(开启服务 三步 类似把大象放进冰箱)
    • 声明得到一个server
    • 将服务注册到server
    • 启动服务(host + ip)

使用到哪些组件,解决了什么问题?

  1. 连接DB 使用 peewee 通过ORM 操作

    • 创建数据库连接池
    • ORM 模型转换
  2. 根据proto 编写业务 使用gprc

    • gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,跨语言
    • rpc 中 三个核心: call_id映射 、传输协议 、 网络传输
      1. call_id映射 : 调用远程方法时,怎么能找到它?服务端和客户端通信,都得维护一张映射表,调用方法根据找到call_id 去调用。这个call_id在所有进程都是唯一的。
      2. 传输协议(序列化与反序列化): protobuf 、json 、xml 都是传输协议,这里使用protobuf,谷歌开源的轻量级传输协议,比json效率高
      3. 网络传输:客户端和服务端 要通过网络连接,tcp 还是http都可以,grpc 直接使用了HTTP2
  3. 其他非核心组件

    记录日志:loguru

    密码加密:passlib.pbkdf2_sha256 md5盐值

应用层总结 (go)

实现步骤梳理

  1. 要给前端开放 http/restful 风格的接口
  2. 要验证前端传递过来的数据信息,也可以对验证通过后的数据处理
  3. 要连接服务端拿到数据信息作处理
  4. 服务端返回的数据是proto 格式,返回给前端需要json格式数据,要数据转换
  5. 开发环境和生产环境要分离,需要使用配置文件

使用到哪些组件,解决了什么问题?

  1. 接收请求和返回数据 - 使用到web框架gin(开启一个服务本质也是三步走)

    • 定义Router 使用gin.Default() 将得到一个 *gin.Engine
    • 注册路由信息, 路由核心也分三部分:
      • 路由:即符合restful风格的接口地址
      • 组件:JWTAuth 认证, Cors组件等..
      • func:路由对应的数据方法

    结合python中Django理解,web框架大同小异,路由分发器会执行对应视图

  2. 前端数据验证,即表单验证

    • 验证数据需要载体,对应go中的struct,根据struct中的tag验证

    • 使用 validator ,可以利用tag做限制,也可自定义验证器

    • 自定义验证器之后需要注册到 binding.Validator.Engine()

    这里对比DRF 中的Serializer 序列化器,自定义字段,也可使用ModelSerializer 继承model字段,控制字段的传入(只写) 与 输出(只读) ,也可以自定义验证规则,多字段联合验证等

  3. 连接服务端

    • grpc 客户端建立连接

      • 新建一个连接 Dial(host + ip) *defer conn.Close()

        defer 对比python中with 语句,有连接需要关闭,文件操作,DB操作等...

      • 创建一个客户端 proto.NewUserClient 得到一个 UserClient

        func NewUserClient(cc grpc.ClientConnInterface) UserClient{}
        
      • 向服务层发请求

        1.要调哪个方法 GetUserList

        2.request 请求服务端的数据

        rsp, err := client.GetUserList(context.Background(), &proto.PageInfo{})
        
      • 得到rsp,结果有两种 成功 或 失败

        - fail :  将grpc定义的code码转换为http状态码,返回前端需要HTTP状态码和错误描述信息
        - pass : 要定义返回数据的载体即struct,rsp中proto格式数据赋值 给结构体,然后返回给前端
        
  4. 其他组件:

    go.uber.org/zap v1.19.1    //优步开源的高性能日志记录框架,是线程安全的
    github.com/spf13/viper v1.9.0  //通过配置文件解决环境隔离问题,可以实时监控配置文件修改
    github.com/go-redis/redis/v8 v8.11.4  //保存短信验证码
    github.com/dgrijalva/jwt-go v3.2.0+incompatible //验证权限登录
    github.com/mojocn/base64Captcha v1.3.5  //图片验证码 
    

持续更新中...

posted @ 2021-11-12 17:18  CV-coding  阅读(38)  评论(0编辑  收藏  举报