分布式中服务网关,netflix zuul与spring cloud gateway的一些区别
zuul是由netflix开源的比较早的网关,目前已经不维护了,zuul实际上是基于javaEE的servlet栈来提供一系列路由过滤服务的,而gateway是基于Reactor响应式编程的,两者的底层原理是完全不同的。
关于servlet的一些相关的特性,这里就不做具体的解释了,一般来说了解到网关这个概念的时候对于servlet都有一定的认知了。
Reactor响应式编程,这是一种编程思想。reactor设计模式是一种事件处理模式,用于处理由一个或多个输入并发传递给服务处理程序的服务请求。然后,服务处理程序对传入的请求进行解复用,并将它们同步地分派给关联的请求处理程序。在reactor中有两个最基本的概念,发布者和订阅者,可以理解为生产者和消费者的概念。在Reactor中发布者有两个,一个是Flux,一个是Mono。 Flux代表的是0-N个元素的响应式序列,而Mono代表的是0-1个的元素的结果。参考一段代码
@Autowired
private ObjectMapper mapper;
//将结果转换为dataBuffer写出
String resultJson = mapper.writeValueAsString(result);
DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes(Charset.forName("utf-8")));
return response.writeWith(Mono.just(dataBuffer));
我们能看到的就是一个gateway返回响应信息的过程,需要将一个对象转换成json字符串,再用一种流的方式返回,这与servlet用的response.writer是完全不同的。
再从一个实现效果来说zuul是阻塞的,性能比较低,当访问量大超过负荷的时候就会形成阻塞,影响服务的运行,而gateway的webflux响应式的实现底层引用的核心库就是reactor,这能实现非阻塞,性能方面会比zuul好很多。
而两者的功能上相差不大,都有路由和过滤以及提供公共服务:认证、IP黑白名单、限流、日志的功能,只是实现的方式不同,在理解业务流程方面并没有太大的区别。
1689




被折叠的 条评论
为什么被折叠?



