ThingWorx 高可用性 > ThingWorx HA 中的最终一致性
ThingWorx HA 中的最终一致性
在群集模式下运行 ThingWorx 时,模型更改最终会在整个群集中保持一致。服务器 A 上的更改可在短时间内同步到服务器 B、C 等。更改观察程序将以可配置的频率运行 (默认值为 100 ms),并监视实体更改情况。假定数据库是事实来源的情况下,它将卸载服务器上发生更改的实体并进行重新加载。此最终一致性仅适用于模型和配置更改,而状态将保持实时一致性。
HTTP - HTTP 将使用粘滞会话,以便单个用户可以连接到单独的计算机。这样可确保用户立即看到所有更改。其他服务器上的其他用户所做的更改最终会保持一致。
WebSocket - 当通过 WebSocket 进行模型更改时,当前模型版本将存储在 websocket 会话中。WebSocket 请求始终为循环式,以帮助进行载荷分配。在该 WebSocket 会话上发出的下一个请求将保持暂停,直到其所连接的服务器至少同步到会话中存储的版本为止。如果服务器未能在一秒钟左右完成同步,则会超时。
下列情景中将介绍对用户影响已减少的情况:
情景 1:HTTP
Device > HAProxy > Platform1..N
在此情景中,您将连接到平台 1 并进行模型更改。如果您随后将其他用户连接到平台 2 并检查更改,则最终会显示所做更改。群集将通过同步过程使得模型更改最终达到一致。如果您的用例符合此情景,则应该进行重试,以等待更改变为可用。
情景 2:WebSocket
Device > HAProxy > CXServer1..N => Platform1..N
在此情景中,设备与 Connection Server 为点对点通信。平台请求将会循环。如果设备进行了模型更改,然后发出一个将转到另一服务器的请求,则在处理前会出现第一个更改。请求将会延迟,直到模型版本至少同步到发生更改的版本。如果未能在一段时间内同步,则请求将超时。因此,此设备可以与任何服务器对话,并会得到适当的响应。
如果连接第二台设备以使其查看第一台设备所做的更改,则最终一致性也适用于第二台设备。系统只能保证等待单个连接范围内的更改。
情景 3:用于更改模型的 HTTP 请求会触发对已连接设备的通知
Device > HAProxy > CXServer1..N => Platform1..N
用户对模型进行更改,并将此更改通知给设备,以使其能够重新提取定义。设备可能会从尚未看到此更改的服务器中提取数据。现在,模型版本已注入到 WebSocket 会话中,因此,如果在模型版本较低的服务器上发出请求,则它将等待至少同步到该模型版本,然后再返回。如果未能及时同步,则请求会超时。
并会因此增加一个新的 postCommitEventQueue。所添加的任何事件 (如属性更改),将在完整事务处理提交后且已知新模型版本时激发。设备接到通知后,会将模型版本注入到 WebSocket 会话中,以确保该设备的未来请求将等待服务器同步到与原始更改一致。
这对您有帮助吗?