反应式编程的可扩展性

时间:2017-03-07 23:29:48

标签: scalability reactive

如果反应性编程避免线程并使用对象之间的异步消息传递,那么如何管理可伸缩性?

如何决定何时需要新实例? 是否有一些api可以透明地管理它?

1 个答案:

答案 0 :(得分:1)

根据Reactive Manifesto

  

"反应系统可以通过增加来对输入速率的变化作出反应   或减少分配用于服务这些输入的资源。"

如果组件彼此隔离且不共享资源,则可以复制它们 - 即,您可以一次运行组件的多个实例并在它们之间拆分输入。

这是可能的,因为输入采用异步消息的形式。从任何一个实例的角度来看,它只需要处理它收到的消息。它并不关心与其他消息相关的消息排序,也不关心其他实例如何处理其消息。

因此,您可以根据需要同时运行多个(按比例放大)或少量(按比例缩小)的组件实例,并且因为它们全部独立地接收不同的消息 - 即问题的不同部分 - 他们不会发生冲突,双重竞争或互相竞争。向上或向下可扩展性的这种特性被称为"弹性"。

有许多库,框架和API可以帮助您实现被动系统,例如响应工作负载扩展组件,只要您正确配置它们并使用它们为您提供的构造。目前最大的API似乎是ReactiveX API,包括RxJS,RxJava和其他特定于平台的框架。

注意:反应式编程不一定针对线程 - 仅针对竞争共享资源的线程。如果您将线程彼此分离,例如,通过拆分工作负载并将其不同部分分配给不同的线程,这是replication的一种形式,这是一种被反应式编程认可的技术。