我正在开发一个旨在通过部分订购信息扩充Python套接字消息的项目.我正在构建的库是用Python编写的,需要插入通过套接字函数发送的现有系统的消息.
我已经阅读了一些资源,即@Omnifarious在这个问题上的答案python- imports -from-builtin-library-when-module-with-name-name-exist
你可以做一件非常丑陋和可怕的事情,不涉及钩住进口机制.这是你可能不应该做的事情,但它可能会奏效.它将您的日历模块变为系统日历模块和日历模块的混合体.
我已经实现了导入机制解决方案,但我们已经决定这不是我们想要采取的方向,因为它过分依赖于环境.在我的情况下,将类合并为混合而不是依赖导入机制的解决方案似乎是最好的方法.
为什么混合动力被称为丑陋而可怕的解决方案?我想在我的项目中开始实现它,但我对这些警告很谨慎.它似乎有点hackish,但由于它将成为安装脚本的一部分,运行此一次不是没有问题吗?
这是一个代码片段,其中插入需要在发送之前拦截套接字消息:
class vector_clock:
def __init__(self):
"""
Initiate the clock with the object
"""
self.clock = [0,0]
def sendMessage(self):
"""
Send Message to the server
"""
self.msg = "This is the test message to that will be interposed on"
self.vector_clock.increment(0) # We are clock position 0
# Some extraneous formatting details removed for brevity….
# connectAndSend needs interpositioning to include the vector clock
self.client.connectAndSend(totalMsg);
self.client.s.close()
Run Code Online (Sandbox Code Playgroud) 我是分布式系统的新手,我正在尝试深入了解CRDT的概念.我意识到它有三个符号:
Conflict-free Replicated Data Type
Convergent Replicated Data Type
Commutative Replicated Data Type
Run Code Online (Sandbox Code Playgroud)
任何人都可以举例说明我们在分布式系统中使用CRDT吗?非常感谢提前.
问候,
我正在评估多数据中心分布式系统的一些组件.我们将使用消息队列(通过RabbitMQ或Qpid),因此代理可以向其他代理发出异步请求,而无需担心寻址,路由,负载平衡或重新传输.
在许多情况下,代理将与非高度并发访问的组件进行交互,因此需要锁定和跨代理协调以避免竞争条件.此外,我们希望系统能够自动响应代理或数据中心故障.
考虑到上述用例,ZooKeeper似乎很适合.但我想知道是否尝试使用ZK和消息排队是否有点过分.似乎Zookeeper所做的事情可以由我自己的集群管理器使用AMQP消息传递完成,但这很难真正做到.另一方面,我已经看到一些使用ZooKeeper实现消息队列的例子,但我认为RabbitMQ/Qpid更适合这种情况.
有没有人使用这样的组合?
提前致谢,
-克里斯
locking message-queue distributed-system rabbitmq apache-zookeeper
我正在寻找NoSQL应用程序的好例子,它们描述了如何处理缺乏事务性,正如我们在关系数据库中所知道的那样.我最感兴趣的是写密集型代码,因为对于大多数只读代码来说,这是一个更容易的任务.我已经阅读了很多关于NoSQL的内容,关于CAP定理,最终的一致性等等.然而,这些事情往往集中在数据库架构上,而不是与它一起使用的设计模式.我确实理解在分布式应用程序中实现完全事务性是不可能的.这就是为什么我想了解为什么要降低要求以使任务可行的原因.
编辑:
并非最终的一致性是我自己的目标.目前我还没有真正看到如何将NoSQL用于某些写密集型的东西.说:我有一个简单的拍卖系统,有优惠.理论上,接受报价的第一个人获胜.在实践中,我希望至少保证只有一个胜利者,并且人们在同一个请求中得到他们的结果.这可能不可行.但是如何在实践中解决它 - 也许一些请求可能需要比平时更长的时间,因为出了问题.也许一些请求应该自动刷新.这只是一个例子.
阶段2.(a)如果提议者从大多数接受者收到对其准备请求(编号为n)的响应,则它向每个接受者发送一个接受请求,用于编号为n且值为v的提议,其中v为响应中编号最高的提案的值,如果响应未报告任何提议,则为任何值.
如论文中所述,
提议者通过向一组接受者发送提议被接受的请求来发布提议.(这不一定是响应初始请求的同一组接受器.)"
但正如我的理解,如果我们将第2阶段改为:(a):
如果提议者从大多数接受者收到对其准备请求(编号为n)的响应,则它向任意一组多数接受者发送一个接受请求,该请求用于编号为n且值为v的提议,其中v是该值的值.答复中编号最高的提案,如果答复未报告提案,则为任何值.
算法将失败,以下是一个例子.考虑到共有3个接受者ABC.我们将使用X(n:v,m)来表示接受者X的状态:提议n:v是X接受的最大编号提议,其中n是提议编号,v是提议的值,m是X曾经回复的编号最大的准备请求的编号.
我在这里错过了吗?谢谢.
虽然post @ http://highscalability.com/amazon-architecture解释了亚马逊的体系结构,但我很想知道如何实现Amazon S3.
我的一些猜测是
是否可以使用Python或PHP等脚本语言以更小的规模实现类似的功能?
假设发生网络分区并且领导者 A 占少数。Raft 会选出一个新的领导者 B,但 A 认为它仍然是领导者一段时间。我们有两个客户。客户端 1 将键/值对写入 B,然后客户端 2 在 A 下台之前从 A 读取键。因为 A 仍然相信它是领导者,所以它会返回陈旧的数据。
原论文说:
其次,领导者必须在处理只读请求之前检查它是否已被废黜(如果选举了最近的领导者,则其信息可能会过时)。Raft 通过在响应只读请求之前让领导者与集群的大多数人交换心跳消息来处理这个问题。
是不是太贵了?领导者必须为每个读取请求与多数节点交谈?
我已经在C++中做了一段时间的套接字编程,有点厌倦了编写相同的代码来处理错误,序列化/反序列化数据等.
是否有那些对分布式系统有一流支持的编程语言?
在阅读了paxos和筏纸之后,我有以下困惑:paxos论文仅描述了单日志条目的共识,这相当于筏算法的领导者选举部分.在木筏领导者选举中,paxos的方法优于简单的随机超时方法有什么优势?
我正在学习分布式系统中的顺序一致性,但是无法理解所解释的术语。如果有人可以就以下(a)和(c)为何顺序一致而(b)不一致的外行人的术语有所了解,我将不胜感激。谢谢。
algorithm ×2
consensus ×2
paxos ×2
amazon ×1
amazon-s3 ×1
consistency ×1
couchdb ×1
crdt ×1
distributed ×1
hadoop ×1
locking ×1
networking ×1
nosql ×1
python ×1
rabbitmq ×1
raft ×1
sequential ×1
sockets ×1