响应式编程 --- 1介绍
随着系统架构的复杂,以及数据处理量级的增加,之前的软加价购已无法满足如今的需求。目前系统架构需要具备:即时响应性(responsive),回弹性(Resilient),弹性(Elastic)以及消息驱动(Message Driven)。这个也是反应式宣言,有的地方叫响应式宣言,就是reactive,但是官方好像翻译的是反应式
即时响应性:只要有可能,系统就会及时作出响应。该特性是可用性以及实用性的及时,即时响应意味着可以快速检测到问题并有效的进行处理。即时响应系统专注于提供一致的响应式时间,确定可靠的返回上限,已提供一致的服务之乡,可简化处理,建立最终用户信任并促使用户作进一步互动
回弹性:系统出现失败是依然保持即时响应。回弹是通过复制、遏制、隔离以及委托实现的,失败被遏制在每个组件,与其他组件相互隔离,从而确保系统某个部分失败不会危及整个系统,并能够独立恢复,每个组件的恢复都被委托给另一个组件,必要时可以通过复制来保证高可用。组件客户端不再承担组件失败的处理
弹性:系统在不断变化的工作负载下依然保持即时响应型。反应式系统可以对输入载荷的速率变化做出反应。比如通过增加或减少被分配用户服务的这些输入的资源。这意味着设计上没有争用点和中央瓶颈,得以进行组件的分片或者复制,殡改他们之间分布输入。通过提供相关的实时性能指标,反应式系统支持与测试以及反应式的伸缩算法。这些系统可以在唱过的软件以及硬件品哪个台实现高可用的弹性
消息驱动:反应式系统依赖异步的消息传递,从而确保了松耦合,隔离,位置透明的组件之间有着明确边界,这一边界还提供了将失败作为消息委托出去的手段。使用显示的消息传递,可以通过在系统中塑造并监视消息流队列,并在必要时应用回压,从而实现负载管理,弹性以及流量控制。使用位置透明的消息传递作为通信的手段,是的跨集群或者在单个主机中使用相同的结构成分和语义来管理失败成了可能。非阻塞的通信是的接受者只有在活动是才消耗资源,从而减少系统开销
什么是背压以及回压
backpressure有的地方称回压,有的地方称背压吗,只是翻译问题,英文如下,简单拿来用,用户的下一步动作的速度小于输入流的速度
Backpressure is when the progress of turning that input to output is resisted in some way. In most cases that resistance is computational speed — trouble computing the output as fast as the input comes in — so that’s by far the easiest way to look at it. But other forms of backpressure can happen too: for example, if your software has to wait for the user to take some action.
但是webflux中称,backpressure是标识处理这种状态的能力或者策略,通常处理这种策略一般有以下三种
buffer:将输入暂时保存起来,较为常用,但是如果buffer无界,name容易在内存消耗过大甚至溢出。还有buffer也会使请求响应编程
drop:丢弃输入,一般不单独用,一般会配合buffer进行使用,也就是超过buffrer的大小多余的会被丢弃
control:由消费者抑制生产者速度,这种不消耗内存,也不损失数据,但有时候这种场景不太现实,比如消费者是用户点击,请求资源。