分布式系统中的数据复制

这篇具有很好参考价值的文章主要介绍了分布式系统中的数据复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文翻译自国外论坛 medium,原文地址:https://medium.com/@interviewready/data-replication-in-distributed-system-87f7d265ff28

什么是数据复制?

数据复制是指将数据复制到一个或多个数据容器以确保可用性的过程。复制的数据通常存储在不同的数据库实例中,即使一个实例发生故障,我们也可以从其他实例获取数据。

一种流行数据复制的实现架构是主从架构。

推荐博主开源的 H5 商城项目waynboot-mall,这是一套全部开源的微商城项目,包含三个项目:运营后台、H5 商城前台和服务端接口。实现了商城所需的首页展示、商品分类、商品详情、商品 sku、分词搜索、购物车、结算下单、支付宝/微信支付、收单评论以及完善的后台管理等一系列功能。 技术上基于最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中间件。分模块设计、简洁易维护,欢迎大家点个 star、关注博主。

github 地址:https://github.com/wayn111/waynboot-mall

主从架构

为了理解这个架构,我们举一个例子。

  • 我们有四个客户端,每个客户端都连接到一个负载均衡器。
  • 然后负载均衡器将请求分发到三个应用程序服务器。
  • 每台服务器连接到一个数据库实例。

你能注意到这里有什么问题吗?

我们的数据库存在单点故障。如果它崩溃了,我们的整个系统就会停止工作。

为了避免这种单点故障,我们可以使用另一个数据库(最好是不同的数据库实例)来存储原始数据的副本(一般我们成为从库)。现在如果原始数据库(主库)崩溃,我们可以将请求转到从库。

但是我们如何保持从库与主库同步呢?这有两种方法。

同步复制数据

  • 在这种方法中,数据同时写入主库和从库
  • 数据始终一致。即数据如果写入主库,它也会写入从库
  • 数据库负载较高

异步复制数据

  • 在这种方法中,首先将数据写入主库,并定期将更新写入从库
  • 由于复制以固定间隔进行,因此存在数据丢失和不一致的可能性
  • 数据库负载相对较低

这里我们的一般定义是收到写请求的主库数据库是 master)。从库被称为 slaves。

分布式系统中的数据复制

如上图我们的主站也就是 Server2 维护事务日志。他会更新从站中(Server1)的数据,它发送命令,然后从站以相同的顺序执行这些命令。

如果服务器向从站发送写入请求会发生什么?

有两种方法可以处理这种情况

  • 不允许对从站的写请求,从站无法写入数据库,它只能去读从库数据。
  • 允许从站写入数据。我们将允许从站写入数据。然后从站将更改复制到主站。在这种情况下,从站就接替了主站的角色。所以不再是主从架构而是主主架构

主主架构的问题

网络故障可能会导致主主架构中的数据不一致。

让我们用一个例子来理解这一点,假设我们有两个数据库实例 A 和 B。

  • 两人都是 master。
  • 它们之间的路由器出现故障。所以 A 认为 B 离线,B 认为 A 离线。
  • 他们有一个数据项 X,其值最初为 100。

现在用户发送以下请求,

  • X 减去 20,该请求被路由到 A,此时 A 中 X 的值为 80。
  • X 减去 80,这个请求被路由到 B(因为都是 master,所以写请求可以路由到任何数据库)。现在 B 中 X 的值为 20。

    由于存在通信故障,A 和 B 无法同步,它们具有不同的数据值,因此不一致。

  • 现在,如果用户发出读请求,他/她将获得不同的值,具体取决于他/她将连接到的数据库。

这个问题被称为裂脑问题。

解决裂脑问题

分布式系统中的数据复制

我们可以通过添加第三个节点(数据库实例)来解决裂脑问题。

这里我们假设一个节点崩溃以及其他两个节点之间的路由器崩溃的可能性极小。

让我们考虑三个数据库实例 A、B 和 C。

  • 如果 C 崩溃,A 和 B 是主库并且它们是同步的。所以他们处于一致的状态。当 C 在线时,他们可以读取 A 或 B 的内容。
  • 如果 A 和 B 之间出现通信故障
  • 当 A 收到写入请求时,它将其状态传播到 C。最初状态为 S0,然后转移到 Sx。所以现在 A 和 C 都有 Sx。
  • 当 B 收到写入请求时,它将其状态从 S0 移至 Sy。它尝试将其状态传播到 C,但失败,因为 B 的先前状态不等于 C。现在 B 中止写入请求并将其状态更新为 Sx。现在 B 可以接受写入请求并将更改传播到 C。

这称为分布式共识。多个节点就特定值达成一致。在这种情况下,A、B 和 C 在最终状态上达成一致。

最后

感谢您的阅读,希望本文能对你理解分布式架构中的数据复制有所帮助。

关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!文章来源地址https://www.toymoban.com/news/detail-594348.html

到了这里,关于分布式系统中的数据复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据中的分布式文件系统MapReduce的选择题

    一. 单选题(共9题,49.5分) (单选题)下列传统并行计算框架,说法错误的是哪一项? A. 刀片服务器、高速网、SAN,价格贵,扩展性差上 B. 共享式(共享内存/共享存储),容错性好 C. 编程难度高 D. 实时、细粒度计算、计算密集型 正确答案: B:共享式(共享内存/共享存储),容错性好; 5.5分

    2024年02月04日
    浏览(31)
  • 分布式系统中的分布式链路追踪与分布式调用链路

    本文分享自天翼云开发者社区《分布式系统中的分布式链路追踪与分布式调用链路》,作者:c****w 在分布式系统中,由于服务间的调用关系复杂,需要实现分布式链路追踪来跟踪请求在各个服务中的调用路径和时间消耗。这对问题排查和性能监控都很重要。 常用的分布式链

    2024年01月19日
    浏览(46)
  • 【工业物联网】现代企业环境中的DCS(分布式控制系统)和SCADA(站点控制和数据采集)...

    快答案: SCADA和DCS作为单独的系统开始,但一起成长。今天的带宽如此广泛,不需要在每个节点进行本地化。 SCADA和DCS :如果您参与管理企业级网络,您可能已经听说过这些术语。本文将阐明两种技术之间的区别。请注意,我们不会定义每个提到的概念;假设您已经有使用S

    2024年01月22日
    浏览(37)
  • 分布式系统中的区块链应用

    作者:禅与计算机程序设计艺术 分布式系统正在成为越来越多的企业级应用的架构模式。越来越多的应用从单机数据库扩展到分布式系统,通过无缝集成服务框架,实现了数据可靠性、服务高可用、容错等目标。但是传统的分布式系统没有引入更加先进的技术,如区块链技术

    2024年02月12日
    浏览(41)
  • 分布式系统架构中的相关概念

    1.1、衡量网站的性能指标 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。 并发数:指系统同时能处理的请求数量。 并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器连接的总TCP数量 请求数:也称为QPS(Query Per Second) 指

    2024年04月26日
    浏览(37)
  • 分布式服务框架_Zookeeper--管理分布式环境中的数据

    安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网   http://hadoop.apache.org/zookeeper/ 来获取, Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。 单机模式

    2024年02月12日
    浏览(35)
  • Kafka 在分布式系统中的 7 大应用场景

    Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性。Kafka 的核心组件包括生产者(Producer),消费者(Consumer),主题(Topic),分区(Partition),副本(Replica),日志(Log),偏移量(Offset)和代理(Broker)。

    2024年02月08日
    浏览(29)
  • 分布式服务高可用实现:复制

    我们可以考虑如下问题: 当数据量、读取或写入负载已经超过了当前服务器的处理能力,如何实现负载均衡? 希望在单台服务器出现故障时仍能继续工作,这该如何实现? 当服务的用户遍布全球,并希望他们访问服务时不会有较大的延迟,怎么才能统一用户的交互体验?

    2024年02月14日
    浏览(31)
  • Redis与分布式-主从复制

    接上文 常用中间件-OAuth2 启动两个redis服务器。 修改第一个服务器地址 修改第二个redis 然后分别启动 ) 查看当前服务器的主从状态,打开客户端:输入 info replication 命令来查看当前的主从状态,可以看到默认的角色:master,从节点数量为0。 也就是说所有的服务器启动之后都

    2024年02月07日
    浏览(27)
  • HBase伪分布式集群的复制

    0. prerequisite Suppose 2 hbase pseudo distributed clusters have both started as folowing relevant parameters in hbase-site.xml source destnation hbase.zookeeper.quorum    ubuntu centos2 hbase.zookeeper.property.clientPort 2181 2181 zookeeper.znode.parent /hbase /hbase 1. Create table for replication 1) start hbase shell on source cluster and create a tab

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包