小编bob*_*bby的帖子

如何处理裂脑?

我已经阅读了奥尔良常见问题解答,当分裂脑可能发生但我不明白可能发生什么不好以及如何正确处理它.

常见问题解答说的含义如下:

您只需要考虑在编写应用程序时有两个actor实例的罕见可能性.

但实际上我应该如何考虑这一点以及如果不这样做会发生什么?

Orleans Paper(http://research.microsoft.com/pubs/210931/Orleans-MSR-TR-2014-41.pdf)说:

应用程序可以依赖外部持久存储来提供更强的数据一致性

但我不明白这意味着什么.

假设裂脑发生了.现在我有一个谷物的两个实例.当我发送一些消息时,这两个消息可能被接收(或者甚至可能有更多?)不同的实例.假设在接收这些消息之前的每个实例都具有相同的状态.现在,在处理这些消息后,它们具有不同的状态.

他们应该如何坚持自己的国家?可能存在冲突.

当另一个实例将被销毁时,只有一个实例将会被破坏的实例状态发生?它们处理过的消息从未被处理过吗?然后客户端状态和服务器状态可以是去同步化的IIUC.

我认为(裂脑)是一个大问题,我不明白为什么对它的关注很少.

orleans

9
推荐指数
1
解决办法
418
查看次数

云服务/ Node.js中的Web角色与工作者角色

Web角色(Node.js)和工作者角色(Node.js)之间的区别是什么?两者都可以在80端口上运行.两者的代码完全相同.我知道Web角色在IIS上运行,但是如果Node.js有自己的WebServer,我为什么需要IIS作为代理呢?

azure node.js

5
推荐指数
1
解决办法
2502
查看次数

在特定时间可靠地处理消息

我们假设我有一个聊天应用程序.

客户端向聊天发送消息,导致某些Actor的某些命令.现在,我想立即处理他写的内容,并在此聊天中将其提供给其他用户,因此我处理此命令.同时我想告诉自己(一个演员)我需要在聊天记录数据库中存储此消息但不是现在.保存到数据库应该每2分钟发生一次.如果发生崩溃,我应该能够坚持到数据库.

我假设工作流程是这样的:

  1. 用户发送消息
  2. 聊天室演员收到了带有此消息的命令
  3. 我们向所有人广播此消息,并将此消息添加到某种队列以将其保留到聊天历史数据库
  4. 一些持久命令在超过2分钟超时时运行.它会按照到达顺序收集尚未保留的所有传入聊天消息
  5. 使用所有消息运行事务,然后将其从队列中删除.
  6. 如果在3之后的某个地方发生了崩溃并且消息没有持续存在,那么我应该尝试再次坚持它们.如果坚持下去,我就不应该再试图坚持下去.

如何在Akka中构建这样的东西?我应该使用哪些功能/哪种模式?

akka cap-theorem crdt

2
推荐指数
1
解决办法
156
查看次数

二进制模式匹配到列表中

我这样做:

<<a :: big-size(16), b :: big-size(16), c :: big-size(16)>> = <<0, 1, 0, 2, 0, 3>>
Run Code Online (Sandbox Code Playgroud)

然后结果将是:

a = 1
b = 2
c = 3
Run Code Online (Sandbox Code Playgroud)

但我真正需要的是:

a = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?

elixir

2
推荐指数
2
解决办法
781
查看次数

BigEndianStructure 中的字符串

我想做这样的事情:

from ctypes import *

class Packet(BigEndianStructure):
    _fields_ = [("length", c_ushort),
                ("session", c_uint),
                ("command", c_ushort)]

class PacketString(BigEndianStructure):
    _fields_ = [("length", c_ushort),
                ("value", c_char_p)]

class InitialPacket(Packet):
    _fields_ = [("time", PacketString)]
Run Code Online (Sandbox Code Playgroud)

但是我收到错误,因为 c_char_p 只能采用本机字节顺序。但也许还有其他方法可以制作长度在它们之前指定的字符串。我只是喜欢结构如何轻松地从套接字读取/写入。以及如何定义 _fields_ 然后可以像这样使用它:

initialPacket = InitialPacket()
initialPacket.command = 128
Run Code Online (Sandbox Code Playgroud)

问题是:如何在 BigEndianStructure 中创建可变长度字段?因为Python不允许我使用c_char_p。脚本根本不会运行。这是错误:

Traceback (most recent call last):
  File "C:\PKOEmu\test.py", line 8, in <module>
    class PacketString(BigEndianStructure):
  File "C:\Python27\lib\ctypes\_endian.py", line 34, in __setattr__
    fields.append((name, _other_endian(typ)) + rest)
  File "C:\Python27\lib\ctypes\_endian.py", line 24, in _other_endian
    raise TypeError("This type does not support other endian: …
Run Code Online (Sandbox Code Playgroud)

python ctypes endianness

0
推荐指数
1
解决办法
1296
查看次数

标签 统计

akka ×1

azure ×1

cap-theorem ×1

crdt ×1

ctypes ×1

elixir ×1

endianness ×1

node.js ×1

orleans ×1

python ×1