java开发技术之响应式系统的四大特点
1.什么是响应式系统
响应式系统的目标是灵敏度高,系统稳健一直有回复,松耦合和可扩展。响应式系统是一种架构,可以应用于任何地方,无论是一个小小的博客网页,还是复杂的网购系统,都可以使用响应式架构。java培训
一般来说,响应式系统有四个显著的特点:
? 即时响应(responsive)
? 回弹性(resilience)
? 弹性(elastic)
? 消息驱动(message driven)
【java开发技术之响应式系统的四大特点】下面这张图很好的描述了这几者之间的关系:
文章图片
消息驱动是手段,弹性和回弹性是形式,最终的即时响应就是它的价值。
接下来我们来逐个介绍这四种特性。
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 的功能,大概就知道什么是回弹性。
2.4 消息驱动(message driven)
消息驱动是具体的实现手段。
在分布式系统中,我们要解耦、隔离服务、提高可伸缩性,为了达成这一目标,消息驱动是最佳选择。因为只有消息驱动能够同时满足即时响应、弹性以及回弹性这些要求。
有的小伙伴在学习微服务的时候,可能会看到一个名词,就叫做消息驱动的微服务。
消息驱动就是发件人只需要把邮件内容扔到消息中间件中即可,剩余的事情都不用管了,邮件服务器会自动从消息中间件中读取邮件信息然后将邮件发送出去,发送失败的事务、回滚等等操作,都由邮件服务器自行处理,发送方只管把消息扔出去就行了,这就很好的实现了解耦。
这就是我们常说的响应式系统的四大特点。
3.身边的响应式系统
响应式系统其实离我们并不远,不是说用了 WebFlux、用了 Gateway、用了异步 Servlet 就是响应式系统,这其实没有必然联系,上面那些都是实现响应式系统的一个具体方案,具体技术而已。
举一个很简单的消息驱动微服务的案例,如下图:
文章图片
引入了消息中间件 RabbitMQ/Kafka 之后,能够很好的实现 A 服务和 B 服务的解耦,同时利用 RabbitMQ/Kafka 自带的消息消费失败重试的功能也能很好的提高系统的容错性和可靠性。
作者:江南一点雨
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天