微服务框架搭建 | 青训营笔记

230 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第 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就好了

四、总结思考

对于这个项目的优点嘛

我认为主要是采用了分布式微服务的架构,看到群里也有很多同学说单体式够了没必要这样,我一开始也是这么觉得,后来想想用上分布式还能倒逼自己学习更多的知识,并且更好地把工作分给其他同学(狗头),因为每个人写一个微服务就好了!

接下来的优缺点呢结合我们后来框架慢慢丰富的内容再慢慢介绍罢!