前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >群组复制消息传递服务

群组复制消息传递服务

作者头像
MySQLSE
发布2020-09-28 11:31:58
发布2020-09-28 11:31:58
9240
举报

作者:AnibalPinto 译:徐轶韬

MySQL团队除了使用新功能为MySQL复制进行强化,还对内部进行了改进。这需要大量工作来使代码库现代化,并使其更易于维护和扩展。

在MySQL 8.0.18中,我们使用群组复制消息传递服务扩展了内部服务集,因此形成了用于群组复制的通信框架。它允许群组复制插件以外的其它组件参与群组通信层。

那么它是如何设计的呢?

MySQL服务允许插件访问服务器的功能,这是群组复制消息传递服务的基础,请查阅https://dev.mysql.com/doc/refman/8.0/en/plugin-services.html以获取有关服务设计的更多详细信息。

群组复制消息传递服务由两个服务组成:

  • 使用群组复制通信机制发送消息
  • 接收并传递给订阅该消息类型的组件

消息类型由标记机制识别,一个不能包含mysql_前缀的字符串。

服务不知道要传输的负载的类型和内容,因此编码/解码负责其发送/接收。

如果没有注册任何接收者,服务不会报错,但是如果接收者返回错误,则该成员将离开该组,因为当一个成员无法处理消息时,群组复制不能保证一致性。

如果使用“群组复制”消息传递服务的模块需要与该组的所有成员进行通信,则需要确认所有成员都支持它。如果服务器具有早期的版本,它将丢弃未知消息,并且将无法使用发送服务。

举一个例子

我们打算在群组复制的所有成员之间创建一个IRC (Internet Relay Chat),做一些简单的事情,发送一条消息,联机成员就会收到它。

IRC模块将使用IRC作为标记来标识正在传输的消息。 订阅该服务将能够使用标签过滤消息。

要发送消息,必须获得发送服务并编写消息, 例如,发送带有标签“ IRC ”的 “ Hello World !!

使用伪代码,可以将其实现为:

群组里所有ONLINE成员,甚至是发送消息的成员,都将收到该消息。然后,群组复制将看到订阅的模块,并通知有新消息。

使用伪代码,我们需要定义一个函数,该函数将在收到消息时由服务调用:

要将带有“ IRC”标签的消息打印到错误日志,我们可以:

并在服务上注册函数:

服务收到后,将验证标签是否正确并使用它。

使用它

如果您对这个话题有兴趣,甚至打算开发自己的MySQL扩展,您可以在文档中找到详细信息https://dev.mysql.com/doc/dev/mysql-server/latest/group__group__components__services__inventory.html。然后,下载代码来处理它。祝您玩得开心!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 那么它是如何设计的呢?
  • 举一个例子
  • 使用它
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档