[mysql分布式存储解决方案]

电脑杂谈  发布时间:2020-04-26 02:21:08  来源:网络整理

超融合的分布式存储架构部署_分布式存储 技术_分布式存储测试方案

1)分布式水平分段中使用的主要关键技术: 子库,子表,M-S,集群,负载平衡

2)需求分析: 每天有数十亿PV的大型Internet应用程序在DB上造成很高的负载,这对系统的稳定性提出了巨大挑战.

3)现有解决方案: 通过数据细分提高网站性能,并水平扩展数据层

水平分割有效地减少了单台计算机的负载并减少了停机的可能性.

集群解决方案: 解决由于停机而导致的单点不可访问性的问题.

读写分离策略: 极大地提高了应用程序中读取数据的速度和并发性.

典型示例: 淘宝,阿里巴巴,腾讯,其中大多数已实现了自己的分布式数据访问层(DDAL). 淘宝基于ibatis和Spring的分布式数据访问层已经使用了很多年,其运行效率和生产效率得到了开发人员和用户的肯定.

水平分割要考虑的后续问题: 库拆分后选择和制定路由规则,然后进行扩展. 例如,如何以最少的数据迁移实现最大的容量扩展. 重要的是要考虑路由表和负载平衡的规则.

4)DB分段本质上是数据分段. 以下是来自“什么,为什么,如何”的三个方面.

超融合的分布式存储架构部署_分布式存储 技术_分布式存储测试方案

什么?什么是数据分段?

.

将使用哪些特定的拆分和路由方法?举一个简单的例子: 让我们说明Blog应用程序中的日志. 例如,日志文章(文章)表具有以下字段:

article_id(int),标题(varchar(128)),内容(varchar(1024)),user_id(int)

面对这样一个表,我们如何拆分它?如何将此类数据分发到不同中的表?实际上,在分析博客的应用程序时,得出这样的结论并不困难: 在博客的应用程序中,用户分为两种类型: 浏览器和博客所有者. 浏览特定博客的浏览器实际上是在特定用户的博客下浏览,并且该博客的所有者管理他自己的博客,并且还在该特定用户的博客下(在他自己的空间中)运行. 所谓的特定用户由的字段表示为“ user_id”. 正是这个“ user_id”,这是我们需要的库的基础和规则. 为此,可以将user_id 1〜10000的所有商品信息放入DB1的商品表中,将user_id 10001〜20000的所有商品信息放入DB2的商品表中,依此类推,直到DBn. 这样,商品数据自然地分为各种以达到数据分割的目的. 下一个要解决的问题是如何找到特定的?实际上,问题也很简单明显. 由于我们使用字段user_id来区分,因此路由过程中仍然具有user_id是很自然的. 考虑一下我们刚刚介绍的博客应用程序,无论是访问其他人的博客还是管理我自己的博客,总之,我必须知道该博客的用户是谁,也就是说,我们知道该博客的user_id,使用此user_id,使用子库时的规则,依次找到特定的,例如user_id为234,人才的使用规则应位于DB1,如果user_id为12343,则使用规则人才应该位于DB2. 以此类推,使用子库规则反向路由到特定的,此过程称为“路由”.

当然,考虑数据分段的DB设计必须是非常规和非常规的DB设计. 那么正统的DB设计是哪种DB设计?

我们通常使用通常的规则. 通常,我们将根据范例自觉地设计. 当负载很高时,我们可以考虑使用相关的复制机制来提高吞吐量和读写性能. 这可能已经满足了许多需求,但是此机制的缺点仍然很明显. 的. 上面提到的“根据范例有意识地设计”. 考虑到DB设计的数据分段,将违反该通用规则和约束. 为了进行细分,我们必须在表中有多余的字段,这些字段用于区分称为子库的字段或带标签的字段,例如上面的文章示例中的user_id字段(当然,前面的示例没有很好地反映了user_id的冗余性,因为即使未将user_id字段划分为多个库,它也应该出现,如果我们选择它,它会很便宜. 当然,冗余字段的出现不仅在子的场景中,在许多大型应用中,冗余也是必要的,这涉及到高效DB的设计.

为什么?为什么要分割数据?

1)像Oracle这样的成熟且稳定的可以支持海量数据的存储和查询,但是价格并不适合所有人.

分布式存储测试方案_分布式存储 技术_超融合的分布式存储架构部署

2)当负载很高时,主从模式将出现瓶颈. 在现有技术中,当负载较高时,使用相关的复制机制来实现相关的读写吞吐量性能. 此机制有两个瓶颈: 首先,有效性取决于读取操作的比例,在这种情况下,主控通常会成为瓶颈,并且需要顺序队列来执行写入操作. 主站将无法承受从站的过载和数据同步延迟. 它也将非常大,并且还将消耗CPU的计算能力. 在主机上执行写操作后,仍然需要在每个从机上运行一次. 分片可以轻松地将计算,存储和I / O并行分布到多台计算机,这可以充分利用多台计算机的处理能力,并且可以避免单点故障,提供系统可用性并犯下错误. 隔离.

3)使用免费的MySQL和廉价的Server甚至PC作为群集,以实现小型机+大型商业DB的效果分布式存储测试方案,减少大量资本投资,并降低运营成本. 为什么不这样做?

如何?如何分割数据?

首先详细阐述并解释数据分割的方法和形式.

数据分段可以是物理的,数据通过一系列分段规则分配到不同的DB服务器,并且特定的通过路由规则进行访问,因此每次访问都面对的不是单个服务器,而是N个服务器,这样可以降低一台机器的负载压力.

数据分割也可以在中,通过一系列的分割规则,数据被分发到中的不同表中,例如文章分为article_001,article_002等子表,几个子表级别构成一个逻辑上完整的商品表,这样做的目的实际上非常简单. 例如,例如,商品表中现在有5000w数据. 这时,我们需要向该表中添加新的数据. 插入完成后,将重新索引表,并创建5000w行数据. 索引的开销不可忽略. 但是相反地,如果将这张表分为100个表,则从article_001到article_100,则平均有5000w行数据,而每个子表中只有500,000行数据. 目前,我们有一个只有50w行数据的表. 插入数据后,索引创建时间将减少几个数量级,这将大大提高DB的运行效率和DB的并发性. 当然,子表的好处以及诸如写操作之类的锁定操作的好处尚不明确.

总而言之,子库减轻了单点计算机的负担;子表提高了数据操作的效率,尤其是写操作的效率.

如上所述,为了实现数据的水平分段,每个表中必须有相对冗余的字符作为分段基础和标记字段. 在常见的应用程序中,我们根据子库的三种方法和规则选择user_id作为区分字段: (当然,还有其他方法)

按数字段划分:

超融合的分布式存储架构部署_分布式存储测试方案_分布式存储 技术

(1)区分user_id,对应于DB1从1到1000,DB2从1001到2000,依此类推;

优点: 部分迁移

缺点: 数据分布不均

(2)哈希取模:

散列user_id(如果user_id为数字,则使用user_id值),然后使用特定数字. 例如,如果应用程序需要将一个拆分为4个,则使用4. 该数字对user_id的哈希值(即user_id%4)执行取模运算,因此每个操作都有四种可能: 结果为1,它对应于DB1;当结果为2时,它对应于DB2;当结果为3时,它对应于DB3;当结果为0时,它对应于DB4,因此数据非常均匀地分配给4个DB.

好处: 数据分布均匀

缺点: 数据迁移过程中出现问题,无法根据计算机性能分配数据

(3)将配置保存在身份验证库中

要建立一个. 该单独存储user_id和DB之间的映射关系. 每次访问时,必须首先查询该以获得特定的信息,然后才能执行我们需要的查询操作.

分布式存储 技术_超融合的分布式存储架构部署_分布式存储测试方案

优点: 灵活性强,关系

缺点: 每次查询前多查询一次,性能大大降低

以上是我们通常选择的三种开发方法. 一些复杂的项目可能会结合使用这三种方法

方法.

4)接下来分布式存储测试方案,我们将进一步介绍分布式,以解决存储和访问海量数据的问题

分布式数据解决方案提供以下功能:

(1)提供子库规则和路由规则(RouteRule称为RR),直接将上面描述中提到的三个划分规则直接嵌入到系统中,具体的嵌入方法将在以下内容中详细介绍和讨论;

(2)引入集群的概念来解决容错问题,确保数据的高可用性;

(3)介绍负载均衡策略(LoadBalancePolicy称为LB);

(4)引入群集节点可用性检测机制,以定期检测单点计算机的可用性,以确保LB策略的正确实施并确保系统的高度稳定性;

(5)引入读/写分离以提高数据查询速度;


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-189031-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 刘小芳
        刘小芳

        没用

      • 魏妍
        魏妍

        我们可以可以不要主权

        • 杨周玲
          杨周玲

          第二我们应该加快自己在南沙的岛礁建设

      • 王浩钢
        王浩钢

        王健林说得还是比较现实

      热点图片
      拼命载入中...