API服务网关




云服务总线与 api网关的区别 服务网关和api网关_微服务


API服务网关就是出现在微服务边界上的一个面向API的、串行集中式的、对访问请求强管控的服务,采用的是一个外观模式。API服务网关是微服务访问的统一入口,负责服务请求路由、组合及协议转换等处理。

  • API服务网关帮助开发者隐藏系统架构实现的细节,提供统一的入口供客户端访问,让微服务使用更为友好。
  • 通过微服务的统一访问控制,简化了客户端开发的复杂度,降低了客户端与微服务之间的通信次数,客户端不需要与多个微服务之间进行通信,也不需要了解各个微服务的详细服务。
  • 借助API服务网关可统一做切面任务,避免每个微服务自己开发,提升效率,使系统更加标准化。
  • 通过API服务网关,可以将异构系统进行统一整合。
  • API服务网关需要实现一个高可用伸缩性强的服务,避免单点失效。
  • API服务网关需要对所有微服务实例所暴露的端点进行统一的管理,

Spring Cloud与Netflix Zuul

Zuul组件的功能:

  • 动态路由:支持与Eureka服务器的整合,可以动态对注册到Eureka服务器中的微服务进行路由映射。Zuul提供了一系列的路由规则配置,可以针对实际情况,实现微服务路由的灵活控制。
  • 监控与审查:通过对特定的接口设置访问白名单、访问次数、访问频率等。
  • 身份认证与安全:通过Zuul将用户登录认证等类似的功能抽取出来,让微服务系统无须关注认证的逻辑,实现统一的逻辑处理。还可以统一在服务网关层增加一个额外的保护层来防止恶意攻击等。
  • 压力测试:通过Zuul所提供的过滤器功能可以逐渐增加对某一服务集群的流量,进行服务性能测试。
  • 金丝雀、A/B测试:新版本、新功能需要测试相应的功能,通过API服务网关,控制部分用户访问服务实例。
  • 服务迁移:通过Zuul代理可以处理来自旧端点的所有流量,将请求重定向到新的端口。
  • 负载剪裁/限流

启动Zuul路由服务

1、构建Zuul路由服务器

编写pom文件


云服务总线与 api网关的区别 服务网关和api网关_微服务_02


编写启动类


云服务总线与 api网关的区别 服务网关和api网关_springcloud 网关_03


编写配置文件


云服务总线与 api网关的区别 服务网关和api网关_微服务_04


2、路由测试

启动服务治理服务器,端口8260;启动商品微服务;端口8100;启动Zuul路由服务,端口8300。


云服务总线与 api网关的区别 服务网关和api网关_springcloud 网关_05


说明Zuul路由服务器已经将请求自动转发到商品微服务中。

Zuul将默认从Eureka服务器中获取所注册的服务,将服务的ID作为请求路径中的一部分,然后将用户的请求自动转发到这些服务中。


云服务总线与 api网关的区别 服务网关和api网关_微服务_06


3、负载均衡测试

启动2个用户微服务,端口分别为8000和8001。


云服务总线与 api网关的区别 服务网关和api网关_springcloud 网关_07


然后继续访问http://localhost:8300/product-service/product/comment该接口验证Zuul服务器负载均衡。


云服务总线与 api网关的区别 服务网关和api网关_API_08


云服务总线与 api网关的区别 服务网关和api网关_API_09


如果处理不好Zuul路由服务的话,Zuul路由服务可能会成为一个访问瓶颈,所以在构建API访问网关的时候需要把我两个原则:

KISS原则:Keep it Simple and Stupid,要保持API服务网关的简单和轻量。

stateless原则:无状态,Zuul服务网关中不应该、也不可以保存有关服务调用过程中的状态数据。

4、Hystrix容错测试

关闭调用户微服务,继续访问。


云服务总线与 api网关的区别 服务网关和api网关_云服务总线与 api网关的区别_10


Zuul本身已经默认集成了Hystrix和Ribbon,所以Zuul拥有线程隔离和服务容错的自我保护能力,以及对服务调用的客户端负载均衡功能。