分布式数据库的性能和安全麻烦

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【6月更文挑战第6天】该文探讨了分布式系统中节点交互的两种方式,并对比mysql和oracle两个数据库的CAP平衡模式。

1 简介

要做出的另一个设计决策涉及决定节点在其群集中的交互方式。两个选项是同构和异构节点,都用于现代系统。
mandala曼德罗符号.png

同构节点:集群中的每个节点都可以执行同一组任务(尽管可能不同的数据分区),很好地适合共享的无体系结构。

这使得预配和故障转移“更容易”。失败的任务将分配给可用节点。

异构节点:节点被分配了特定的任务,因此必须在节点之间进行通信执行给定的任务。

可以允许单个物理节点托管多个“虚拟”节点类型,用于专用任务。

可以独立地从一个节点扩展到另一个节点分布式系统必须跨多个资源(包括磁盘、节点、处理器)对数据库进行分区。

这个过程有时在NoSQL系统中称为分片。

2 MYSQL处理平衡

当 数据库管理系统 收到查询时,它首先分析查询计划需要访问的数据。

数据库管理系统 可能会发送对不同节点的查询计划,然后合并结果以生成单个答案。

分区方案的目标是最大化单节点事务或仅访问的事务一个分区中包含的数据。

这允许数据库管理系统不需要协调并发的行为在其他节点上运行的事务。

另一方面,分布式事务访问数据一次或更多分区。这需要昂贵、困难的协调,将在下一节中讨论。

对于逻辑分区节点,特定节点负责从共享访问特定元组磁盘。对于物理分区节点,每个无共享节点读取并更新其包含在其上拥有本地磁盘。

  • 实现

对表进行分区的最简单方法是朴素的数据分区。

每个节点存储一个表,假设足够给定节点的存储空间。这是每个要实现的查询只是路由到特定分区。
这可能很糟糕,因为它不可扩展。如果一个分区的资源是经常查询,未使用所有可用节点。

更常用的是水平分区,它将表的元组拆分为不相交的子集。

选择在大小、负载或使用情况方面平均划分数据库的列,称为分区键。

数据库管理系统 可以通过哈希分区对数据库物理(不共享)或逻辑(共享磁盘)进行分区或范围分区。

分布式数据库本质上就是将数据存储到不同位置,数据分布的本质是,将原数据集划分为多个数据子集,以存储到不同的地方,在一定程度上体现了数据的可用性和可靠性。

分布式存储系统的三个要素:顾客、导购和货架。

其中,导购实现了分布式数据存储系统中数据索引的功能,包括存储数据时确定存储位置,以及获取数据时确定数据所在位置。那么,在分布式系统中,具体是如何实现数据索引或数据分布的呢

  • 数据分布方法,哈希,一致性哈希。

在实际情况下,仅考虑数据分片,其实是无法真正应用到生产环境的。

因为,故障导致数据丢失和不可用是很常见的情况。

因此,在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,而实现数据备份的关键技术就是“数据复制技术”。

数据复制技术实际就是指,如何让主备数据库保持数据一致的技术。

多数的分布式存储系统可以通过配置来选择不同的数据复制技术。
比如上面讲过的 MySQL 数据库集群,就支持全同步复制、异步复制和半同步复制三种模式,

3 Oracle 数据库处理平衡:

  • 最大保护模式

对于写请求,要求主数据库必须完成至少一个备数据库的数据同步才可成功返回给客户端,采用的是半同步复制技术中的第一种方式。

  • 最大性能模式

对于写请求,只要主数据库执行成功即可返回给客户端,采用的是异步复制技术。这种方式极大地提高了系统的可用性,但一致性难以保证。

  • 最大可用性模式

    介于最大保护模式和最大性能模式两者之间。

    这种模式是指,系统在通常情况下采用最大保护模式,但当主备之间出现网络故障时,切换为最大性能模式,等到网络恢复后,备数据库再进行数据同步。

    这种方式在系统的一致性和可用性之间做了一个权衡。

4 CAP理论:不可同时满足

分布式系统处理的关键对象是数据,而数据其实是与用户息息相关的。

CAP 理论指导分布式系统的设计,以保证系统的可用性、数据一致性等特征。

比如电商系统中,保证用户可查询商品数据、保证不同地区访问不同服务器查询的数据是一致的等。

何为 CAP?

如果你之前没有听说过 CAP 理论的话,看到这三个字母第一反应或许是“帽子”吧。

那么,在分布式领域中,CAP 这顶“帽子”到底是什么呢?先来看看这三个字母分别指的是什么吧。

结合电商的例子,一起理解 CAP 的含义。

假设某电商,在三个城市建立了仓库,同时建立了对应的服务器{A, B, C}用于存储商品信息。

比如,某电吹风在北京仓库有 20 个,在杭州仓库有 10 个,在上海仓库有 30 个。那么,CAP 这三个字母在这个例子中分别代表什么呢?

首先,来看一下 C。C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。

在电商系统中,A、B、C 中存储的该电吹风的数量应该是 20+10+30=60。
假设,现在有一个北京用户买走一个电吹风,服务器 A 会更新数据为 60-1=59,与此同时要求 B 和 C 也更新为 59,以保证在同一时刻,无论访问 A、B、C 中的哪个服务器,得到的数据均是 59。

然后,看一下 A。A 代表 Availability,可用性,是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。

在电商系统中,用户在任一时刻向 A、B、C 中的任一服务器发出请求时,均可得到即时响应,比如查询商品信息等。

最后,看一下 P。P 代表 Partition Tolerance,分区容错性,是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。
网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络内网络正常。

在电商系统中,假设 C 与 A 和 B 的网络都不通了,A 和 B 是相通的。
也就是说,形成了两个分区{A, B}和{C},在这种情况下,系统仍能响应用户请求。

5 小结

一致性、可用性和分区容错性,就是分布式系统的三个特征。那么 CAP 理论又是什么呢?

CAP理论就是,分布式系统中C,A,P三个特征无法同时满足,最多两个满足。

一致性,可用性,分区容错性,三个特征在分布式存储中一样有该属性。

目录
相关文章
|
12天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
11 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
4天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
31 15
|
9天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
43 1
|
9天前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
22 1
|
9天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
29 1
|
11天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
14 1
|
10天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
50 0
|
11天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
41 0
|
3天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
16 4
|
1天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
6 1
下一篇
无影云桌面