随着手机和互联网成为人们眼中的日常必需品,网站和商业服务每周接收数十亿次访问的情况已经司空见惯——这还只是一个侧面。
北美的黑色星期五或亚洲的双十一(又名光棍节)等销售日是传统零售企业正在适应数字世界的绝佳案例。这些企业现在必须应对一系列新的需求和挑战,才能成功实现其业务目标。
他们都必须回答同一个问题:我们需要在这个黑色星期五推动我们的数字销售业绩,但是当我们成功实现目标,并且伴随而来的惊人流量到达数据库集群时,我们的数据库能处理好它吗?
涉及到数据库解决方案时,不同的业务用例有多种选项。选择范围从 NoSQL 产品(例如 MongoDB、Cassandra、Amazon DynamoDB 等)到 NewSQL 产品(例如如今流行的 Amazon Aurora 或 CockroachDB)。
除了这些出色的解决方案之外,一些行业还会考虑在现有数据库集群之上进行透明分片。
根据DB-Engines的数据库趋势排名,尽管市面上出现了许多新的数据库产品,但传统的关系型数据库仍然占据了相当大的市场份额。
考虑到数据库面临的众多新挑战,是否有一种经济高效的方式来利用这些类型的数据库,并通过一些新的实用理念来增强它们呢?数据库透明分片是这个问题的最佳答案之一。
DB-Engines 上的数据库流行度排名
这方面最好的技术之一是将数据拆分为单独的行和列。这种将大型数据库表拆分为多个小表的做法称为分片。原始表被分为许多垂直分片或水平分片。为了标记这些表,我们可能对垂直分片用“VS1”,对水平分片用“HS1”,诸如此类。数字代表第一个表或第一个模式(schema)。然后是 2 和 3,以此类推。这些数据子集称为表的原始模式。
那么分片和分区有什么区别呢?分片和分区都包括了将大型数据集分解为一些较小数据集的操作。但一个关键的区别是,分片意味着数据打散后分布在多台计算机上,可以是水平分区或是垂直分区。相比之下,分区是将数据库分解为不同的子集但保存在单个数据库中,有时称为数据库实例。
由于分片数据被分成许多块存储在不同的机器上,这种方法具有以下优点:
但分片架构并不完美,还是有一些缺点:
就像技术领域中的大多数事情一样(更不用说生活中的事情了),银弹是不存在的。你应该进行彻底的分析以全面了解你的需求和场景,然后才能走下一步,选择最佳解决方案。
总的来说,分片架构的优势占上风,很多在数据库行业发挥重要作用的优秀产品都是基于这种架构。或有各自的定义,但它们本质上是基于数据库分片架构的。
Citus 管理一个协调器(代理)集群来分发 PostgreSQL 集群,而 Vitess 则对 MySQL 进行分片。它们都专注于为传统但流行的关系型数据库提供低成本和高效的分布式解决方案。实际上,分片架构也是大多数 NoSQL 和 NewSQL 产品的基础,但这涉及到另一个关注 NoSQL 和 NewSQL 分片的主题。本文重点介绍关系型数据库的分片,因为经典分片技术带来了一些创新。
分片的出现是数据库分布式需求的产物。如今,越来越多的新问题都与数据库相关,例如隐私保护、SQL 审计、租户、分布式身份验证等。
这些问题代表了现实世界对数据库的新需求。如何处理这些问题是所有数据库产品都不可避免的挑战,无论是哪种数据库都一样。这些问题可以通过数据库分片方案来解决吗?看起来分片需要进化来应对这些挑战,这也正是我们的主题,即数据库分片架构的下一个进化方向是什么。
我的答案是Database Plus,它是创建分布式数据库系统的指导概念,并不只是要做分片,位于 DBMS 之上。
它的构想是要在现有和碎片化的数据库之上建立一个标准化的层和生态系统,并提供统一和标准化的数据库使用规范。这为上层应用提供了保障,尽可能减少了业务由于底层数据库碎片化而面临的挑战。它的结果是一个应用程序只需要与标准化服务对话,而不是和每个数据库的不同服务对话的环境。
这个想法是由 Apache ShardingSphere 的 PMC(项目管理委员会)发起的,花了大约一年的时间发布 5.0.0 GA,并在其架构中实现了这个概念。
在 3.x 和 4.x 发布阶段,我们将 Apache ShardingSphere 定义为分布式数据库中间件(分片架构),仅解决分片问题。然而,数据库和社区面临的新挑战推动了这个项目的发展,项目开始包含更多特性,如数据加密、影子数据库、分布式认证、分布式治理等。所有这些变化都超出了传统的分片范围,因为分片只是>