当前位置: 首页 > wzjs >正文

使馆网站建设山东省建筑工程信息网

使馆网站建设,山东省建筑工程信息网,wordpress ui 插件,重庆整站优化的电话销售伪从技术 vs 直接同步/MQ方案的深度对比 直接同步修改或通过MQ消息队列也能实现类似同步功能,但伪从技术(通过消费binlog实现数据同步)在某些场景下具有独特优势。下面我将从多个维度进行详细对比分析: 一、核心差异对比表 方案…

伪从技术 vs 直接同步/MQ方案的深度对比

直接同步修改或通过MQ消息队列也能实现类似同步功能,但伪从技术(通过消费binlog实现数据同步)在某些场景下具有独特优势。下面我将从多个维度进行详细对比分析:

一、核心差异对比表

方案伪从(Binlog消费)直接同步修改MQ消息队列
耦合度完全解耦强耦合部分解耦
数据一致性最终一致性(毫秒级)强一致性最终一致性(依赖MQ延迟)
对主业务影响零影响增加业务方法复杂度轻微影响
历史追溯能力完整记录所有变更仅当前状态取决于MQ消息保留策略
多消费者支持天然支持(多个服务消费同个binlog)需单独实现需配置多个消费者
异构系统支持支持(任何能解析MySQL协议的服务)仅限同构系统需适配MQ协议
网络隔离场景支持跨网络分区同步必须实时连通依赖MQ可用性

二、为什么选择伪从技术的典型场景

场景1:核心业务表变更监听

案例:用户关注关系(Following表)变更时更新缓存和推荐系统

// 伪从方案实现示例(使用Canal客户端)
@CanalEventListener
public class FollowingEventListener {@ListenPoint(table = "user_following")public void onFollowingChange(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {// 解析binlogString followerId = parseColumn(rowData, "follower_id");String followeeId = parseColumn(rowData, "followee_id");if(eventType == CanalEntry.EventType.INSERT) {// 更新缓存redisTemplate.opsForSet().add("user:followers:" + followeeId, followerId);// 异步更新推荐系统kafkaTemplate.send("user-relation-update", new FollowEvent(followerId, followeeId, "follow"));}// 处理取消关注事件...}
}

优势

  • 业务代码无需嵌入关注逻辑
  • 即使缓存服务重启,也能重新消费binlog恢复状态
  • 推荐系统可以独立消费Kafka消息,不影响主流程

场景2:跨微服务数据同步

架构

MySQL主库 → Canal Server → Kafka → 多个微服务消费者

优势体现

  1. 订单服务修改状态 → 通过binlog通知物流服务
  2. 用户服务更新资料 → 通过binlog同步到搜索索引
  3. 所有服务都能获取完整变更历史(before/after值)

三、直接同步修改的问题

典型问题代码示例

// 直接同步方案的问题案例
@Service
public class FollowService {@Transactionalpublic void follow(Long followerId, Long followeeId) {// 1. 写数据库followingDao.insert(new Following(followerId, followeeId));// 2. 更新缓存redisTemplate.opsForSet().add("user:followers:" + followeeId, followerId.toString());// 3. 通知推荐系统kafkaTemplate.send("follow-event", new FollowEvent(followerId, followeeId));// 4. 更新统计信息statisticsService.incrementFollowCount(followeeId);}
}

致命缺陷

  1. 事务成功但缓存更新失败会导致数据不一致
  2. 新增一个消费者需要修改核心业务代码
  3. 方法变得臃肿难以维护(违反单一职责原则)
  4. 系统间形成网状耦合

四、MQ方案的局限性

典型问题场景

// 订单服务中
public void cancelOrder(Long orderId) {// 1. 数据库更新orderDao.updateStatus(orderId, OrderStatus.CANCELLED);// 2. 发送MQ消息mqTemplate.send("order-cancelled", orderId);// 如果这里系统崩溃...
}

MQ方案的不足

  1. 消息丢失风险:DB提交成功但MQ发送失败
  2. 顺序问题:先"取消订单"消息可能比"创建订单"先到达
  3. 状态不完整:消息通常只包含ID,需消费者额外查询
  4. 回溯困难:无法像binlog那样获取变更前后的完整数据

五、伪从技术的实现保障

确保可靠性的关键措施

  1. 位点持久化:定期保存binlog position
// Canal客户端示例
environment.getEventStore().addAckCallback((batchId, executed) -> {if(executed) {positionManager.persistLogPosition(batchId.getJournalName(),batchId.getPosition());}
});
  1. 幂等处理:应对重复消费
@CanalEventListener
public class OrderEventListener {@ListenPoint(table = "orders")public void onOrderUpdate(CanalEntry.RowData rowData) {String orderId = parseColumn(rowData, "id");// 通过Redis原子操作实现幂等if(redisTemplate.opsForValue().setIfAbsent("order:update:" + orderId, "1", 5, TimeUnit.MINUTES)) {// 处理业务逻辑}}
}
  1. 死信队列:处理异常消息
// Spring Cloud Stream配置
spring.cloud.stream.bindings.processOrderUpdate-in-0.consumer:max-attempts: 3back-off-initial-interval: 1000default-bindable: truedestination: order-binloggroup: order-processordead-letter-queue-topic: order-dlq

六、技术选型决策指南

选择伪从技术当且仅当:

  1. 需要监听核心业务表的所有变更(增删改)
  2. 有多个异构系统需要消费相同数据变更
  3. 要求变更事件100%不丢失
  4. 需要获取变更前后的完整数据
  5. 希望与业务代码完全解耦

选择直接同步当:

  1. 强一致性要求
  2. 变更逻辑简单且消费者固定
  3. 性能要求极高(纳秒级延迟)

选择MQ方案当:

  1. 只需要关键业务事件通知(不需要所有变更)
  2. 消费者都是同构系统(使用相同MQ协议)
  3. 接受极少量消息丢失的可能

七、混合架构实践建议

推荐生产级架构

业务修改 → MySQL → 
├─ Canal → Kafka → [消费者1: 缓存更新]
│                ├─ [消费者2: 推荐系统]
│                └─ [消费者3: 数据分析]
└─ 同步返回 → 业务响应

Java实现示例

// 业务层(完全不需要感知消费者)
@Transactional
public FollowResult followUser(Long followerId, Long followeeId) {followingDao.insert(new Following(followerId, followeeId));return FollowResult.success(); // 立即返回
}// 通过binlog异步处理(Canal+Kafka)
@KafkaListener(topics = "binlog.user_following")
public void handleFollowingChange(ChangeEvent event) {if(event.getType() == INSERT) {// 更新缓存cacheUpdate(event);// 更新推荐recommendUpdate(event);// 记录审计日志auditLog(event);}
}

这种架构既保持了业务代码的简洁性,又通过伪从技术实现了可靠的系统间协作,是大型互联网应用的常见实践。

http://www.dtcms.com/wzjs/563761.html

相关文章:

  • 财务公司网站源码用cn作网站行么
  • 做网站 用 显示器wordpress 欢迎插件
  • 河南建达工程建设监理公司网站wordpress获得留言
  • 餐饮网站建设研究问题网页版微信读书算时长吗
  • 大朗镇网站仿做注册安全工程师报考条件及科目
  • 2016wap网站开发语言wordpress 小众软件 主题
  • 如何设计一个完整的网站网络建设包括哪些内容
  • 山东响应式网站建设wordpress 模版定制
  • 深圳做网站设计教做发型的网站
  • 杭州外贸网站建设公司排名沈阳旅游团购网站建设
  • 网站备案加链接代码开源 wordpress 主题
  • 上海高端网站定成都新空间装饰公司
  • 东山县建设官方网站seo下载站
  • 网站开发职位介绍京东网站设计分析
  • 网站设计的公司潍坊建公司网站
  • 孝感房产网站建设哪里可以检测药物成分
  • 爱是做的电影网站网站访问量查询
  • HTML网站制作设计上海网站络公司
  • 做网站投注员挣钱吗注册新公司需要准备的材料
  • 广州微网站制作软件开发培训方案
  • 火车头采集Wordpress字段宁波做网站优化
  • 建站系统社区网站营销平台代理商
  • 网站备案帐号是什么情况宛城区网站推广
  • 除了淘宝还有哪些购物网站北京建设部官方网站证书查询
  • 电子商务网站技术方案网站搭建报价
  • 网站的关于我们页面响应式网站和营销型网站
  • 嘉兴网站定制公司wordpress标签搜索引擎
  • 北京网站建设类岗位上海企业建站费用
  • 站长工具端口扫描创网易账号
  • 校园类网站建设广州车陂网站建设公司