什么是WebFlux

这篇文章主要讲解了“什么是WebFlux”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是WebFlux”吧!

什么是WebFlux

1.什么是响应式系统

响应式系统的目标是灵敏度高,系统稳健一直有回复,松耦合和可扩展。响应式系统是一种架构,可以应用于任何地方,无论是一个小小的博客网页,还是复杂的网购系统,都可以使用响应式架构。

一般来说,响应式系统有四个显著的特点:

  • 即时响应(responsive)

  • 回弹性(resilience)

  • 弹性(elastic)

  • 消息驱动(message driven)

下面这张图很好的描述了这几者之间的关系:

什么是WebFlux

消息驱动是手段,弹性和回弹性是形式,最终的即时响应就是它的价值。

接下来我们来逐个介绍这四种特性。

2.四大特点

2.1 即时响应(responsive)

即时响应的特点就是一个字,快!

现在 4G 的普及,百兆千兆带宽的使用,CPU 计算能力的提高,都在降低用户对于一个系统的耐心,一个网页,5s 没加载完,用户已经觉得体验很差了,30s  还没加载出来,那你可能失去这个用户。

所以我们需要构建一个健壮的、能够快速响应的即时响应系统,特别是在一些高并发的场景下,响应延迟还能保持在合理范围内,这才是最重要的。

要实现这一目标,要用到很多具体的技术,例如异步加载、预加载等。另外还涉及到弹性(elastic)与回弹性(resilience)这样一些原则性问题。

2.2 弹性(elastic)

弹性其实就是指系统随时可以动态扩展。

举个例子,一个电商网站,平时活跃用户有限,所需要的服务器数量足够支撑日常服务即可,没有必要多买,毕竟都是要花钱的。一旦遇上大促,系统的流量在短时间内爆发出来,这个时候就需要能够随时随地方便的为系统扩容,这就是系统的弹性。

松哥在之前的文章中和大家聊过 Nginx  负载均衡,这其实就是一种扩容的手段。现在很多中小公司可能回采用云服务,如果使用云服务,一般都可以非常方便的实现动态扩容。

2.3 回弹性(resilience)

回弹性就是指当系统遭遇到失败时,依然能够对外提供服务。松哥在之前和大家分享 Spring Cloud 时,Hystrix  的功能之一就是容错,当一个服务崩掉的时候,不会拖累到其他服务。通过服务的降级、隔离等手段,可以保证回弹性。回弹性还会要求在系统出错的时候,能够自动进行重试。

其实大家看回弹性这个单词 resilience,不知道有没有想起来在 Spring Cloud 体系中,用来替代 Hystrix 的工具就叫做  resilience4j,所以如果你了解 Hystrix 的功能,大概就知道什么是回弹性。不了解 Spring Cloud  的话,可以看看这个网站:www.itboyhub.com。

2.4 消息驱动(message driven)

消息驱动是具体的实现手段。

在分布式系统中,我们要解耦、隔离服务、提高可伸缩性,为了达成这一目标,消息驱动是最佳选择。因为只有消息驱动能够同时满足即时响应、弹性以及回弹性这些要求。

有的小伙伴在学习微服务的时候,可能会看到一个名词,就叫做消息驱动的微服务。

在松哥的微人事中,有一个邮件发送的功能,就用到了消息驱动,发件人只需要把邮件内容扔到消息中间件中即可,剩余的事情都不用管了,邮件服务器会自动从消息中间件中读取邮件信息然后将邮件发送出去,发送失败的事务、回滚等等操作,都由邮件服务器自行处理,发送方只管把消息扔出去就行了,这就很好的实现了解耦。

这就是我们常说的响应式系统的四大特点。

3.身边的响应式系统

响应式系统其实离我们并不远,不是说用了 WebFlux、用了 Gateway、用了异步 Servlet  就是响应式系统,这其实没有必然联系,上面那些都是实现响应式系统的一个具体方案,具体技术而已。

举一个很简单的消息驱动微服务的案例,如下图:

什么是WebFlux

引入了消息中间件 RabbitMQ/Kafka 之后,能够很好的实现 A 服务和 B 服务的解耦,同时利用 RabbitMQ/Kafka  自带的消息消费失败重试的功能也能很好的提高系统的容错性和可靠性。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注