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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 技术选型项目组决定找一个开源中间件,它需要满足以下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的数据同步方案

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
3天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
3月前
|
消息中间件 RocketMQ 微服务
分布式事物【库存微服务业务层实现、实现充值微服务、充值微服务之业务层实现、账户微服务之业务层实现】(九)-全面详解(学习总结---从入门到深化)(下)
分布式事物【库存微服务业务层实现、实现充值微服务、充值微服务之业务层实现、账户微服务之业务层实现】(九)-全面详解(学习总结---从入门到深化)
37 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
140 0
|
24天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
38 0
|
24天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
73 0
|
1月前
|
消息中间件 缓存 数据库
构建高性能微服务架构:后端开发的进阶之路
【2月更文挑战第30天】 在当今互联网技术迅速发展的背景下,传统的单体应用已经难以满足日益增长的业务需求。微服务架构以其灵活性、可扩展性和容错性成为解决复杂系统问题的有效方案。本文将探讨如何构建一个高性能的微服务架构,包括关键技术选型、系统设计原则以及性能优化实践,旨在为后端开发人员提供一条提升系统处理能力和稳定性的进阶路径。
|
1月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
139 2
|
1月前
|
监控 安全 开发者
构建高效微服务架构:后端开发的进阶之路
【2月更文挑战第19天】随着现代应用程序的复杂性日益增加,传统的单体架构已无法满足快速迭代与高可扩展性的需求。微服务架构作为解决这一问题的关键方案,已成为后端开发领域的重要趋势。本文将深入探讨微服务架构的设计原则、关键技术组件以及实施过程中的挑战和解决方案,旨在为后端开发者提供构建和维护高效微服务系统的实用指南。
|
1月前
|
存储 负载均衡 Java
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️