经常用saltstack的人会发现,zeromq貌似不是那么靠谱,其实不能说0mq不靠谱,应该说salt的这样的集群的环境,导致zeromq 不能更好的融合于0mq的体系里面。
那么其实我个人,觉得zeromq确保可靠性质的方案,还是有的,但是需要我们自己做事件的监听和锁的使用。 我想用saltstack的人并不一定都会python,所以才直接干脆的换掉zeromq,用raet做通信及运行架构。
标记下,原文链接是,xiaorui.cc
他们想实现什么,首先想在网络io方面做成异步,而不是单纯的用pubsub这样通信原理加逻辑异步,而是真正的网络io异步。 另一个方面是,尽量的排除multiprocessing的利用,而启用现在相当火的协成,也就是微线程。
微线程使用协同工作的多任务处理来取代线程和/或进程,其避免了许多诸如资源竞争,上下文切换,和进程间通信的复杂性,同时提供了更高的性能。
由于所有协同工作的微线程均运行于一个进程,也就造成一个简单的微线程应用的资源调用被限制在一个CPU核心。为了使得所有的CPU核心均得到充分的利用,应用程序需要能够为每个CPU核心运行至少一个进程。这就需要同一台主机的进程间通信。但是不同于传统的多进程处理方式,即一个进程完成一个逻辑并发的功能,一个基于微线程的多进程程序不再使用一个微线程处理一个逻辑并发功能的模式,而微线程的总数是取决于总的进程的最小数目的限制,并且其不超过CPU的核心数量。这将优化CPU的处理能力,同时最大限度地减少进程上下文切换的开销。
另外,他们调用了UDP作为通信,在UDP里面夹杂了各种saltstack对他们的定义。主要就是为了让saltstack的通信更加的可靠性。
那么对于安全方面,它采用了CurveCP的加密方案,听说 速度是很给力,也相对的安全。
这两天抽个时间,看看Raet的代码实现流程,好让自己更了解saltstack。
我的理解也差不多