秃头也要学习的微服务进阶场景实战:基于Bifrost的数据同步方案

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 技术选型项目组决定找一个开源中间件,它需要满足以下5点要求。1)支持实时同步。2)支持增量同步。3)不用写业务逻辑。4)支持MySQL之间的同步。5)活跃度高。

基于Bifrost的数据同步方案

技术选型

项目组决定找一个开源中间件,它需要满足以下5点要求。

1)支持实时同步。

2)支持增量同步。

3)不用写业务逻辑。

4)支持MySQL之间的同步。

5)活跃度高。

根据这些要求,可以选用以下几个开源中间件:Canal、Debezium、DataX、Databus、Flinkx、Bifrost。

网络异常,图片无法展示
|

这些中间件的对比结果见表14-1。

从以上对比来看,比较贴近场景需求的是Bifrost。

其实Bifrost是一个相对比较年轻的中间件,而且它不支持集群。那为什么使用它呢?原因如下。

1)它的界面管理比较方便。

2)它的架构比较简单,出现问题后,可以自己调查问题,相对比较可控。之后即使作者不维护,团队也可以自己维护起来。

3)作者更新很活跃。

4)自带监控报警功能。

项目组最终决定使用Bifrost,此时整个方案的架构如图14-4所示。

网络异常,图片无法展示
|

• 图14-4 基于Bifrost的数据同步方案架构

Bifrost架构

在使用这个技术之前,还是要了解一下它的基本原理。Bifrost架构图如图14-5所示。

网络异常,图片无法展示
|

• 图14-5 Bifrost架构图

可以看出,Bifrost其实也是模拟成MySQL的从库,监听源数据库的Binlog,然后再同步到目标数据库。它支持多种目标数据库,本项目是从MySQL同步到MySQL。

注意事项

使用数据同步这个方案时,应该注意什么?

1.数据同步的延时

这个数据同步方案是有一定延时的,所以如果业务对同步功能有高时效的要求,那么尽量不要使用这个方案。

举个例子,这里虽然同步了商品的数据到订单数据库,但是订单服务当中,如果提交订单需要检查库存的话,不建议把库存数据同步到订单数据库里,而是让订单服务每次都去请求商品数据库的库存。

所以,其实同步过来的数据基本上只是用来展示、查询的,不涉及业务数据变更。

2.同步过来的数据是只读的

因为这里的数据同步是单向的,所以目标数据库中同步过来的数据是不能修改的。在这个方案里,肯定不会去修改订单数据库里面同步过来的商品数

据。也有一些其他场景,比如同步一些基础配置或者公用数据到各个数据库,而后在使用这些同步数据时,可能会发现一些遗漏,比如城市/区/县数据,这种情况下,也不能直接在业务数据库里修改,而是应该通知提供数据的系统去修改,之后再同步过来。

3.监控一定要到位

Bifrost不是高可用的,它本身也提供了一些告警的功能。除了依赖它本身的告警功能以外,还要额外监控Bifrost这个服务的状态,确保它出现异常时能及时发现。Bifrost本身也提供了API接口,用来让第三方的监控对接。

4.核心逻辑不建议依赖同步数据

因为同步过来的数据是有延时的,并且Bifrost本身没有设计高可用,所以并不推荐在核心逻辑上使用同步的数据。

小结

系统上线后,商品数据的同步比较稳定。之后,商品服务的开发人员只需要关注自己的逻辑,无须关注使用数据的人。如果需要关联使用商品数据的采购单,采购服务的开发人员也不需要关注商品数据的同步问题,只需要在查询时加上关联语句即可,算是一个双赢的结局。

唯一遗憾的是Bifrost不是集群,无法应对高可用场景。不过,到目前为止,这个系统还没有出现宕机的情况,反而是那些部署多台节点负载均衡的后台服务常常出现这种情况。

Bifrost 的 作 者 也 介 绍 了 他 为 什 么 没 有 设 计 集 群(
https://wiki.xbifrost.com/other/clusterwhynot/),部分引用如下。

在实际工作中,项目组很大一部分时间其实都是在处理线上高可用、分布式遇到的各种问题。

工作经验告诉我们,很多开源系统的高可用可能并不是我们想象中的那样高可用,尤其是那些对数据一致性有要求的场景,会存在很多问题。

在实际工作中,绝大多数一开始就使用各种分布式、高可用设计的项目,最后都失败了。

功能很多,又使用分布式和高可用,很难排查问题。

Bifrost是一个面向生产环境的产品,对生产环境抱有敬畏之心。

Bifrost并不想在一个项目刚开始的时候,就进行各种分布式、高可用等设计。

这些描述不一定准确,但是笔者的确碰到过两次“高可用最终并不是真正的高可用”的情况,所以那时候就想在系统当中引入一个非高可用的中间件进行尝试。当然,为了保证系统出错以后能够及时解决,也做了很多定制的监控。

事实证明,高可用不一定真的高可用,单机也未必不能高可用。当然,也不能以偏概全地说高可用设计没有必要,那就因噎废食了,这种状况毕竟只是特例。而且,项目组也随时准备着改造这个中间件,增加灾备能力。不管怎么样,项目组最终解决了服务之间数据依赖的问题。接下来,就要直接面对服务之间逻辑或流程上依赖的问题了。

本文给大家讲解的内容是微服务进阶场景实战:基于Bifrost的数据同步方案

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
存储 监控 供应链
微服务拆分的 “坑”:实战复盘与避坑指南
本文回顾了从2~3人初创团队到百人技术团队的成长历程,重点讨论了从传统JSP到前后端分离+SpringCloud微服务架构的演变。通过实际案例,总结了微服务拆分过程中常见的两个问题:服务拆分边界不清晰和拆分粒度过细,并提出了优化方案,将11个微服务优化为6个,提高了系统的可维护性和扩展性。
14 0
|
1月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
84 4
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
272 17
微服务框架Dubbo环境部署实战
|
3月前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
150 3
|
3月前
|
小程序 JavaScript
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
本文介绍了微信小程序中的数据绑定、事件绑定、事件传参与数据同步的基本概念和使用方法,包括如何在data对象中定义数据、使用mustache语法在wxml中渲染数据、绑定和处理事件、事件对象属性、事件传参以及实现输入框与data数据的同步。
微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录
|
3月前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
56 3
|
3月前
|
运维 监控 持续交付
深入浅出:微服务架构的设计与实战
微服务,一个在软件开发领域如雷贯耳的名词,它代表着一种现代软件架构的风格。本文将通过浅显易懂的语言,带领读者从零开始了解微服务的概念、设计原则及其在实际项目中的运用。我们将一起探讨如何将一个庞大的单体应用拆分为灵活、独立、可扩展的微服务,并分享一些实践中的经验和技巧。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
88 3
|
4月前
|
存储 关系型数据库 MySQL
【TiDB原理与实战详解】5、BR 物理备份恢复与Binlog 数据同步~学不会? 不存在的!
BR(Backup & Restore)是 TiDB 分布式备份恢复的命令行工具,适用于大数据量场景,支持常规备份恢复及大规模数据迁移。BR 通过向各 TiKV 节点下发命令执行备份或恢复操作,生成 SST 文件存储数据信息与 `backupmeta` 文件存储元信息。推荐部署配置包括在 PD 节点部署 BR 工具,使用万兆网卡等。本文介绍 BR 的工作原理、部署配置、使用限制及多种备份恢复方式,如全量备份、单库/单表备份、过滤备份及增量备份等。
|
4月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)