这是我参与「第五届青训营 」笔记创作活动的第 10 天
一、项目简介
这个项目是做什么的?
- 实现简化版抖音(抖声)的后台服务
项目框架
以分布式微服务为基本框架设计思想。
将dao层分离出来处理为一个个的微服务
使用特定的网关层与前端的交互
微服务之间采用rpc通信
详细框架涉及知识在下面在细说
项目主要依赖:
- gin
- gorm
- etcd
- grpc
- jwt-go
- logrus
- viper
- protobuf
二、涉及技术&知识点
如上可以简单简单了解整个框架的设计思路
我们再通过依赖看看我们整体的技术框架以及涉及到的知识点
- gin
- 网关层: 用于接收前端(客户端)http请求
- gorm
- 数据库持久层: 作用于各个微服务之中(除了网关层),将dao层隔离出来做成一个个微服务
- etcd
- 服务注册与发现
- 下游服务: 将自身(微服务)注册到etcd中
- 上游服务: 实现服务发现,通过etcd发现下游服务
- grpc
- 实现上下游服务的通信和调用
- jwt-go
- 在网关层实现对http请求的token校验
- logrus
- 在各个微服务中记录日志
- viper
- 在各个微服务中读取配置文件
- protobuf
- 数据传输,作为中间媒介,在上下游之间快速的传递数据
三、实践过程
项目搭建思路
从课中的gorm+hertz+kitex项目框架抛砖引玉,再加上自己一定的思考得来的
持久层采用了目前市面上使用最多最流行的gorm框架
http使用了不同于hertz的gin框架,gin框架也是一个十分主流的框架,不使用hertz的主要原因在于发现hertz可用的资料比较少,不同于传统的http框架有两个上下文,于是选择了更加熟悉的gin框架
rpc框架采用了gRPC,不使用课中所介绍的kitex主要原因也是,kitex作为字节内部开发、并开源的rpc框架,能够找到的资料较少,并且只适用于unix内核,我们大多数同学都是基于win平台进行开发的,所以我找到了gRPC---一个开源的、全平台、支持多种语言的高性能开源RPC框架。(Google出品 质量保证) 并且有较多的资料可供参考
实践过程中遇到的问题
- 大作业文档中采用proto2语法,原本我也打算采用proto2的方式进行数据传输,但是发现无法直接进行赋值等许多问题
- 解决方法: 很简单,直接用proto3就好了
四、总结思考
对于这个项目的优点嘛
我认为主要是采用了分布式微服务的架构,看到群里也有很多同学说单体式够了没必要这样,我一开始也是这么觉得,后来想想用上分布式还能倒逼自己学习更多的知识,并且更好地把工作分给其他同学(狗头),因为每个人写一个微服务就好了!
接下来的优缺点呢结合我们后来框架慢慢丰富的内容再慢慢介绍罢!