问题标签 [distributed-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2306 浏览

c# - 如何为监控平台实现分布式系统

我在为工作项目实施正确的模式时遇到了一些麻烦,在我对正确的设计策略感到满意之前,我不想先行。

该项目基于Genesys 计算机电话集成 (CTI) 平台。本质上,利用 Genesys 提供的 SDK,单个客户端可以订阅多个远程运行的 Genesys 服务(或TServer)。客户端然后注册与特定TServer相关联的一整堆目录号码 (DN)并等待呼叫事件。当事件发生时,它被客户端捕获并存储在数据库中。执行了许多其他操作,这在此阶段无关紧要。许多通信工作由 Genesys ProtocolManager对象处理,因此单个事件处理程序捕获所有客户端的事件数据,而这些数据又由EventBrokerService处理. 下面是一个简单的代码来说明连接过程、单个DN的注册和事件函数:

然后我们监听事件(有很多不同的事件):

Genesys 平台附带另一个称为 Genesys 配置服务器的组件。配置服务器保存所有 TServer 详细信息,包括 DN 信息和一大堆其他“对象”。它实际上只是一个花哨的 DBMS。不同之处在于,您还可以订阅配置服务器并注册 CRUD 事件(即CreateEventUpdateEvent等...)。没有说明代码,概念与上面的类似。(即您可以注册到多个不同的配置服务器并监听 CRUD 事件)。

在大多数情况下,我已经很好地涵盖了上述内容,并且我对迄今为止的实施感到满意。我想要实现的目标如下:

我正在尝试实现一个分布式系统。简而言之,该系统将由 2 个组件组成。监控服务和调度服务组件(它们都将是 Windows 服务)

监控服务组件

  • “监控服务”连接到 1 个或多个 T 服务器以监控呼叫事件
  • 监控服务也将订阅调度服务

调度服务组件

  • “调度程序服务”连接到 1 个或多个配置服务器并等待 CRUD 事件。
  • 一旦事件发生(即在配置服务器上添加了一个新的DN),调度程序捕获创建事件,并通知所有监控服务订阅者。随后,调度程序还将更新本地数据库,因此保留 DN 信息以备冗余(以防调度程序无法连接到配置服务器)。
  • 新创建的 DN 所属的监视订阅者(由唯一的 DBID 和 TServerID 标识符区分)将接受 DN,并将其注册用于侦听事件(类似于第一个代码片段中所示)。不具备所需 TServer 连接的监控订阅者自然会丢弃接收到的请求。
  • Dispatcher 也可以接收新添加的 TServer,但这一次,它将决定要使用哪个监控服务,以便该监控服务建立另一个连接。这将取决于诸如监视服务上运行的当前会话数或单个服务当时正在消耗多少内存等因素。

我提出了一些基本概念,下面是一些代码来说明我到目前为止所做的事情:

我选择的通信方式是 WCF 和NetTcpBinding,所以对于简单的部分,我暴露了一个接口:

在调度程序上,我已经实现了它:

从上面的代码中,很明显每个订阅的监控服务都有一个唯一的标识符,这样就可以检索到正确的服务回调上下文(以防我决定做一些其他时髦的操作)。

这就是我的困境基本上开始的地方。长话短说,我的问题如下:

  1. 尝试从 Dispatcher 服务中将消息传递给所有订阅者时,如何处理DisMonService类。即添加了新的DN,让我们调用DisMonService类并通知所有订阅者。
  2. 在DisMonServie中处理所有订阅者的更新时,实现的最佳模式是什么

目前,我的虚拟客户端连接到调度程序,并且它自己注册。展望未来,访问DisMonService类的最佳方式是什么。

我希望我不会让任何人对我要问的问题感到困惑。我想我真正想要找到的是实现上述系统的最佳方法,任何建议等等。一些代码示例和片段真的很有帮助。

这是我在这里的第一篇文章,所以如果我没有按照论坛的标准解释自己,我向任何人道歉。

0 投票
1 回答
1818 浏览

c++ - 在 C++ 中序列化向量以通过 UDP 套接字发送?

作为我们期末项目的一部分,我们需要实现一个分布式聊天系统。该系统需要具有可扩展性和鲁棒性。牢记这些标准,我对如何通过套接字发送矢量对象感到困惑。

由于向量是动态分配的,因此发送它的对象将不起作用,因为它指向的内存没有被复制。为了完成这个序列化将是最好的选择。但是,根据我们项目的要求,我们不应该使用任何第三方库,例如 Boost 和 Google Protocol Buffers。

因此,要序列化矢量对象并通过网络发送它,我似乎找不到解释如何继续的入门指南。还有其他我们可以使用的替代方法吗?

该向量将包含聊天组中每个成员的字符串(IP 地址:端口)。

任何帮助都会很棒。谢谢你。

注意:我们需要让聊天客户端在集群上运行,我相信为了使系统健壮和可扩展,我们还需要考虑字节序。

0 投票
2 回答
117 浏览

multithreading - 哪种方法更健壮和可扩展?

我正在实现一个分布式聊天系统,在这个系统中我们有以下选项:

  1. 使在每个节点上运行的客户端和服务器作为单独的线程运行。充当接收者的服务器将作为守护线程运行,而客户端将用户输入作为普通线程运行。

  2. fork 两个进程,一个用于客户端,一个用于服务器。

我无法推理出要继续使用哪一个。任何见解都会很棒!

0 投票
1 回答
1109 浏览

sockets - 将消息格式编码到缓冲区以通过 UDP 套接字发送?

作为我们项目的一部分,我们需要决定如何在数据报包中使用套接字发送结构。为了做到这一点,我们不应该通过任何第三方库使用任何序列化。我想出的是将结构字段编码到缓冲区中。

例如。

现在要发送这个结构,我们会将它编码到一个类似于这样的缓冲区

/s"sizeofmessage"/i"sequence_number"/data"datamessage"

有没有更好的方法来实现这一点?

0 投票
1 回答
234 浏览

soa - SOA 的最佳通用消息格式?

如果我有一堆服务器(最终是服务器组),每一个都是不同的服务 (SOA),我希望它们能够:

  • 通过 TCP 在高吞吐量、低延迟、不限流量的网络上发送请求和接收响应。
  • 使用以下通用消息格式:
    • 编码和解码/解析速度快
    • 支持列表和二进制字符串
    • 不一定需要一次更新所有服务(例如,添加一个字段不应阻止过时的服务读取消息并选择他们期望的所有字段)

你们会推荐哪种格式?我目前正在研究将消息编码为 BSON,但想听听一些建议。

谢谢 :-)

0 投票
1 回答
986 浏览

mysql - MySQL:如何原子地修改存储过程?

我在互联网上进行了搜索,了解到更改存储过程主体的唯一方法是删除并再次创建它。该机制似乎没有任何问题,但如果我有一个客户端应用程序(或数千个分布式客户端)不断调用存储过程以更新服务器数据库上的某些数据,则删除该过程将导致数据丢失和/或损坏。

我在想是否有像“CREATE PROCEDURE IF EXIST ...”这样的语法或类似的功能,这样更新操作就会顺利进行。然而,我没有发现 MySQL 中提供了这样的东西。

那么大家觉得这个问题怎么解决呢?很棒的想法?

0 投票
2 回答
178 浏览

java - 在关闭 RMI 服务器之前执行任务

我正在使用java RMI来实现一个分布式银行系统,其中每个服务器代表一个分支,当关闭服务器/分支时,它的数据存储在自己的数据库中,存储在其数据库中的帐户应该转移到另一个服务器/分支如何执行在服务器关闭之前此任务的代码任何帮助表示赞赏并提前感谢

0 投票
0 回答
556 浏览

java - 具有远程方法调用(rmi)的对等系统

您如何将分布式算法(例如向量时间戳、领导者选举算法)整合到使用 RMI 创建的对等系统中?我必须想出一个利用分布式算法的对等系统。如果有人能给我一些想法,我将不胜感激。

干杯

0 投票
1 回答
709 浏览

distributed-system - 查看更改算法和paxos

我想知道视图更改算法和Paxos之间有什么关系?在我的讲义中,它指出“每个视图的参与者都同意主要的,然后再控制复制过程”。在这种情况下的观点是什么? Paxos 与此有何关联?

0 投票
1 回答
473 浏览

algorithm - 模型检查 Paxos

我已经实现了共识算法(基于 Paxos)。我添加了一些随机测试用例,看起来不错。但是想通过模型检查进行测试?找不到正确的文章。请分享如何在 Paxos 中进行模型检查

谢谢