AeroFS 团队今天开源了 SSMP 协议,SSMP 也就是 Stupid-Simple Messaging Protocol,里面包含协议规范,Go 实现,Java 实现和服务器加载测试工具。 XMPP 历史XMPP 在 AeroFS 有一段很长的历史了,是 AeroFS 过去 5 年点对点覆盖网络的关键组件。AeroFS 用 XMPP 来发现点,跨 LAN 域多播,通过可靠服务作为一个信号频道来建立点对点连接。 一方面,XMPP 可以完成工作。另一方面,XMPP 非常复杂冗长,还有很重的扩展。 ejabberd 可以完美的支持 XMPP 和 XMPP 的各种扩展。非常稳定,但是非常占内存,每个用户常占内存大约为 500kB,而我们其他服务的用户数量在不断增长。 CPU 使用也是非常高,而 AeroFS 团队希望能有一个低流量的服务。更糟糕的是,有一段时间内存泄露非常严重,每天要依靠 cron 作业来重启一次。 SSMP 产生 AeroFS 在寻找各种解决方案,准备起草一份简单的规范协议。 像 MQTT 和 STOMP 协议都非常不错,但是还不够简单。EventSource 规范已经非常接近目标,而且过去也被验证是很不错的。不幸的是,不能允许请求和时间在同一个连接上交叉。 最终规范看起来大部分来自流行的基于文本的协议,比如 HTTP,SMTP 和 STOMP,但是很明显更小更简单了,因为有着更短的 ABNF 语法:
AeroFS 团队把它命名为 "Stupid-Simple Messaging Protocol" (SSMP)。 顾名思义,SSMP 相比其他开放消息协议是非常简单,非常易懂的。比如消息确认和通配符订阅。AeroFS 团队主要的设计目标是:
使用 Go 编写的参考实现就是几个小时就完成了主要的部分,而且可以很快的集成到现有的系统,通过gockerize 工具 另一个实现使用 Java 编写,现在在 AeroFS 桌面客户端实现。 SSMP 成果 一点也不意外的是,Java 编写的新服务器和之前 Go 编写的服务器一样:
很明显,这些改进并不是因为语言的选择,而是因为更加简单的设计。但是,从 Go 实现的 SSMP 和 Java 实现的 SSMP 来看,Go 的代码相对容易维护,可读性更高。 SSMP 开源AeroFS 把 SSMP 开源,发布到社区: — Hugues & the AeroFS Team. via aerofs.com |