如何计算适当的信道容量?

时间:2018-12-11 04:48:11

标签: flume flume-ng fiware-cygnus

我正在寻找解决方案,因为sth频道已满。 我在计算适当的信道容量时遇到了麻烦。

阅读本文档具有以下说明。 https://github.com/telefonicaid/fiware-cygnus/blob/master/doc/cygnus-ngsi/installation_and_administration_guide/performance_tips.md#channel-capacity

In order to calculate the appropriate capacity, just have in consideration the following parameters: ・The amount of events to be put into the channel by the sources per unit time (let's say 1 minute). ・The amount of events to be gotten from the channel by the sinks per unit time. ・An estimation of the amount of events that could not be processed per unit time, and thus to be reinjected into the channel (see next section).

如何检查这些参数的值?

1 个答案:

答案 0 :(得分:0)

  

如何检查这些参数的值?

您不能仅检查这些参数。它们取决于您的应用程序。

他们在说什么,您应该有足够大的尺寸,以免发生器卡住。在您的应用程序中可能无法实现。

假设您的生成器每秒接收一个事件,并且接收方需要2秒钟来管理该事件。现在假设您有3个接收器。在1秒内,您可以管理每个接收器处理0.5个事件。您有3个接收器,因此您的接收器加在一起,能够处理0.5×3 = 1.5个事件,这比输入得到的要多。您的容量可以是1或2,使用2可以大大增加您不被阻止的机会。

让我们回顾另一个示例:

  • 您的生成器希望每秒推送1,000个事件
  • 您的接收者需要3秒来处理一个事件
  • 您将需要1,000 x 3 = 3,000个接收器(3,000个可以并行全速运行的goroutine ...)

在此示例中,接收器的总数如此之大,您必须分解代码以在多台计算机上工作,或者优化接收器代码,以便它可以在有意义的时间内处理数据。假设您有50个处理器,您的接收器每秒将接收1,000个事件,所有50个都可以全速运行,您需要一个接收器来完成以下工作:

  

50/1000 = 0.05秒

现在让我们假设,在大多数情况下,您的goroutine花费0.02,但有时会花费1秒。这意味着您的goroutine可能会落后一点。在这种情况下,您的容量(这样就不会阻塞生成器)应该会超过1,000。同样,这将取决于放慢多少例程的速度,等等。在最后一个示例中,运行时间为0.02秒,因此处理1,000个事件通常需要0.02秒。如果您可以在1秒钟内发送这1,000个事件,则可能甚至不需要50个goroutine,并且容量可能会较小。另一方面,如果突发大量事件,最终可能发送许多(例如500个)事件一次,那么更多的goroutine和更大的容量对于避免被阻塞很重要。