架构实战(Centos) | 青训营笔记

123 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

写在开头

本文在第一篇和第二篇的基础上进行架构实战,从架构方面解析测试环境的设计和构思。

一、系统组件

image.png 1、Nginx:反向代理端口

2、gateway:负载均衡、权限校验、限流

3、JWT:作为token存储用户登录状态

4、consul:服务发现,解决多微服务副本ip和端口管理困难等问题

5、redis:作为缓存防止大访问量打垮Mysql,做为session存储用户信息

6、Mysql:存储用户、视频等信息

7、User服务:用户注册、登录和关注等功能

8、Video服务:视频流、评论和点赞等功能

二、设计思路

反向代理

由于学生机云服务器性能有限,所以将服务一开始就部署在内网的物理机上。但物理机只有校园网IP,不能通过公网访问,故使用Frp反向代理技术,请求通过腾讯云转发至内网集群。

Frp反向代理安装参见 blog.csdn.net/qq_42307546…

由于Frp反向代理http只能代理内网机器的一个接口,故在内网的对应被代理接口上进行Nginx反向代理监听。 Nignx匹配不同路由到不同的端口

Nginx安装参见 blog.csdn.net/weixin_4376…

服务发现

本项目架构使用的是micro框架,故使用consul来进行服务发现。 consul类似于java中eureka的功能可作为注册中心来配合服务进行服务发现、服务调用和负载均衡等作用。 consul安装参见 blog.csdn.net/hudeyong926…

路由鉴权

本项目使用go-in的gateway来进行路由鉴权。项目中使用token来携带用户状态,故在gateway中进行token解密权限校验,并搭配上consul可将请求转发至对应服务。在之前的设计中使用redis存储token-userid的键值对,来获取userid。在答辩后,根据评委老师的建议进行修改,在gateway中从token中解析出userid添加至请求中,并且在服务接收处添加接受变量即可。