2017-03-07 88 views
1

如果響應式編程避免使用線程並使用對象之間的異步消息傳遞,如何管理可伸縮性?響應式編程的可擴展性

如何決定何時需要新實例? 是否有一些透明地管理這個API?

回答

1

按照Reactive Manifesto

「反應性的系統可以在輸入速率的變化,通過增加 或減少分配給服務於這些輸入的資源反應。」

如果組件彼此隔離並且不共享資源,它們可以被複制 - 即,您可以一次運行組件的多個實例並在它們之間拆分輸入。

這是可能的,因爲輸入採取異步消息的形式。從任何一個實例的角度來看,它只需要處理它收到的消息。它並不關心與其他消息有關的消息排序,也不關心其他消息如何處理消息。

因此,您可以根據需要一次運行多個(按比例放大)或按照少量(按比例縮小)實例,並且因爲它們都獨立地接收不同的消息 - 即問題的不同部分 - 不會發生衝突,加倍或與彼此競爭。這種向上或向下可伸縮性的特性被稱爲「彈性」。

只要您正確地配置它們並使用它們提供的構造,就可以幫助您實現響應式系統(如響應工作負載的組件縮放)的一些庫,框架和API。目前最大的API似乎是ReactiveX API,包括RxJS,RxJava和其他平臺特定的框架。

注意:反應式編程不一定針對線程 - 只針對競爭共享資源的線程。例如,如果您將線程與其他線程分離,例如通過拆分工作負載並將其中的不同部分分配到不同的線程,這是一種形式replication,這是一種被反應式編程認可的技術。