gpt4 book ai didi

c# - 创建在所有进程之间共享状态的多进程架构的最轻量级解决方案是什么

转载 作者:太空狗 更新时间:2023-10-29 23:25:29 28 4
gpt4 key购买 nike

我有一个包含 4 个部分的多层应用架构:

  • 网络服务器/客户端层
  • 处理进程间交互的中间数据层
  • 监控层
  • 由 n 个实例组成的客户端层

客户端/服务器层:

客户端/服务器层处理与使用自定义第 2 层协议(protocol)实现的另一台计算机的异步网络通信。由于通信中内置的设计限制,它需要保持独立并能够异步轮询/推送数据到数据层。

中间层:

中间层目前是使用数据库实现的。一张表包含可以调用的所有可能标签(大约 120,000)。第二个表保存第一个表的中间缓存,仅包含正在使用的值,这需要不断更新,并在请求新的项目集合时刷新。第三个表是发送集合更新的地方,并且只包含请求挂起时的数据。

监控层:

监控层是一个多线程的单体应用。它根据连接的监视器数量生成 n 个客户端实例。它管理所有客户端实例之间的全局状态,因为其中一个或多个可能共享相似/相同的状态。它创建一个唯一的所需值列表,在客户端需要一组不同的标签时管理发送更新请求,并管理重复更新。

显然,这并不理想。如果一个实例出现故障,它可以将其余实例也随之故障。我想做的是删除中间层,用监视器层替换它,并使所有东西都作为监视器进程的子进程产生,这样如果出现问题(例如通信心跳停止,客户端崩溃),它们可以随意重生等)。

数据库似乎太重而且不够专业,无法处理 IPC(进程间通信)。该程序是在极端的时间限制下编写的,因此利用数据库是“简单的解决方案”,并期望它在未来会有所改变。我非常喜欢 Google Chrome's multi-process architecture 的稳健性但我对他们如何将所有流程联系在一起(管道、tcp、?)知之甚少。

所以:

  1. 对于中间层使用 IPC 而不是数据库,我是否可以期待显着的性能提升?

  2. 哪种形式的 IPC 最适合 Windows 系统?

  3. 如果开发转移到 Mono,是否有可用的跨平台(阅读 Linux)替代解决方案来代替它?

  4. 我在哪里可以找到帮助入门的资源/示例?

注意:据我所知,该系统的架构似乎不必要地复杂,但它作为一个更大系统的前端存在。此应用程序也是关键任务,因此稳定性胜过效率。

更新:

我忘了在最初的问题中提及。数据库数据/索引在启动时直接从 ramdisk 加载。数据库本身已被索引以获得最佳性能。需要频繁写入的表或值未编入索引,但其余数据已编入索引。

我正在寻找替代方案来衡量,因为数据库的优化已达到极限,我认为仍有很大的改进空间。

我一有空就会上传一些架构图。

最佳答案

  1. 是的。数据库很可能涉及硬盘驱动器,而硬盘驱动器是任何计算机中速度最慢的部分,因此不使用硬盘驱动器可能会带来性能优势。

  2. 我会选择 zeromq / zmq .它是一个支持多种通信模式的面向消息的框架。例如 PUB/SUB 或 REQ/REP 等。更多示例 here

  3. zmq 是跨平台的,而且速度惊人。

  4. Some C# examples on github

关于c# - 创建在所有进程之间共享状态的多进程架构的最轻量级解决方案是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9374994/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com