5.x 时代:使用 Mria 构建大规模集群Mria 是 Mnesia 的一个开源扩展,为集群增加了最终的一致性。前文所述的大多数特性仍然适用于它,区别在于数据如何在节点间进行复制。 emqx_mria_weight: 一个用于负载平衡的值。它的变化取决于核心节点的瞬间负载。emqx_mria_replicants:连接到核心节点的复制器的数量,为给定的分片复制数据。 Replicant 节点emqx_mria_lag:复制体滞后,表示复制体滞后上游核心节点的程度。越少越好。emqx_mria_bootstrap_time:复制体启动过程中花费的时间。 emqx_mria_message_queue_len:复制进程的消息队列长度。应该一直保持在0左右。emqx_mria_replayq_len: 复制体的内部重放队列的长度。越少越好。控制台命令. /bin/emqx eval mria_rlog:status(). 可以获取关于 Mria 数据库运行状态的更多信息。
Mnesia 网状拓扑架构 3 Mria:从全网状到单复制 为了解决Mnesia全网状复制带来的问题,EMQX 5.x版本中引入了新的数据层解决方案实现——Mria。 Mria对Mnesia进行了封装,其核心诉求是在实现数据的本地读写的基础上,尽可能地减少集群节点复制的开销。 Mria 单复制拓扑架构 但是Mria这种架构实现也不是银弹,虽然它可以解决全网状复制带来的数据同步问题,但是依然无法很好地处理所有节点都要承载集群全量数据的问题。 为了增加集群的扩展能力,我们在2.0版本中引入了Mria开源实现的新特性,用于解决集群节点复制的开销问题。 Mria实现的一个问题就在于,集群中很多节点复制了本身就不需要的路由数据。
Mria 集群架构 支持全新的 Mria 集群架构,在此架构下 EMQX 水平扩展性得到指数级提升,单个集群可以轻松支持 1 亿 MQTT 连接,这使得 EMQX 5.0 成为目前全球最具扩展性的 MQTT 在构建满足用户业务需求的更大规模集群的同时,Mria 架构还能够降低大规模部署下的脑裂风险以及脑裂后的影响,以提供更加稳定可靠的物联网数据接入服务。
Environment.UserName + " compiled at " + DateTime.Now.ToString()); ManagedResourceIntroductionAspect mria2 ManagedResourceIntroductionAspect("BuildUser", userNameData); yield return new AspectInstance(assembly, mria2
作为积极拥抱云原生的大规模分布式开源物联网 MQTT 消息服务器,EMQX 最新发布的 5.0 版本采用了新的后端存储架构 Mria 数据库,并重构了数据复制逻辑,增加了 Replicant 节点角色, 详情请查看:《Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接》用户可以通过 EMQ 发布的管理工具 EMQX Kubernetes Operator,利用 EMQX
通过采用基于 Mria+RLOG 的分布式架构,最新版本 EMQX 5.0 单个集群可支持至多 23 个节点,能够承载高达 1 亿的 MQTT 并发连接。
目前已发布了《Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接》与《MQTT over QUIC:下一代物联网标准协议为消息传输场景注入新动力》,之后我们还将分享
全新发布的 EMQX 5.0 将有以下重大的升级迭代:可扩展性及可靠性显著提升,首个实现单集群 1 亿 MQTT 连接通过采用 Erlang 的 Mnesia 数据库的新 Mria 扩展,以及即将在后续
本系列中的其它文章EMQX 5.0 产品解读 01 | Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接
本系列中的其它文章EMQX 5.0 产品解读 01 | Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接EMQX 5.0 产品解读 02 | MQTT over QUIC
在 5.0 版本中,EMQ X 研发团队设计并实现了异步 Mnesia 数据库复制项目 Mria,该扩展项目在提供集群最终一致性保障的同时,极大提升大规模集群的写入性能,并且大幅度增强集群的自动伸缩性能