学无所长,一事无成
分类: Python/Ruby
2015-02-08 23:51:46
Ruby 标准库中已经有了一个分布式对象系统:DRb,就是分布式 Ruby 的意思。DRb 出了啥问题?为什么我们需要一个新的系统?DRb 有一个主要的缺点:它先天就是基于同步的,你能对一个 object 做的唯一操作就是方法调用,流程就是给远端 object 发送一个消息,远端执行方法,然后返回本地一个响应。
而 DCell 使用了异步消息协议。异步消息机制允许你采用更多的消息处理模式,而不仅仅是 DRb 实现的 请求/响应这一种模式,这些模式包括:
DCell 同样提供 Erlang 所倡导的错误容忍模式(fault-tolerance),即倾向于鼓励 actors 不做任何错误处理,一旦崩溃后只是简单地清除状态然后重启。Linking to actors on remote nodes can be used to detect these sorts of errors and have dependent actors restart in a clean state.
最终,DRb 需要你来保证作为 services 发布的 objects 是线程安全的,而 Celluloid 抽离出一系列的线程安全的原则,从而默认就可以保证你编写的 objects 是线程安全的。