一.网关

曾经我们的项目是单体项目,前端只需要请求8080端口,就可以获取所有需要的数据和服务并进行渲染。
但是拆分成微服务后,会面临几大问题:

1.但是现在我们将该单体项目拆分成了微服务项目,每个项目都有自己独立的端口号,那么前端在发起请求时如何知道去请求哪一个微服务,又如何知道请求的端口号是多少呢?
除了上述描述的问题外,当我们将微服务部署到线上时,其ip地址和端口号又会发生变化,那么前端又该如何获取到呢?

2.很多微服务都需要用户登录,用户登录需要jwt令牌,难道每个服务中都要编写一份用户登录校验的逻辑吗?这未免十分麻烦.

此外如果给每个微服务都下发了密钥,那么会大大加大密钥泄露的风险.

综上问题,我们引入了网关的概念.

我们有了网关之后,所有的请求都发给网关地址,由网关去寻找需要转发的路由,这就是网关的路由转发功能.
此外在转发时,网关会自己做负载均衡,从而将多实例部署的集群优势发挥到最大,避免出现所有请求都打到一个服务器上的情况.
那么网关如何知道各个微服务的情况呢?那就要用到之前我们讲过的注册中心.
此外在请求网关时会进行身份校验,从而解决用户登录校验以及jwt令牌携带和密钥泄露的问题.

有了网关,后端对于前端来说就是一个黑盒,这样会提高前端的开发体验,对于前端来说和单体架构没什么区别.

当前网关实现方法有很多,我们主要采用第一种:Spring Cloud Gateway.