暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL群组复制消息传递服务

一森咖记 2019-11-04
570

以下文章来源于公众号 MySQL解决方案工程师

作者: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。然后,下载代码来处理它。祝您玩得开心!

    欢迎关注MySQL!

    作者:AnibalPinto 译:徐轶韬


    欢迎关注个人微信公众号;

    长按以下二维码或公众号搜索“一森咖记”

    往期精彩文章

    =====================================

    1. MySQL:主从同步延迟Seconds_Behind_Master越来越大,什么鬼?

    2. 浅谈MySQL三种锁:全局锁、表锁和行锁

    3. LINUX环境:MySQL和Oracle开机自启动,咋搞?

    4. 生产环境:mysqlbackup逻辑备份的一种shell脚本实现

    5. 生产环境:mysqlbackup物理备份的一种shell脚本实现

    6. MySql 8.0.16 客户端连接失败

    7. Oracle如何访问MySql:透明网关

    8. 一款好的数据库监控工具:天兔数据库监控系统V3.8搭建

    9. MySQL主从架构搭建+GTID同步方式部署

    10. 用户:单台服务器部署多MySQL实例,咋弄?

    11. MySQL服务器一次异常掉电的恢复





    最后修改时间:2019-11-05 09:07:38
    文章转载自一森咖记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论