当前位置: 首页 > 科技观察

挖个大坑,WebFlux启动!

时间:2023-03-18 23:29:37 科技观察

随着Spring5的推出,WebFlux被放在了越来越重要的位置。不管是内部的学习动力还是公司的项目需求,很多小伙伴都开始关注WebFlux了,很多小伙伴在微信上能不能完成一套WebFlux的教程呢?我当然可以,但是我最近真的很忙。宋弟兄最近开始带队了。有很多事情需要和其他部门联系。晚上十一点,计划还在制定中。..写公众号的时间被严重压缩了,但无论如何,我还是要写,既是对朋友的承诺,也是对自己的承诺。想来想去,这次还是修复WebFlux吧。有朋友催了快一年了,是时候动手了。今天我们先来介绍响应式系统。毕竟,如果您不知道响应式系统,为什么要学习WebFlux?1、什么是反应系统?扩张。响应式系统是一种可以应用在任何地方的架构,无论是小型博客页面还是复杂的在线购物系统,都可以使用响应式架构。总的来说,一个响应式系统有四个显着的特点:ResponsiveResilienceElastic消息驱动下图描述了这两者的关系:消息驱动是手段,弹性和弹性是形式,最终即时响应是它的价值。接下来,我们将一一介绍这四个特点。2.四大特点2.1即时响应(responsive)即时响应的特点就是一个字,快!现在4G的普及,100M、100M带宽的使用,CPU运算能力的提升,都在降低用户对一个系统的耐心。如果一个网页5s还没有加载,用户就已经觉得体验很差,如果30s还没有加载,那你可能就失去了用户。因此,我们需要构建一个健壮的、即时的响应系统,能够快速响应,尤其是在一些高并发的场景下,响应延迟能够保持在一个合理的范围内,这是最重要的。为了实现这个目标,用到了很多具体的技术,比如异步加载、预加载等,另外还涉及到弹性、回弹等一些原则性的问题。2.2弹性(elastic)弹性实际上是指系统可以随时动态扩展。例如,电子商务网站通常活跃用户有限,所需的服务器数量足以支持日常服务。没必要多买,毕竟要花钱。一旦遇到大促,系统流量会在短时间内爆发。这时候就需要能够随时随地方便地扩展系统。这就是系统的灵活性。宋哥在上一篇文章中跟大家讲了Nginx负载均衡,其实就是一种扩展的手段。现在很多中小型公司可能会采用云服务。如果使用云服务,一般都可以很方便的实现动态扩展。2.3弹性(resilience)弹性是指当系统遇到故障时,仍然可以对外提供服务。之前宋哥给大家分享SpringCloud的时候,Hystrix的功能之一就是容错。当一个服务崩溃时,不会拖累其他服务。可以通过服务降级和隔离来保证弹性。弹性还要求当系统出现故障时,能够自动重试。其实大家看到resilience的resilience这个词。不知道大家还记不记得在SpringCloud系统中,用来替代Hystrix的工具叫做resilience4j,所以如果了解了Hystrix的功能,大概就知道resilience是什么了。如果你不知道SpringCloud,你可以看看这个网站:www.itboyhub.com。2.4消息驱动(messagedriven)消息驱动是一种具体的实现方式。在分布式系统中,我们需要解耦、隔离服务,提高可扩展性。为了实现这个目标,消息驱动是最好的选择。因为只有消息驱动才能同时满足即时响应、弹性和弹性的要求。有些朋友在学习微服务的时候,可能会看到一个名词,叫做消息驱动的微服务。松哥的微信里有个发邮件的功能,使用的是消息驱动。发件人只需要将邮件内容丢到消息中间件中,其他的不用管。邮件服务器会自动从消息中间件中读取邮件信息,然后发送邮件。发送失败事务和回滚等操作均由邮件服务器自行处理。发件人只是将消息扔出去,这是一个很好的实现。解耦。这就是我们常说的响应式系统的四个特征。3、我们身边的响应式系统,其实离我们并不遥远。不代表使用WebFlux、Gateway、异步Servlet就是响应式系统。其实并无必然联系。以上都是响应式系统的实现。一个特定的计划,只有特定的技术。举一个很简单的消息驱动微服务的案例,如下图所示:引入消息中间件RabbitMQ/Kafka后,可以很好的实现A服务和B服务的解耦,同时,消息RabbitMQ/Kafka自带的消费失败。重试功能还可以提高系统的容错性和可靠性。宋大哥之前录制过一个关于提高消息中间件可靠性的视频。有兴趣的朋友可以看看:提高可靠性:处理幂等性:4.总结总之,响应式系统是一个架构层面的东西。四个基本特性,它还有很多具体的实现方式,松哥会在以后的文章中对这些具体的实现方式一一介绍。本文转载自微信公众号“江南的一场小雨”,可通过以下二维码关注。转载本文请联系江南一点鱼公众号。