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