首页 > 其他分享 >00-开篇导读:学习分库分表开源框架的正确方法

00-开篇导读:学习分库分表开源框架的正确方法

时间:2024-01-01 21:31:47浏览次数:26  
标签:00 分库 ShardingSphere 数据库 源码 分表 分布式

1 前言

长期从事分布式系统的构建和优化工作,负责过大型电商以及物联网系统的设计和开发,曾带领团队完成业界领先的物联网数据平台建设工作,对基于 ShardingSphere 进行数据分库分表和治理工作有着丰富的实践经验。

互联网高速发展带来海量的信息化数据,也带来更多的技术挑战。以我工作多年的物联网行业为例,各种智能终端设备(比如摄像头或车载设备等)以每天千万级的数据量上报业务数据,电商、社交等互联网行业更不必说。这样量级的数据处理,已经远不是传统关系型数据库的单库单表架构所能支撑的,如何高效存储和访问这些数据,成为一个非常现实且亟待解决的问题。

但由于生态系统的完善性,关系型数据库仍然是数据平台核心业务的基石,具有巨大市场。虽然业界存在一批 NoSQL 数据库,可以天然集成类似分布式分片这样的功能,然而并不具备诸如事务管理等核心功能。

面对系统日益增长的海量数据,业界普遍做法是引入分库分表架构,我们可以整合纵向分库和横向分表的设计方法来应对海量数据的存储和访问。

2 让分库分表落地

要实现支持海量数据存储和访问的分库分表架构,抛开业务层面的规划和设计,开发人员在技术实现层面也面临着一系列的问题:

  • 数据分片:如何最小成本实现关系型数据库分库分表?
  • 代理机制:如何基于普通客户端工具对分库分表架构下的数据进行访问?
  • 分布式事务:如何确保分布在不同数据库和表中同一份业务数据的一致性?
  • 数据库治理:如何确保分散在各个环境下的数据源和配置信息等数据库资源的一致性?

分布式数据库中间件 ShardingSphere 作为一个分库分表的“利器”,可很好地解决这些痛点,且相比其他分库分表框架(如 Cobar、MyCat 等)有

3 优势

3.1 技术权威性

Apache 基金会历史上第一个分布式数据库中间件项目,代表着这一领域的最新技术方向;

3.2 解决方案完备性

集客户端分片、代理服务器,以及分布式数据库的核心功能于一身,提供了一套适用于互联网应用架构、云服务架构的,完整的开源分布式数据库中间件解决方案和生态圈。

3.3 开发友好性

提供了友好的集成方式,业务开发人员只需要引入一个 JAR 包就能在业务代码中嵌入数据分片、读写分离、分布式事务、数据库治理等一系列功能。

3.4 可插拔的系统扩展性

它的很多核心功能均通过插件的形式提供,供开发者排列组合来定制属于自己的独特系统。

这些优秀的特性,让 ShardingSphere 在分库分表中间件领域占据了领先地位,并被越来越多的知名企业(比如京东、当当、电信、中通快递、哔哩哔哩等)用来构建自己强大而健壮的数据平台。如果你苦于找不到一款成熟稳定的分库分表中间件,那么 ShardingSphere 恰能帮助你解决这个痛点。

4 为啥要学习这个专栏?

但凡涉及海量数据处理的企业,就一定用到分库分表。如何进行海量数据的分库分表设计和迁移,有效存储和访问海量业务数据,已经成为很多架构师和开发人员需要规划和落实的一大课题,也成为像拼多多、得物等很多优质公司高薪诚聘的岗位需求

但优质人才非常短缺:

  • 从事海量数据处理需要相应的应用场景和较高的技术门槛
  • 业界也缺乏成熟的框架来完成实际需求。掌握诸如 ShardingSphere 这样的主流分库分表和分布式数据库中间件框架的技术人员也成了各大公司争抢的对象

鉴于市面上还没有对 ShardingSphere 进行系统化介绍的内容,我希望能来弥补这个空白。此外,分库分表概念虽然比较简单,但在实际开发过程中要落地却也不容易,也需要一个系统的、由浅入深的学习过程。

5 大纲

基于 ShardingSphere 开源框架,介绍主流的分库分表解决方案和工程实践,是业界第一个全面介绍 ShardingSphere 核心功能和实现原理的体系化专栏,填补了这块空白。

  1. 第一部分:引入 ShardingSphere 这一部分将从如何正确理解分库分表架构讲起,引出 JDBC 规范与 ShardingSphere 的关系,并介绍如何基于 ShardingSphere 所提供的配置体系,给出在业务系统中使用 ShardingSphere 的多种具体方式。
  2. 第二部分:ShardingSphere 核心功能 ShardingSphere 包含很多功能特性,这部分会给出数据分片、读写分离、分布式事务、数据脱敏、编排治理等核心功能的具体使用方法和开发技巧。

三~六部分是重点,不同维度深入剖析 ShardingSphere 的内核架构,从源码级别给出分库分表的设计和实现机制,并且有助于你提升源码理解能力。

  1. 第三部分:ShardingSphere 源码解析之基础设施 围绕 ShardingSphere 的基础架构展开讨论,首先给你高效阅读 ShardingSphere 源码的方法,并介绍微内核架构和分布式主键的设计理念,以及在 ShardingSphere 的具体实现方法。
  2. 第四部分:ShardingSphere 源码解析之分片引擎 关注 ShardingSphere 最核心的分片引擎实现原理,从 SQL 的解析引擎开始,一路进行路由引擎、改写引擎、执行引擎、归并引擎等分片引擎中各个核心技术点的源码解析。
  3. 第五部分:ShardingSphere 源码解析之分布式事务 分布式事务是分布式数据库中间件的必备功能,ShardingSphere 内部也提供了对分布式事务的一种抽象。我将详细分析这种抽象过程,以及如何实现强一致性事务和柔性事务。
  4. 第六部分:ShardingSphere 源码解析之治理与集成 讨论如何基于改写引擎实现低侵入性数据脱敏方案、如何基于配置中心实现配置信息的动态化管理、如何基于注册中心实现数据库访问熔断机制、如何基于 Hook 机制以及 OpenTracing 协议实现数据访问链路跟踪等数据库治理方面的问题。

6 收获

分库分表的应用方式和实现原理

理解 ShardingSphere 的核心功能特性,来满足日常开发工作所需,同时基于源码给出这些功能的设计原理和实现机制。

学习优秀的开源框架,提高技术理解与应用能力

技术原理是具有相通性的。以 ZooKeeper 这个分布式协调框架为例,Sharding

Sphere 和 Dubbo 中都使用它来完成了注册中心的构建

在 ShardingSphere 中,我们可以基于 ZooKeeper 提供的动态监听机制来判断某个数据库实例是否可用、是否需要对某个数据库实例进行数据访问熔断等操作,也可以使用 ZooKeeper 的这一功能特性来实现分布式环境下的配置信息动态管理。

随着对 ShardingSphere 的深入学习,类似例子还有很多,包括基于 SPI 机制的微内核架构、基于雪花算法的分布式主键、基于 Apollo 的配置中心、基于 Nacos 的注册中心、基于 Seata 的柔性事务、基于 OpenTracing 规范的链路跟踪等。而这些技术体系在 Dubbo、Spring Cloud 等主流开发框架中也多有体现。因此这个专栏除了可以强化你对这些技术体系的系统化理解,还可以让你掌握这些技术体系的具体应用场景和实现方式,从而实现触类旁通。

学习从源码分析到日常开发的技巧

从源码解析到日常应用是本专栏的一个核心目标。基于 ShardingSphere 这款优秀的开源框架,可以提炼出一系列包括设计模式的应用(如工厂模式、策略模式、模板方法等)、微内核架构等架构模式、组件设计和类层结构划分的思想和实现策略、常见缓存的应用以及自定义缓存机制的实现、Spring 家族框架的集成和整合等开发技巧,这些开发技巧都能够直接应用到日常开发过程。

7 总结

技术的发展日新月异,随着数据中台等架构设计理念以及各种人工智能应用的普及,数据量级的不断提升是大部分软件系统面临的一大挑战,类似 ShardingSphere 的分库分表框架也将迈向一个新的发展时期,并在更多企业中得到应用。

但是成熟度高且发展活跃的分库分表框架并不多,企业的选择余地并不大。ShardingSphere 是这一领域目前为止唯一一个 Apache 顶级项目,也是提供核心功能最丰富的一个,代表着这一领域的一种技术发展方向。希望本专栏能够让你学好 ShardingSphere,并且掌握触类旁通的学习方法。

参考:

编程严选网

标签:00,分库,ShardingSphere,数据库,源码,分表,分布式
From: https://blog.51cto.com/JavaEdge/9058495

相关文章

  • 代码随想录算法训练营第二十天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,9
    一、654.最大二叉树题目链接:LeetCode654.最大二叉树学习:思路:前序遍历方法参数:(int[]nums,intstart,intend)返回类型:TreeNode终止条件:if(end-start==0)returnnull;if(end-start==1)returnnewTreeNode(nums[start]);单层递归逻辑:寻找数组中的最大......
  • Cisco Nexus 9000v Switch, NX-OS Release 10.3(3)F - 虚拟化的数据中心交换机
    CiscoNexus9000vSwitch,NX-OSRelease10.3(3)F-虚拟化的数据中心交换机作者主页:sysin.orgNX-OSSystemSoftwareReleaseDateCiscoNX-OSRelease10.3(3)F2023-05-05CiscoNX-OSRelease10.3(2)F2022-12-19CiscoNX-OSRelease10.3(1)F2022-08-19CiscoNX-OSRelease10.......
  • 2023-12-31 21:00:00 告别2023
    很久没有更新博客了,在2023年的最后一天,有点仪式感,写个小短文吧。可以说今年上半年,还是花了很多心思在学习上,博客里两三天一更的进度也能体现出来用心。花了这些时间、精力,自认为还是学到了一些技术、知识,以前看书本、视频里不懂的东西,也越来越清晰。沉浸在知识海洋里的充实而满......
  • P7400 题解
    P7400,一个有趣的博弈论。下面称Paula和Marin都执行一轮操作的“一整轮”为一个周期。Sub1:\(n\le100\)我们采用\(O(n^2\timesn)=O(n^3)\)的DP即可。这里略去具体实现。Sub2:边的颜色均为洋红这意味着两人都可以走过任意一条边。考虑两方如何对对方进行“围追堵截”......
  • 初中英语优秀范文100篇-044Can Money Buy Happiness?钱能买到幸福?
    PDF格式公众号回复关键字:SHCZFW044记忆树1Canmoneybuyhappiness?翻译钱能买到幸福吗简化记忆幸福句子结构主语:money(金钱)谓语:canbuy(能够购买)宾语:happiness(幸福)这是一个陈述句,谓语动词"canbuy"表达了金钱的购买能力。宾语"happiness"指的是幸福。整个句子在语......
  • P5765 [CQOI2005] 珠宝 题解
    P5765[CQOI2005]珠宝题解思路好题,注意到有性质:颜色数最多为\(\lfloor\log_2n\rfloor+1\),有了这个性质之后直接树形DP糊上去就过了。简要的证明:考虑一个点,显然一种颜色即可。对于一个颜色为\(c\)的点,其儿子至少有\(c-1\)个,且为\(1\simc-1\)的排列,这样可......
  • P10033 「Cfz Round 3」Sum of Permutation
    原题链接基础赛唯一写了的题,因为我喜欢构造!事实上的确有点麻烦了,应该会有更好的做法。但是自我感觉这个思维很连贯,因为这就是我做题时思路的写照。记\(p_{pos1}=1,p_{posn}=n\)。首先可以构造\(a_i\getsp_i+1\)这样一定满足第二个限制,但是当\(p_i=n\)时不满足第一个限......
  • 浪潮CE3000F飞腾PC安装UOS/银河麒麟双系统的过程
    浪潮CE3000F飞腾PC安装UOS/银河麒麟双系统的过程背景为了进行兼容性验证,部门采购过一批浪费CE3000F的PC机器.前期系统安装的是UOS,但是有同事借走机器后重装了银河麒麟V10SP1结果安装人忘记了银河麒麟的密码,UOS又进不去系统.所以没办法只能全新安装一次.第一步下载......
  • java 中定义 byte 赋值200 输出怎样变200
    Java中定义byte赋值200输出怎样变成200作为一名经验丰富的开发者,我将教会那些刚入行的小白如何实现“java中定义byte赋值200输出怎样变成200”。在这篇文章中,我将详细介绍整个过程,并提供相关的代码示例。整体流程首先,让我们来看一下整个过程的流程图:flowchartTDA[定义byt......
  • 初中英语优秀范文100篇-043Is Television Good or Bad?看电视是好是坏?
    PDF格式公众号回复关键字:SHCZFW043记忆树1Moreandmorepeoplelikewatchingtelevision.翻译越来越多的人喜欢看电视简化记忆电视句子结构1"Moreandmorepeople"是主语,表示越来越多的人。2"like"是谓语,表示喜欢或愿意。3"watchingtelevision"是宾语,表示......