- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个分布式系统模型,其中有一个生产者 (P)、一个消费者 (C) 和 1, 2, 3, ... n 个工作人员 (Wn)。所有这些组件都通过 Microsoft Azure 服务总线(B) 进行通信。总线内部有一个主题(T)和一个队列(Q)。
(P) 以不同的速率将消息推送到 (T)。 (Wn) 的[它们的数量是 (P) 消息速率的结果]从那里获取这些消息,根据一些预定义的函数更改它们,然后将消息转发到 (Q ),(C)从中拾取它们并按照计划进行处理。
此模型的目的是研究此类系统的可扩展性,特别是针对 Azure 服务总线。应用程序本身是用 C# 编写的,并且它们都在同一系统内执行。
我对 Azure 服务总线的功能有两个顾虑:
似乎存在预定的消息分发顺序,导致负载平衡不均匀(在(W)之间)。
假设我有 3 个 (W) - 或 (W3):如果 (P) 现在要向 (T) 发送 1.000 条消息,我会期望分布稍微均匀,接近 1/3每个 (W) 的所有消息。然而事实并非如此;看起来好像(W)的其余部分只是坐在那里等待忙碌的(W)处理一条又一条的消息。突然间,也许在15到20条消息之后,另一个(W)会收到一条消息,但平衡仍然很不平衡。
因此,我现在(W)只是坐着无所事事(在不同的时间段内)。
我在 (W) OnMessage() 函数中尝试了 Thread.Sleep(timeToSleep)。如果不是因为第一个问题中表达的担忧,这似乎符合我的需求。
我的实验:每当消息到达 (W) 时,工作就会开始,就在 message.Complete() 发送到 (B) 之前,我会执行 Thread.Sleep(2000) 或类似的操作。理想情况下,另一个(W)应该接替第一个(W)睡着的地方,但他们没有。第一个 (W) 醒来并获取另一条消息,如此循环继续,有时会持续 15-20 次,直到另一个 (W) 最终获取一条消息。
请原谅我在通过绘图进行解释时表现不佳,这是当前场景(图 1)和理想的、想要的场景(图 2):
Figure 2: optimal/wanted scenario
我希望对此事进行一些澄清。预先感谢您!
最佳答案
消费者之间的消息分发按照向服务总线发出消息请求的顺序进行处理。无法保证消息级别的精确均匀分布,并且分布将受到功能使用(包括预取)的影响。在任何实际的工作负载情况下,您都会发现分配是公平的,因为忙碌的工作人员不会要求更多消息。
关于c# - Azure服务总线负载均衡不均匀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43224749/
我需要在半径R的圆内生成一个均匀随机点。 我意识到,通过在区间 [0 ... 2π) 中选择均匀随机的角度,并在区间 (0 ... R) 中选择均匀随机的半径,我最终会得到更多的点朝向中心,因为对于两
我想在一个正方形内生成 N 个点(均匀地)。我怎样才能做到这一点? 最佳答案 非常酷的问题,比我想象的要困难得多,但这就是想法。有关于 n 边形的论文,但我只会做正方形。因此,圆的均匀分布是一个常见问
考虑以下示例: import itertools import numpy as np a = np.arange(0,5) b = np.arange(0,3) c = np.arange(0,7)
SQL Server 将一组值分成 5 组,每组的 sum(count) 应该均匀分布。 表仅包含 2 列 rid 和 count。 create table t1(rid int, count in
我有以下简单的 HTML。 A B C 和 CSS: ul { width: 100%; display: flex; flex-direction:
我是一名优秀的程序员,十分优秀!