以多人网络游戏的用例为例。您立即就会遇到在网络上复制和协调共享状态的问题。
似乎有多种工具针对此问题的某个方面,其中两个工具似乎有重叠:
我的问题是:CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?
distributed-computing distributed-system shared-state raft crdt
分布式系统中内部时钟同步和外部时钟同步有什么区别?
operating-system distributed-computing distributed-system clock-synchronization
我已经阅读了一些关于 Raft 的文档,并且得到了关于提交的相互矛盾的信息。我知道只有当已知条目存储在大多数服务器中时才能提交,但是还有其他条件吗?我读到,当前术语的条目也必须存储在每个服务器中,但其他一些文档对此只字未提。有什么帮助吗?
谁能从高层次上讲一下主备和状态机复制之间的关系?
在我看来,主备是一种状态机复制。但它需要额外的机制来确保所有复制都在主节点上达成一致,这在通用状态机复制中是不必要的......
这样对吗?或者有什么想法吗?
我将 Rabbitmq 与微服务架构一起使用。我在许多用例中使用主题和直接交换,并且效果很好。但是我有一个用例,我必须从数据库中删除一条记录。当我删除记录时,需要调用其他几个服务并维护/删除引用的记录。我可以通过简单地通过直接交换调用这些服务来实现这一点,但我读到它更喜欢编排而不是编排。这意味着我应该实现发布/订阅模式(rabbitmq 中的扇出)。我的问题是,如果我在分布式系统中使用发布/订阅模式,如何确保只有一个服务实例使用发布的消息?
我有我的 Django 网站,该网站目前由两台机器使用负载平衡器提供服务。我想从一台机器上维护与用户对应的会话。我知道我可以将负载均衡器配置为使用粘性会话,这样来自用户的所有请求都将由同一台服务器提供服务。但我想使用会话变量来实现相同的目的。
这就是我如何将该会话变量存储在集中式数据库中,任何服务器都可以从中访问该用户的会话,因此任何服务器都可以通过使用该会话变量存储来为其提供服务。但是我无法理解流程以及如何在 Django 中实现相同的流程。
所以我的问题是如何为用户将会话保存在数据库中,以便任何服务器能够访问它并相应地为请求提供服务。在这种情况下,这些 login() 和 logout 将如何工作?
我也有多个数据库。我计划将一个用于用户身份验证和其他内容,另一个用于网站相关数据存储。或者任何人至少可以向我解释如何实现这一目标的流程。
python django distributed-system system-design sticky-session
当 Kubernetes Spring-Boot 应用程序启动有 8 个实例时,每个节点中运行的应用程序需要获取 pod/容器的序列号。运行同一应用程序的 Pod/容器不应有重复的数字。假设一个 Pod 运行单个容器,而一个容器仅运行应用程序的一个实例。
应用程序可以从 Kubernetes API 为每个 Pod 提取一些唯一标识符,例如:
networkInterface.getHardwareAddress())aks-default-12345677-3my-sample-service-sandbox-54k47696e9-abcde)aa7k6278-abcd-11ef-e531-kdk8jjkkllmm)12.34.56.78)但是从 API 获取此信息的应用程序无法在指定的 pod 范围 [0 - 最大节点计数-1] 内安全地生成并为其分配唯一的编号。任何在这些唯一标识符上运行的缩减器步骤(按位 &)最终都会重复这些数字。与其他 Pod 进行通信是一种反模式,尽管有些方法采用共识/协议模式来实现这一点。
我的问题是: Kubernetes 是否有一种简单的方法可以在创建每个节点/容器/pod 时为每个节点/容器/pod 分配一个序列号 - 可能是在 pod 中的环境变量中?这些数字可以从 0 或 1 开始,并且应该达到住宅区 pod 数量的最大计数。
背景信息和一些研究:
执行UUID.randomUUID().hashCode() & 7 八次将会重复 0 到 7 之间的数字。请参阅中存在此错误的文章createNodeId()。上述减速器步骤实际运行的示例输出。
{0=2, 1=1, 2=0, …Run Code Online (Sandbox Code Playgroud) distributed-system id-generation spring-boot kubernetes twitter-snowflake
浏览 Google 的Chubby Paper,
与锁服务一样,共识服务允许客户端即使只有一个活动客户端进程也能安全地取得进展;类似的技术已被用来减少拜占庭容错所需的状态机数量[24]。然而,假设共识服务不专门用于提供锁(这将其简化为锁服务),这种方法无法解决上述任何其他问题
他们提到 Chubby 不是共识服务,而是锁定服务,以及共识服务如何用于在节点对等点之间达成共识。
根据我的理解,我认为像 Chubby 和 Zookeeper 这样的服务用于将分布式应用程序问题(例如领导者选举、集群管理、共享资源访问)卸载到不同的应用程序(chubby/zookeeper),并且这些是基于锁的服务。在如何达成共识方面对文件/znode 进行锁定。
什么是共识服务?它们与锁定服务有何不同?
什么时候会使用它们中的任何一个?
您好,我正在从系统设计的角度学习 NoSQL 数据库的功能,并且还了解到许多大公司使用分片 RDBMS 而不是那些 nosql 数据库来保存数据。
这是否表明 NoSQL 数据(Cassandra/MongoDB)的唯一优势是因为它是现成的分布式解决方案并且维护成本低廉?
根据CAP定理,分布式Erlang系统不可能同时提供以下三种保证:
分布式Erlang系统可以支持零个,一个或两个保证.
使用Erlang和OTP,如何实现每个保证?大多数分布式Erlang应用程序为更高级别的A和P做出实际选择,并满足"最终一致性".似乎Erlang本身旨在支持分布式(P),容错(A),软实时,不间断的应用程序.
编程语言(Erlang),运行时系统(ERTS)和库集(OTP)是为构建分布式容错应用程序而设计的; 我如何做三个定义分布式容错应用程序的东西?
我知道 memcache 使用一致性散列来进行着色。
但是,memcache 是否将复制作为磁盘存储?
我认为它不会。因为,丢失其中一台缓存服务器仅意味着该分片的缓存未命中。这不是单点故障。
不过,我还是想确认一下。
raft ×2
replication ×2
spring-boot ×2
cassandra ×1
consensus ×1
crdt ×1
django ×1
erlang ×1
kubernetes ×1
memcached ×1
mongodb ×1
nosql ×1
postgresql ×1
python ×1
rabbitmq ×1
sequential ×1
shared-state ×1