1 分钟快速解答 LeanMessage 如何保证高可用性

 

LeanMessage即时通讯服务目前可以对所有的消息进行持久化,能够保证查询不会随着数据量的增大而导致性能衰减。...





LeanMessage 即时通讯服务目前可以对所有的消息进行持久化,而且能够保证查询(如查询某个会话的历史纪录,或者查询某个用户发送的消息)不会随着数据量的增大而导致性能衰减。用户对此会问「 LeanMessage 是如何保证大数据量下的高性能和高可用性的」

作为即时通讯云服务,LeanCloud 的 LeanMessage 服务从设计之初就考虑到海量消息的存储和查询问题。对于绝大多数应用、一般的应用场景来说,传统的关系型数据库都可以轻松支撑消息的存储。而且作为平台,LeanMessage 需要考虑最严酷的情况,所以在存储方面,我们使用了 HBase 作为基础,以 Redis 作为辅助的方案。

简单地说,HBase 的存储结构恰好满足我们对于消息的主要查询方式:即以时间为索引分页获取。但是由于 HBase 不支持二级索引,因此在设计表、RowKey 结构时需要首先考虑查询的需求,即「以查询来设计数据结构」。我们支持三个维度的查询:应用全局级别、对话级别和人(客户端)级别,因此需要三个表来支撑这样的查询。

通过这样的冗余设计,我们可以保证所有的消息记录查询都是无差别的,95% 的查询请求都可以在 30 毫秒之内完成。另外,基于 HBase 本身的设计,使我们无论在数据量还是请求量增加时,都可以比较轻松地扩展。

当然,这些特性带来好处同时也有一些 trade off。这样的存储结构无法像关系型数据库那样灵活地增加新的查询,可能对于一些应用来说显得比较笨重。不过我们的产品服务在平台层面,接口规则较为稳定,这使得 HBase 恰恰非常符合我们的场景。

如果对我们其他产品特性有想要了解的问题,欢迎大家在留言板中提问~

往期精选:


    关注 LeanCloud


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册