这一次给大家分享微服务网关的相关知识,这个也是微服务架构中,相当重要的组件之一,来,下面听我徐徐道来
1,API网关概览
1.1,现有的交互模式存在什么问题?
目前,是客户端会直接跟多个微服务直接交互,这种模式存在什么问题?
1,客户端会请求多个不同的服务,需要维护不同的请求地址,增加开发难度
2,在某些场景下存在跨域请求的问题,也会降低访问的效率
3,加大身份认证的难度,每个微服务都需要独立认证
因此,我们需要一个微服务网关,介于客户端与服务器之间的中间层,所有的外部请求都会先经过微服务网关处理,之后再交给相关的业务服务进行处理。
客户端只需要与网关交互,只知道一个网关地址即可,这样简化了开发还有以下优点:
1,方便客户端调用
2,方便做统一身份认证
3,减少了客户端与各个微服务之间的交互次数
1.2,什么是微服务网关?
API网关是一个服务器,是系统对外的唯一入口。
API网关封装了系统内部架构,为每个客户端提供一个定制的API。
API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。
API网关提供REST/HTTP的访问API
1.3,网关的实现方案有哪些?
Zuul
Netflix开源,功能丰富,使用JAVA开发,易于二次开发;需要运行在web容器中,如Tomcat。
问题:缺乏管控,无法动态配置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如 Nginx;
Spring Cloud Gateway
SpringCloud提供的网关服务
Nginx
如果只是需要一个基础的具备转发功能的网关,那么使用Ngnix是一个不错的选择。
比如:路由,过滤处理(nginx+lua)
location /api-index { proxy_pass http://127.0.0.1:8081/; }
location /api-product { proxy_pass http://127.0.0.1:8082/; }
2,Zuul
2.1,什么是Zuul
zuul是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能:
动态路由:动态将请求路由到不同后端集群
负载分配