Appearance
网关,往往是我们真正暴露给用户进行访问的,用户调用网关,网关再去调用内部的各个服务。这样有什么好处呢?
**第一,减轻业务服务器的压力。****将公共业务逻辑让网关来做,其它业务服务器就不用做了;**有人要说了,你特么只是通过网关转发了一下,最后不还是请求到了业务服务器么?怎么就减轻压力了?同学你想想,假如你的系统里对每一个API接口都有权限验证,如果没有网关的话,权限验证这件事也需要在业务服务器上进行处理,是不是所有请求都直接落在了你的业务服务器?但是如果你加一个网关,你就可以在网关层过滤一些请求,保证只有合法、有效的请求才落实到业务服务器,这样一来,权限验证这个事就从业务服务器转移到了网关服务器,难道不是减轻压力吗?
**第二,保护业务服务器的安全。**在部署这些微服务时,我们可以将所有的服务都部署在一个局域网里,网关和服务之间只通过内网调用,只把网关暴露出去,这样一来,即使网关的域名或者地址被攻破了,你的业务服务器还是安全的。此外,网关还可以在大量流量突然涌入时,做限流,一样保护了业务服务器的安全。
**第三,可以配合Nginx搭建高可用的服务。**在一个微服务系统中,往往一个网关是不够的,为什么?假如你的业务服务器一共有10个节点,但是你又不想暴露出去,只想把网关暴露给用户,那么所有的流量压力其实都到了网关身上,这时候我们可以注册多个网关,在网关的上层再去加一个Nginx,由Nginx转发到网关集群,再由不同的网关去转发到不同的业务节点,达到高可用、高性能的服务器。
这里采用目前比较流行的Gateway网关,这是Spring Cloud团队自己研发的网关,功能很强大,由于篇幅原因,此处博主就带领大家体验基本的功能。
依然是创建子项目,跟上边创建服务提供者一样,不同的是: 首先项目名称叫cloud-gateway,不贴图了。 然后是依赖:
在网关项目的配置文件添加如下内容: server: #网关端口8083 port: 8083 spring: application: #在服务中心的应用名称 name: gateway cloud: gateway: discovery: locator: #自动映射eureka下的服务路由 enabled: true #开启服务名称小写 lower-case-service-id: true
注册到服务中心
eureka: client: service-url: defaultZone: http://localhost:8080/eureka/
然后在启动类加上@EnableEurekaClient注解,启动项目,可以看到已经注册到服务中心了:
