Sermant在异地多活场景下的实践
内容提要
Sermant社区推出了消息队列禁止消费插件和数据库禁写插件,用于解决异地多活场景下的故障切流和数据一致性问题。插件允许动态调整消费者对消息队列的消费行为,禁止对指定数据库的写入操作,保障系统的高可用和数据一致性。
延伸解读
异地多活架构的挑战与应对
异地多活通过在不同地域部署机房来抵御自然灾害,但每个机房的数据库均为主库,可能引发数据冲突。文章指出,需通过流量分片策略将同一用户请求固定路由到同一机房,以降低冲突风险。对于全局数据,只允许中心机房写入,其他机房仅可读,从而保证数据一致性。
消息队列禁止消费插件的故障切流机制
该插件支持Kafka和RocketMQ,可在故障时动态禁止特定消费者消费消息。例如,当可用区A故障时,通过配置中心下发配置,停止该区消费者对指定Topic的消费,触发重平衡,让可用区B的消费者接管消息处理,从而保障系统高可用。故障恢复后,可重新开启消费。
数据库禁写插件的数据一致性保护
数据库禁写插件支持MySQL、MongoDB、PostgreSQL和OpenGauss,可动态禁止对指定数据库的写入操作。在异地多活场景下,当路由异常导致写流量在非中心机房执行时,插件会抛出SQLException阻止写入,避免数据冲突。业务系统需处理该异常,如重试将流量路由至中心机房。
Q&A
Sermant的消息队列禁止消费插件有什么作用?
该插件允许动态调整消费者对消息队列的消费行为,确保在故障发生时,正常可用区的消费者处理业务,保障系统高可用。
异地多活架构如何提高系统的高可用性?
异地多活架构通过在不同地域部署机房,确保系统在自然灾害下仍能提供服务,从而提高高可用性。
数据库禁写插件如何保障数据一致性?
该插件允许动态禁止对指定数据库的写入操作,确保只有中心机房可以写入全局数据,从而防止数据冲突。
Sermant支持哪些消息中间件?
Sermant的消息队列禁止消费插件支持Kafka和RocketMQ两种消息中间件。
异地多活架构与同城双活架构有什么区别?
异地多活架构在不同地域部署机房,能抵御自然灾害,而同城双活架构则在同一城市内部署机房,无法抵御城市范围内的灾害。
如何使用数据库禁写插件?
在微服务运行时,通过配置中心下发禁写的数据库类型和名称,动态开启或关闭对指定数据库的禁止写入能力。