在 MongoDB 文档中,here已经提到,在副本集中,即使使用多数 readConcern 我们也将实现最终一致性。我想知道当我们在读取和写入中占多数时,这怎么可能导致分布式系统中的法定人数(R+W>N)?我希望在这种情况下有一个强大的一致系统。这也是 Cassandra 使用的技术,以实现强一致性。
有人可以为我澄清一下吗?
我正在尝试实现 Raft 共识算法。以下是我每次设置服务器状态的一般term理解votedFor:
term为 0 并且votedFor是nullterm1,并将其设置votedFor为自身。RequestVoteRPC时,它应该将 更新为观察到的数字,然后更新到发送者,前提是接收服务器有一个of并且其日志不比发送者的日志更新。termtermvotedForvotedFornullAppendEntriesRPC,并且发送者的状态term高于或等于自己的 RPC 时,Candidate 应该将其更新term为发送者的状态term,然后将其设置votedFor为发送者,并将其状态变为 Follower,从而承认发送者为其合法的领导者。term高于其自身的 RPC 请求或响应时,它应该将自己的值设置term为接收到的服务器的值term并设置votedFor为null。这些一起构成了Raft 正确实现中仅有的 5 种方式吗?这些情况是否被正确总结term?votedFor我对此感到困惑,因为论文仅提到在某些时候节点将转换为追随者,而没有指定是否votedFor应该是具有较高术语或的发送者的值null。我担心情况4是错误的,应该是这样的:如果AppendEntries发送者的术语更大,那么接收者应该将其更新term为发送者的术语,然后设置votedFor为发送者,无论接收者是否是追随者、候选者或过时的领导者。
我有一个目录树
working_dir\
main.py
my_agent\
my_worker.py
my_utility\
my_utils.py
Run Code Online (Sandbox Code Playgroud)
每个文件中的代码如下
""" main.py """
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from my_agent.my_worker import MyWorker
import ray
ray.init()
workers = [MyWorker.remote(i) for i in range(10)]
ids = [worker.get_id.remote() for worker in workers]
# print(*ids, sep='\n')
print(*ray.get(ids), sep='\n')
Run Code Online (Sandbox Code Playgroud)
""" worker.py """
from my_utility import my_utils
import ray
@ray.remote
class MyWorker():
def __init__(self, id):
self.id = id
def get_id(self):
return my_utils.f(self.id)
Run Code Online (Sandbox Code Playgroud)
""" my_utils.py """
def f(id):
return '{}: Everything is fine...'.format(id)
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息的一部分
回溯(最近一次调用最后一次):
文件“/Users/aptx4869/anaconda3/envs/p35/lib/python3.5/site-packages/ray/function_manager.py”,第 616 行,在 fetch_and_register_actor unpickled_class …
我在采访中被问到这个问题,但无法回答。
\n当两条消息并发时,FB Messenger 如何对用户端的消息进行排序,以避免聊天期间以及用户再次访问 Messenger 时显示顺序出现差异。我认为我们可以为每条消息存储一个时间戳,这是服务器接收消息的时间。但是,这并不能确保客户端消息的正确排序。
\n假设服务器时间戳无法确定消息的确切顺序,如下所示:
\n我读到解决这个问题,我们可以使用矢量时钟,但无法理解如何在聊天期间以及用户再次登录时为不同用户保留消息顺序。
\n在上述场景中,用户 1 将看到 M1,然后是 M2,而用户 2 将看到 M2,然后是 M1。现在,如果每个用户还为其发送给每个客户端的每条消息(分别)生成序列号或时间戳。然后在上面的场景中,user1 将发送序列 <1 (user1 seq), 0(user2 seq) > 的消息 M1,而 user2 将发送序列 <0 (user1 seq), …
distributed distributed-computing distributed-system sequencing vector-clock
我是卡夫卡新手。
Kafka 应该被用作分布式服务。但我在网上找到的教程和博客文章从未提及是否有一个或多个zookeeper节点。
本教程仅弹出一个 Zookeper 实例,然后弹出多个 kafka 代理。
这是应该怎样做的吗?
我从http://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafka那里学到了什么.
我们的目标是支持在单个数据中心内的Kafka群集中进行复制,其中网络分区很少
在分布式系统中,我认为"分区"是基本的,所以我不知道当只有服务器节点失败时,Kafka保证没有分区的可用性.或者我想念一些东西
我是策展人和zk的新手 - 并希望与社区其他成员仔细检查我的理解.似乎策展人的文档不是很好.
策展人的持久性短暂节点是否基本上是短暂的znode,但是一旦断开连接,还有额外的机制来重新建立连接?还有其他不明显的差异吗?
ps是否有zk的社区/讨论组(甚至更好,策展人)?一个简单的谷歌搜索没有发现任何东西.
distributed-computing distributed-system apache-zookeeper apache-curator
如果我选择使用Azure Service Fabric构建我的分布式应用系统,是否意味着我需要以Actors方式创建所有部分?
或者,如果我已经在Azure云服务和角色,工作人员中分配了系统,是否可以使用Azure Service Fabric创建新部件并将它们连接在一起?
使用Azure Service Fabric与Azure云(服务,角色,队列)的自定义架构的利弊是什么?
Elasticsearch和Kafka是分布式系统的两个示例,但是它们都采用不同的方法来提高数据生产者的智能-在ES数据生产者中,没有关于数据存储位置的发言权。他们只是要求集群存储数据。在Kafka中,生产者知道群集的内部状态(它知道主题的分区位于哪个节点上),并能够告诉群集将数据存储在特定分区上。
显然,Kafka和ES是为不同的用例而构建的,但是我正在努力将这些用例与该设计决策联系起来-为什么Kafka允许生产者确定存储数据的位置,但ES却不这样做?
在官方筏网页上考虑这种模拟
为什么term 2 index 1不承诺S2 (leader),S3并S4同意日志?我运行这几分钟以确保所有通信都已发生.
奇怪的是,如果我再添加一个日志条目,term 6 index 2那么term 2 index 1将提交.
有谁知道什么是阻止term 2 index 1提交的规则?
algorithm computer-science distributed-system consensus raft
apache-kafka ×3
consensus ×2
raft ×2
.net ×1
algorithm ×1
azure ×1
c# ×1
distributed ×1
mongodb ×1
python ×1
ray ×1
replication ×1
sequencing ×1
vector-clock ×1