ShardingSphere Mode 模式新起航:运行模式详解
在 5.0.0 GA 版本中,Apache ShardingSphere 新增了运行模式的概念,同时提供了 Memory/Standalone/Cluster 3 种配置方式。ShardingSphere 为什么会提供这 3 种运行模式,不同的运行模式在实际的开发使用场景中又有哪些不同呢?
本文将带领大家一起了解 ShardingSphere 5.0.0 全新概念-运行模式。
作者介绍
孟浩然
SphereEx 高级研发工程师、Apache ShardingSphere PMC。
曾就职于京东科技,负责数据库产品研发,热爱开源,关注数据库生态,目前专注于 ShardingSphere 数据库中间件开发以及开源社区建设。
分布式治理背景
分布式治理是 ShardingSphere 集群部署的基础,在 5.0.0 版本之前,用户需要在配置文件中通过配置 governance 标签来开启分布式治理功能:
governance: name: # 治理名称 registryCenter: # 配置中心 type: # 治理持久化类型。如:Zookeeper, etcd serverLists: # 治理服务列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181 overwrite: # 本地配置是否覆盖配置中心配置。如果可覆盖,每次启动都以本地配置为准
持久化用户配置以及元数据信息是分布式治理最主要的功能之一,也是支持 DistSQL 的基本能力。在 5.0.0 系列的文章中,DistSQL 核心开发人员已经详细和大家介绍了 DistSQL 的概念、语法和使用,以及如何开发自己的 DistSQL。简单回顾一下,DistSQL 为 ShardingSphere 提供了一种数据库化的使用体验,用户可以使用 SQL 的方式来搭建和管理整个 ShardingSphere 分布式数据库生态体系。
作为一个分布式数据库生态系统的操作语言,和标准的 SQL 一样, DistSQL 需要保证操作的任何配置以及元数据都能够被持久化,以保证系统还原时的数据一致性。而在 5.0.0 版本之前,只有开启分布式治理才能实现这个功能,这也是为什么 DistSQL 在开发初期仅支持分布式治理场景下使用的原因。
运行模式的产生
ShardingSphere 基于现有的分布式治理功能提供的集群部署能力,将拥有分布式能力的 ShardingSphere 定义为集群模式。 集群模式支持 ShardingSphere 作为无状态的计算节点进行多实例部署,同时借助注册中心,实现集群内所有实例的元数据信息的实时同步。集群模式天然支持 DistSQL,借助 DistSQL 可以对集群模式下的计算/存储节点进行诸如节点上下线、禁用等管理操作。
为了解决 DistSQL 只能在分布式场景下使用的局限,ShardingSphere 首先需要解决非分布式环境下的元数据存储问题,最简单也是最直接的方式是将元数据写入本地文件中,服务重启时根据配置可以从本地文件加载元数据。与分布式场景的集群模式不同,本地文件无法在多个 ShardingSphere 实例之间实时共享配置,所有配置更新仅在当前实例生效,这就是单机模式。
ShardingSphere 5.0.0 版本除了为用户提供更强大的功能之外,打造稳定友好的用户 API ,持续提升用户使用体验,也是 ShardingSphere 的产品目标。除了集群模式和单机模式,部分用户有快速启动集成 ShardingSphere 且无需进行配置持久化的需求,比如使用 ShardingSphere 快速验证某些功能,集成测试等场景,结合对用户这些使用的场景的思考,内存模式 应运而生。
至此 ShardingSphere 为用户提供了内存模式、单机模式以及集群模式,运行模式在 API 的设计上更容易被用户理解,也更贴合 ShardingSphere 的实际使用场景,同时这 3 种不同的运行模式都能支持使用 DistSQL 进行分布式数据库服务的快速搭建和管理。
在 5.0.0 中废弃了 governance
配置方式,改为使用 mode
配置不同的运行模式。
mode: type: # 运行模式类型 Standalone/Cluster repository: type: # 持久化类型 不同模式对应不同的实现 Standalone-File,Cluster-ZooKeeper/Etcd props: # 不同的持久化类型对应不同的自定义配置 ... overwrite: false # 是否使用本地配置覆盖本地/远程配置
接下来和大家详细介绍三种运行模式的概念以及在使用 ShardingSphere 进行业务开发时如何选择合适的运行模式。
概念与应用场景
- 内存模式(Memory)
默认的运行模式,用户无需配置 mode
。内存模式下用户无需配置任何持久化组件和策略,无论是本地初始化的配置还是通过 SQL/DistSQL 操作造成的元数据变更,仅在当前进程中生效, 服务重启后配置将会被还原。内存模式适用于集成测试环境,方便开发人员在整合功能测试中集成 ShardingSphere 而无需清理运行痕迹。
- 单机模式(Standalone)
ShardingSphere 为单机模式默认提供了本地文件的持久化方式,能够将数据源和规则等元数据信息持久化到本地文件中,而在服务重启的时候,依然能够从本地文件中读取配置,保持元数据和重启之前的版本一致。 单机模式适用于开发工程师在本地快速搭建 ShardingSphere 的开发环境,进行功能的联调和验证。
单机模式的配置方式如下:
mode: type: Standalone repository: type: File props: path: ... overwrite: false
单机模式默认提供本地文件的持久化方式,默认将配置持久化到用户目录的 .shardingsphere
下,也可以通过配置 path
自定义存储路径。
- 集群模式(Cluster)
集群模式是 ShardingSphere 建议的真实部署上线的生产环境必须使用的模式,采用 JDBC 和 Proxy 混合部署架构也必须使用集群模式。集群模式提供了分布式治理的功能,通过集成独立部署的第三方注册中心,除了能够持久化元数据之外,同时实现了多个实例之间的数据共享 以及分布式场景下的状态协调, 也是 ShardingSphere 通过水平扩展来提高计算能力 以及高可用等核心功能的基础。
集群模式的配置方式如下(ZooKeeper为例):
mode: type: Cluster repository: type: ZooKeeper props: namespace: governance_ds server-lists: localhost:2181 retryIntervalMilliseconds: 500 timeToLiveSeconds: 60 maxRetries: 3 operationTimeoutMilliseconds: 500 overwrite: false
三种运行模式的对比如下,用户可以按照自己的需求进行选择。
内存模式 | 单机模式 | 集群模式 | |
---|---|---|---|
默认 | 是 | 否 | 否 |
持久化方式 | 无 | 本地文件(默认) | 注册中心 |
实现方式 | 无 | 1.File 2. H2 Database(开发中) | 1.Zookeeper 2. Etcd |
是否需要部署三方组件 | 否 | 否 | 是 |
是否支持 DistSQL | 是 | 是 | 是 |
分布式治理 | 否 | 否 | 是 |
适用场景 | 集成测试/快速验证 | 本地开发/功能联调 | 生产环境/混合部署 |
结语
ShardingSphere 提供的三种运行模式,能够满足用户在测试、开发以及线上部署环境的全部需求,与此同时,借助于 ShardingSphere 强大的可插拔架构设计,开发者也可以灵活定制各个模式下的持久化方式,打造更适合自身开发和业务需求的运行模式。 同时运行模式也是 SphereEx 中文社区 Governance 兴趣小组长期维护的模块之一,对分布式治理感兴趣的同学,也请关注 SphereEx 中文社区并加入我们的兴趣小组。
Governance 兴趣小组链接:https://community.sphere-ex.com/t/topic/432

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
是“玩具”还是神作?低代码平台真的是下一个千亿级赛道吗?
近年来,低代码平台非常火,尤其是Mendix和Outsystems的收购及融资后,很多人越来越相信,低代码平台或将成为继云计算之后,又一个千亿级赛道。 什么是低代码平台 那么什么是低代码平台呢? 一般来说,低代码开发平台是指不同水平的开发人员,甚至是没有任何开发经验的人,可以通过可视化用户界面,使用拖拽组件和模型驱动的逻辑,来创建网页或者移动应用程序的平台。 创建应用程序的过程,就好像拼图一样,将一个一个不同的模块拼接起来,最终组合形成应用程序。 由于低代码平台仍然处于初级阶段,对它的定义较为模糊,市面上也出现了不同形式的实现方式,常见的有以下几种: 完全简化前后端的开发,用户甚至可以不写代码搭建应用程序,不过灵活性较差; 在线IDE和编辑器,页面采用了可视化设计,方便开发者组合模块,但仍然需要写少量的代码进行二次开发,才能正常使用; 简化前端开发,开发者不再需要写前端代码; 简化后端开发,即开发者只需要写前端代码,后端可以在线设计数据结构,实现增删改查功能; 提供一站式开发平台,提供持续集成、部署和运维等功能,以帮助开发者提升效率为目的; 低代码要解决什么问题 “低代码”概念的出现,...
- 下一篇
完蛋,我的事务怎么不生效?
前言 事务大家平时应该都有写,之前写事务的时候遇到一点坑,居然不生效,后来排查了一下,复习了一下各种事务失效的场景,想着不如来一个总结,这样下次排查问题,就能有恃无恐了。那么先来复习一下事务相关知识,事务是指操作的最小工作单位,作为一个单独且不可切割的单元操作,要么全部成功,要么全部失败。事务有四大特性(ACID): 原子性(Atomicity):事务包含的操作,要么全部成功,要么全部失败回滚,不会存在一半成功一半失败的中间状态。比如A和B一开始都有500元,A给B转账100,那么A的钱少了100,B的钱就必须多了100,不能A少了钱,B也没收到钱,那这个钱就不翼而飞了,不符合原子性了。 一致性(Consistency):一致性是指事务执行之前和之后,保持整体状态的一致,比如A和B一开始都有500元,加起来是1000元,这个是之前的状态,A给B转账100,那么最后A是400,B是600,两者加起来还是1000,这个整体状态需要保证。 隔离性(Isolation):前面两个特性都是针对同一个事务的,而隔离性指的是不同的事务,当多个事务同时在操作同一个数据的时候,需要隔离不同事务之间的影响...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装Docker,最新的服务器搭配容器使用