当前位置: 首页 > 网络应用技术

如何解决数据库读取分离同步延迟的问题?

时间:2023-03-07 21:05:06 网络应用技术

  数据库阅读分离是许多公司无法转移的发展阶段。从单个数据库到主要模型,再到读取和写作分离,该部门分为表格。每个阶段都可以解决一些问题,但也带来了新的挑战。在本文中,我们主要研究数据库阅读方式如何分离以及带来的问题。

  首先,简要介绍数据库体系结构的开发。基本上,它是单体,主要储备,读写分离和分区表。让我们在下面介绍它们。

  在业务发展的早期,数据库的压力相对较小。目前,使用单独的库。

  引用的问题:如果数据库失败,则无法使用我们的业务,只能说停止重新启动维修故障会重新启动。

  由于单体的问题,我们目前需要添加备用库。紧急情况可以在图书馆的顶部使用,这相当于添加替代品。

  通过MySQL自己的主要概念同步机制,我们可以将我们的替代品在线。

  当正式播放器(主库)失败时,我们可以手动让它离线并让替代玩家(准备)顶部。

  引用的问题:随着业务大规模爆发,主图书馆的压力太大,我们想让预备图书馆承担更大的责任。

  阅读和写作分离体系结构的本质也是主要体系结构,与主要体系结构没有根本不同。在主要体系结构的基础上,添加一层读写请求的处理,以便它可以向我们使用备用库向我们提供更大的范围。

  读取和写入分离体系结构需要在中间添加对读写请求的控制层

  分支表的本质是分数数据。由于数据级别的改善,它不会严重影响数据库读取和写入性能。

  即使您不切断,磁盘,内存和CPU也无法承受这种压力,并且数据库随时处于崩溃的边缘。

  子符号表和前三个之间存在一个本质区别。每个数据库都可以在子纤维之后的上述三种方法中采用。它也可以是读取和写作分离。

  拆分表和前三个的一个是共生关系。

  我不知道如何执行亚表面设计。我可以阅读我以前的文章“接受此武术作弊,让您的数据库不再遇到麻烦”

  主-Lave副本是MySQL数据库的函数,但是如果您想进行阅读和写作分离,我们需要做一些工作以与MySQL Master和Slab Synchronus一起使用。有许多可选的解决方案。

  增加应用程序和数据库之间的代理层,并且代理层在数据库中接收应用程序的应用程序。根据不同类型的请求类型,将其转发到不同的实例。进入每个节点)。

  代理是在中间件的帮助下控制不同类型的请求,以输入不同的数据库。

  当前使用的MySQL读取和写作分离中间部分是:

  在程序中的控制。我们使用较长的框架的拦截器来实现不同的数据源。

  它也可以使用sharding-jdbc实现

  实施思想:

  任何具有读取分离体系结构的人都会存在同步延迟的问题。我们只能找到克服这个问题的方法。

  复制模式的主要副本通常是不同步的,可以将数据写入仓库。当然,这种异步也可以设置为同步。只有当数据库完成时,主库上的写作请求才能返回。

  该方案是最佳订单,也是最有效的订单,但也是表现最差的计划。尤其是当有很多库时,它会严重影响请求效率。

  编写请求时,缓存记录了一个键。该密钥的故障时间是同步的主要延迟。阅读请求时,请转到缓存以确认是否有钥匙。这次,只需获取主库即可。如果没有这样的钥匙,只需直接转到库的查询即可。

  还应确定中间部分是否完成同步,类似于缓存记录。

  该方案的最大缺点是引入缓存,系统的复杂性也增加了。

  对于某些特殊的业务场景,使用了主库。

  缺点需要找出这种情况,并将其设置为强迫主库。

  MySQL执行交易后,将向客户端提供交易的GTID,然后客户端可以使用命令从库中执行阅读操作,等待GTID,等待成功,然后执行读取操作;等待超时,转到主库执行阅读操作,或从库中更改上述过程。

  Mariadb的MaxScale是使用此解决方案。MaxScale是Mariadb开发的数据库智能代理服务(也支持MySQL)。它允许根据数据库SQL语句将请求转移到多个服务器。

  有延迟的延迟。可以不带任何一致性数据的场景,而无需保留。