问题标签 [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.
architecture - 域是否应该访问另一个系统的应用程序服务?
特别是跨两个系统:系统 A 的域可以调用系统 B 的应用程序服务/远程门面吗?
例如,如果 Ordering System 在其域中有 Order 实体,该 Order 实体的验证方法是否应该调用 Stock Keeping Service 的应用程序服务来检查是否有足够的产品来完成订单?
我的直觉是,这不是正确的做事方式。
这是以前的一个相当复杂的问题的简化版本: 集成各种领域驱动设计系统之间的集成 这不是必要的,也不建议您参考上一个问题。
database - 通过复制 SQL 数据库实现容错
假设中间层服务器是 3 路复制的,后端数据库(MySQL、PostgreSQL 等)是 3 路复制的。用户请求最终会在中间层服务器中创建一些用户数据,我想以一种对故障有弹性的方式将其提交给后端数据库。
一个候选尝试解决方案,例如,如果我将数据发送到一个 SQL 数据库并让它将数据复制到其他数据库,那么如果一个 SQL 数据库在它可以复制数据之前发生硬盘崩溃,则数据将丢失。
在实际现实世界中使用的容错的最佳实践解决方案是什么。
c# - 分布式系统拓扑
试图将电子投票系统作为一个大学项目来实现,并且正朝着我的目标迈出最重要的一步<系统架构>
多服务器/多客户端,必须真正可靠到大约 8000 万客户端在线,它还必须允许新服务器加入以支持投票过程,它的输出将是统计数据和报告,因此它必须允许我收集随时获取信息,支持加密,散列,摘要确认,..等
我的目标只是在没有中心故障点的情况下支持大量客户端,然后让客户端找到合适的服务器进行身份验证和投票
合适的服务器取决于 2 个标准:
- 服务器距离优先
- 服务器负载优先级
最初仅使用的第一个标准,在投票过程中都使用了两者
在围绕我的项目搜索示例后,找到了 6 个解决方案:
- 服务器和客户端之间的动态 DNS 服务器
- 客户端和服务器之间的 Web 场负载平衡调度程序
- 无服务器 p2p 服务器云,客户端作为 p2p 服务器加入,使用 PNRP 获取服务器列表
- Serverless/State-Server p2p 服务器云,客户端连接到状态服务器以获取服务器列表
- 从主服务器向下的服务器树
- DHT网络和数据库系统
从我的角度来看,最后一个解决方案是合适的,因为没有任何瓶颈故障点,这导致我开始搜索一个开箱即用的 DHT 库或完整的分布式系统以集成到我的应用程序中,或者只是重新发明轮子并实施整个事情从头开始!
问题:
- 我选择了正确的解决方案吗?
如果是,请指点我正确的路线,通往开箱即用的 [.NET] 库或系统!
如果否,请指出合适的 [.NET] 解决方案,即使我在 6 个解决方案中没有提到它!
问候 ,
database - HBase 如何保证行级原子性?
考虑到 HBase 将每个列族存储在单独的 HFile 中以及一行可以跨越多个列族的事实。HBase 如何确保跨多个列族的行上的 put/delete 操作确实是原子的?
soa - NServiceBus:共享消息 DLL
我最近一直在研究 NServiceBus,因为我认为消息传递是减少系统之间依赖关系的好方法。但是,让我印象深刻的第一件事是消息发布者和所有订阅者必须共享消息定义 DLL。在这种情况下会发生什么?:
假设有一个处理客户数据的中央系统。每当客户记录发生更改时,它都会发布一条包含姓名和地址的消息。这有十个订阅者,它们在收到消息时更新他们的本地数据副本。
有一天,需求发生了变化,其中一位订户也需要客户的电话号码。消息、发布者和受影响的订阅者都更新为处理电话号码,它们都被重新编译并发布。
其他九个订户是否会继续不受影响?它们会继续使用旧的 Message DLL,还是都需要使用新的 DLL 进行更新、重新编译和发布?
sorting - 分布式系统中的插入排序
插入排序如何处理分布式系统中数组的多个副本?我问是因为读取数据比写入数据更容易。就更新次数而言,分布式系统中算法的成本是多少?
cassandra - 使用 Cassandra 数据库为 Web 服务节点分配唯一编号
为了最好地解释我的目标,我将把问题简化为我的基本要求。请让我知道是否需要更多详细信息以清楚起见。
假设我有 10 个可分配的唯一数字 (0-9)。哪些号码被保留或空闲由数据库包含。正在运行的前端 Web 服务的目标是成功请求分配号码。一旦将编号分配给特定节点,它就会被保留,其他节点不能分配它。
请记住,这是一个没有单点故障的分布式系统。
给我带来麻烦的警告是 Cassandra 的最终一致性概念。请注意,我可以以更高的延迟为代价将 Cassandra 调整为完全一致。如果这是我最好的(也可能是唯一的)选择,我可以做到,但我想保留一致性调整的概念。
我对策略的想法是在节点上执行以下操作:
1) 查询 Cassandra 以获取空闲号码列表。
2)随机选择一个空闲号码。
3) 对 Cassandra 执行 Put,说明该节点已保留该号码。
4)不断查询Cassandra,看哪个节点成功预留了号码。(不断请求,因为读取可能不会立即反映分配。)
5)如果返回的节点名称是该节点的预留被归档的名称,则预留成功。
6) 如果返回的节点名是不同的节点名,则表示另一个节点与这个节点几乎同时请求该号码,并被分配。此节点必须返回步骤 1 并重试。
我有一种奇怪的感觉,如果我使用上述策略,特定情况会导致错误(双重赋值等)。
其他人可以评论我提出的策略,并可能提供他们自己的吗?谢谢。
distributed-system - 用于存储视频流的分布式数据存储基础设施
我正在探索基于多站点集群的分布式数据存储中间件的选项。Lustre、HDFS 和 OpenStack Swift 等软件可能会引起人们的兴趣。然而,我面临的主要困难是数据存储基础架构是用于基于 Windows 的应用程序。
基于 Windows 的应用程序写入卷(如数据库服务器)。因此,数据存储子系统必须能够创建 iSCSI 目标(与 Amazon EBS 类似)。EMC、HP 等商业供应商拥有专有解决方案。
是否有人知道一种开源解决方案(具有自由许可证),它可以在分布式基础设施(或开源 Amazon EBS 克隆)之上创建块存储?
synchronization - 关于分布式逻辑时钟、Lamport 算法
大家好,我想问一下分布式系统中的逻辑时钟。Lamport 算法定义当事件 a 在进程 Pi 中发送消息,并且在进程 Pj 中事件 b 接收到该消息,则可以定义事件 a 在 b 之前发生。假设进程 Pj 在事件 b 收到消息之前,事件 c 发生在 Pj 上(因此 c 在 b 之前发生)并发送消息进程 Pi,然后进程 Pi 在事件 a 之后在事件 d 收到消息,那么我们就有事件 c , 以及 a, 发生在 d 之前。
我的问题是,如何定义事件 a(第一个事件发生在 Process Pi 上)和事件 c(第一个事件发生在 Process Pj 上)之间的关系?如何让进程 Pi 和 Pj 都同意事件 a 和 c 的顺序?
database - 数据库的地理冗余:有哪些选项?
我们需要在我们的项目中提供地理冗余,它有大量的数据库(2-20 TB,具体取决于客户的要求)。我们有来自网络的连续数据流入(例如每小时 1-20 GB)。
目前,我们在 RHEL (Linux) 集群上拥有带有 J2EE AppServer 的 Oracle(无 RAC)和用于存储的 SAN 磁盘,简而言之,一个 DB,多个 AppServ。
我们需要的是地理冗余。需求可以概括为,只要一切正常,我们产品的 2 个独立安装服务于 2 个不同的网络(每个服务一个)。当其中一个倒下时,另一个应该同时为两者服务。
补充笔记:
- 我们需要一个支持 SQL 的关系数据库,因为仓储是基本需求之一。
- 最好不要使用托管/云服务,例如:http ://aws.amazon.com/vpc/ ,因为我们的客户可能对安全/隐私非常挑剔(即使托管/云服务提供这些服务)。
打折应用程序逻辑 仅复制我的数据有哪些选项?STFW 只得出以下结果(因为我不是 DBA 专家,我的解释可能是错误的):
- 令人惊讶的是,我找不到 Oracle 的地理冗余产品。Oracle RAC 用于本地集群(更多的是水平可伸缩性而不是冗余)。
- MySQL在分布式时似乎只支持活动备用。我需要主动-主动。
- Guident似乎在提供基于某些 Oracle 产品的服务,但没有产品。
谢谢——卡什亚普