这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
写在开头
本文在第一篇和第二篇的基础上进行架构实战,从架构方面解析测试环境的设计和构思。
一、系统组件
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添加至请求中,并且在服务接收处添加接受变量即可。