建立高可靠、高性能的同步中间件(MirrorMaker)设计文档

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介:

FMQ同步中间件(MirrorMaker)

简介

       FMQ的同步中间件英文名称为MirrorMaker,是在FMQ-Client的基础上引变而来的,用来作为跨机房的数据同步的工具。在网络异常等特殊情况下,也能在可靠性和性能上都能够满足公司线上需求而开发的一套同步中间件。

设计目标

          MirrorMaker设计思路比较好理解,利用消费者从源机房拉取消息,并利用生产者发送消息至目标机房。但往往网络环境、broker集群稳定性、topic队列都会不断变化,在这种特殊情况下,也要实现一个高可靠、高性能的消息同步中间件需要考虑的细节非常多。比如消息幂等性、自动监控并切换网络出口、监控异常报警等。FMQ-mirrormaker就是针对这种特殊场景进行了定制化开发,实现高可靠和高性能的消息同步中间件。

应用模型

 7.png?version=1&modificationDate=1512976

代码架构图

模块图

 8.png?version=1&modificationDate=1512976

配置管理:配置source和target的broker的url、同步线程数、报警配置以及队列大小等

报警管理:基于event发布中心订阅相关的事件,并接入报警平台进行报警

消息同步管理:包括消费者管理、队列管理、生产者管理、Offset管理

监控管理:实时从broker获取需要监控的数据,并暴露接口给fmq-monitor获取监控数据

包结构图

 9.png?version=1&modificationDate=1512976

mirrormaker-api:暴露api接口,供外部调用

mirrormaker-biz:具体的业务逻辑,包括监控、同步、报警、配置等信息

mirrormaker-bootstrap:启动类,包括(监控,配置、报警、消息同步)四大服务的启动

类图

10.png?version=1&modificationDate=151297

 

AbstractBootstrap: 作为最上层的抽象类,提供了doBootstrap()、doShutdown()供子类去实现,同时还持有事件发布接口、日志接口以及Config

Monitor:持有 SyncManager 实例,通过它来获取监控数据

Alarmer:通过订阅相关的事件提供报警服务

SyncManager:TargetDCProducer、SourceDCConsumer和TopicAndOffsetManager的大管家,用来协调消息同步。同时还会监听相应的事件,比如 网络不通、网络切换、新增同步topic、修改partition等等,对这些事件进行相应的处理来保证消息同步的正确性。

TopicAndOffsetManager:

1、获取需要同步的topic和分区,并定期更新topic和分区

2、获取并管理当前环境的source和target端的 分区对应的offset(source->brokerOffset、commitOffset,target->brokerOffset)

SouceDCConsumer:

订阅需要同步的topic,并将消息放入queue中。定期提交缓存中的offset。

TargetDCProducer:

每个partition会启动一个线程来读取queue中消息,并写入目标broker,写成功后,将该消息的offset提交至缓存中。

具体实现

1、同步过程中异常情况处理

mirrormaker基于candy2的事件中心对异常情况进行了处理,使其真正意义上保证了跨机器消息同步的可靠性和实时性。

主要事件如下:

add_topic:定期检测是否有新增topic并加入至同步列表中

remove_topic:释放占有的资源

modify_partion_num:定期检测,并将修改后的分区加入同步列表中

source_net_not_available: 定期检查网络情况,不通则抛出事件,由Alarmer报警

source_net_be_switched: 如果网络不通时间超过一定阀值,则会对source 网络进行切换(事先备好备用网络出口),切换成功后,再进行同步

target_net_not_available:目标端网络不通,抛出事件,由Alarmer报警 (备注:target的broker 一般和mirrormaker在同一机房,网络不通也不需要切换)

2、偏移量(offset)的管理

   由于同步过程中,任何情况都可能发生,所以对于offset的何时提交尤为重要。一般正常情况是消费一条消息就提交,这样会存在以下二个问题:

   (1)频繁提交,会无形中给服务器增加压力

   (2)作为同步中间件,应将整个同步的过程作为一个原子操作,也就是说消息要真正写入target端,才算同步成功,此时offset才会提交,否则不算同步成功

    基于以上二种情况,我们在消息同步成功后将offset存入缓存中,并由消费者定期提交缓存中的offset,这样既降低了因频繁提交offset给服务器增加的压力,也将同步过程作为一个原子操作。同时还提供了饿JVM的钩子,保证宕机情况下,缓存里的offset能正常提交。

MirrorMaker监控

11.png?version=1&modificationDate=151297

主要功能点:

1、获取各点mirrormaker的监控数据

      Source端的TPS、Target端的TPS

      partition的sourceoffset、cacheoffset、commitoffset、lag(同步滞后数)

2、手动操作mirrormaker,比如网络不通,可以手动切换网络等等

总结

实现一个简单的同步中间件还是比较容易,但要在特殊情况下实现一个高可靠、高性能的同步中间件还是相对复杂的多,本章中的大幅篇幅基本上都是围绕如何建立高可靠、高性能的同步中间件。同步同步中间件实现消息的正常传输。

目录
相关文章
|
2月前
|
消息中间件 存储 监控
|
存储 JSON 前端开发
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Token,并且通过Iris的中间件(Middleware)进行鉴权操作。
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
|
SQL 负载均衡 Kubernetes
高性能数据访问中间件 OBProxy(八):揭秘高性能转发原理
高性能是 OBProxy 的重要特性之一,为了实现 OBProxy 高性能特性,我们做了大量的工作。本篇文章我们将介绍 OBProxy 如何提升 OceanBase 数据库性能、OBproxy 单机性能优化工作以及 OBProxy 常见性能问题。对于 OBProxy 性能,我们分为两个部分:提升 OceanBase 数据库整体性能,如 OBProxy 的分区位置计算功能、LDC 路由功能、读写分离
240 8
高性能数据访问中间件 OBProxy(八):揭秘高性能转发原理
|
存储 编解码 人工智能
自媒体影视后期数字助理2--SDR与HDR中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为SDR与HDR中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。
405 2
自媒体影视后期数字助理2--SDR与HDR中间件设计
|
消息中间件 存储 缓存
【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析
【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析
188 2
【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析
|
存储 人工智能 算法
自媒体影视后期数字助理3--绿幕分割中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为SDR与HDR中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。
528 4
自媒体影视后期数字助理3--绿幕分割中间件设计
|
存储 编解码 人工智能
自媒体影视后期数字助理--视频调色中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为调色中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云人工智能视觉生产的API细节进行了分析。
382 1
自媒体影视后期数字助理--视频调色中间件设计
|
监控 安全 Cloud Native
高性能数据访问中间件 OBProxy(七):安全、协议和监控
经过本系列前六篇文章的分布式特性介绍,相信大家已经了解了 OBProxy 在 OceanBase 数据库整体架构下的作用。本篇文章我们将换一个视角,介绍一些偏“中间件”的功能:安全、协议和监控功能。从 OBProxy 整体来看,安全、协议和监控属于产品层,因此更加贴近用户和开发者,大家了解起来比较容易,我们用一篇文章来统一介绍。1. 安全功能OBProxy 的安全功能和 OBProxy 的使用场景
224 3
高性能数据访问中间件 OBProxy(七):安全、协议和监控
|
SQL 负载均衡 网络协议
高性能数据访问中间件 OBProxy(四):一文讲透连接管理
引言上篇内容我讲到 OBProxy 的问题排查,将你在使用 OBProxy 时可能遇到的问题一一分析,并给出经过实践验证的解决方案。从本篇开始,我将介绍 OBProxy 在OceanBase分布式架构中的作用和原理,帮助你更透彻地了解OBProxy,实现“好用”和“用好”。同时,OBProxy 在上百家企业的持续运行,我积累了大量的工程实践经验,也将遇到的问题作为案例,伴随 OBProxy 的原理
546 8
高性能数据访问中间件 OBProxy(四):一文讲透连接管理
|
缓存 负载均衡 容灾
高性能数据访问中间件OBProxy(六):OBProxy高可用的那些事
在《高性能数据访问中间件 OBProxy(五):一文讲透数据路由》中,我们讲到了数据路由影响因素包括功能因素、性能因素和高可用因素。本文主要介绍高可用因素相关的内容。相比传统的 IOE 架构,OceanBase 利用更低的成本实现了更高的可用性,为客户提供机器级别容灾、机房级别容灾和城市级别容灾特性,是 OceanBase 数据库的杀手锏之一,深受用户喜欢,因此,本文将对高可用特性展开详细的介绍。
318 6
高性能数据访问中间件OBProxy(六):OBProxy高可用的那些事