2017-03-07 135 views
1

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

如何决定何时需要新实例? 是否有一些透明地管理这个API?

回答

1

按照Reactive Manifesto

“反应性的系统可以在输入速率的变化,通过增加 或减少分配给服务于这些输入的资源反应。”

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

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

因此,您可以根据需要一次运行多个(按比例放大)或按照少量(按比例缩小)实例,并且因为它们都独立地接收不同的消息 - 即问题的不同部分 - 不会发生冲突,加倍或与彼此竞争。这种向上或向下可伸缩性的特性被称为“弹性”。

只要您正确地配置它们并使用它们提供的构造,就可以帮助您实现响应式系统(如响应工作负载的组件缩放)的一些库,框架和API。目前最大的API似乎是ReactiveX API,包括RxJS,RxJava和其他平台特定的框架。

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