当前位置:首页 » 存储配置 » 中间件配置策略怎么看

中间件配置策略怎么看

发布时间: 2024-10-20 14:46:05

1. 数据库分库分表中间件的整理

本文将总结介绍常见的数据库分库分表中间件,并探讨它们的选择依据和数据库拆分策略。

首先,市面上的分库分表中间件包括cobar、TDDL、atlas、sharding-jdbc和mycat。cobar曾由阿里团队开发,但因更新停滞,基本被遗弃,不建议使用。TDDL是淘宝的解决方案,支持读写分离,但依赖外部管理系统,使用范围有限。atlas由360开源,社区维护已滞后,使用公司较少。sharding-jdbc由当当开源,提供了丰富的SQL支持,2.0版本支持多种功能,活跃度较高,是当前的可选方案之一。mycat基于cobar,功能完善且流行,社区活跃,但相对较新。

在选择中间件时,client层方案如sharding-jdbc(如中小型公司)优点在于轻量级、运维成本低,但升级时需系统同步;proxy层方案mycat(如中大型公司)虽运维成本高,但对项目透明,适合大型团队使用。对于数据库拆分,有水平拆分(将数据分散到多个库)和垂直拆分(根据访问频率拆表)两种方式,水平拆分利于并发和扩展,垂直拆分利于缓存优化。

分库分表策略包括范围分库(按时间或范围划分)和哈希分库(均匀分布)。范围分库易于扩容,但可能导致热点问题;哈希分库负载均衡,但扩容时需要数据迁移。实现不停机迁移和动态扩容缩容的方法包括预设数据库服务器配置,调整路由规则,利用工具迁移数据,修改配置,然后发布系统,调整路由即可。

2. 分库分表:中间件最全方案对比

分库分表是互联网公司数据管理的重要策略,在数据规模到达一定阶段后,通过将数据分散存储在不同的数据库实例中,以提高系统的性能和扩展性。以MySQL为例,水平分片技术将单表拆分,减少B+树索引的深度,提升查询速度,同时通过分库实现负载均衡,减轻单个数据库的压力。分库分表技术主要分为应用层依赖类中间件和中间层代理类中间件两大类。

应用层依赖类中间件,如TDDL、sharding-jdbc、TSharding、CTrip-DAL等,其特点在于与应用层紧密耦合,需要在应用层中依赖特定的jar包。这些中间件通过重新实现JDBC API,如DataSource、PrepareStatement等,使应用层在基本不改变业务代码的情况下,实现分库分表的能力。其主要工作流程包括SQL解析、SQL重写、SQL路由等,最终通过传统方法执行SQL并合并结果集返回给应用层。这类中间件的优点是无需额外部署,只需要与应用绑定一起发布。然而,缺点是不能跨语言,限制了使用范围。

ShardingSphere是一个由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar组成的分布式数据库中间件解决方案。ShardingSphere提供标准化的数据分片、分布式事务和数据库治理功能,适用于各种语言、容器和云原生环境。Sharding-JDBC定位为轻量级java框架,提供增强的JDBC功能,无需额外部署。Sharding-Proxy作为透明化的数据库代理端,提供MySQL协议的封装服务,支持异构语言的访问。Sharding-Sidecar(待开发)预计为Kubernetes或Mesos的云原生数据库代理,提供分布式数据访问应用与数据库的交互治理。

混合架构中,OLTP(联机事务处理)和OLAP(联机分析处理)是数据处理的主要分类。OLTP系统注重数据库内存效率,强调并发操作,而OLAP系统则聚焦数据分析,重视SQL执行性能。ShardingSphere通过混合使用Sharding-JDBC和Sharding-Proxy,并采用统一的注册中心配置分片策略,支持灵活构建适用于不同场景的应用系统。

中间层代理类中间件,如Amoeba、Cobar和Mycat等,通过在应用与数据库之间建立代理层,实现标准MySQL协议的转发,支持多种编程语言。Mycat是一个开源分布式数据库系统,提供了MySQL协议的服务器功能,实现分表分库,支持与多个MySQL服务器通信或使用JDBC协议与其他数据库通信。这类中间件在技术实现上与应用层依赖类中间件相似,但强调标准协议的兼容性,易于跨语言使用。

在分库分表技术选型时,需综合考虑产品功能、可扩展性、成熟度和实际应用情况。应用层依赖类中间件适用于与应用紧密耦合的场景,而中间层代理类中间件则提供了更广泛的跨语言支持。最终选择应基于具体的业务需求和技术栈考虑。在上述过程中,ShardingSphere因其全面的功能、跨语言支持和成熟度,成为了一个值得推荐的中间件解决方案。

3. 将缓存数据分片到集群的不同节点,分片规则可以使用什么算法

以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式:带状模式中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去;环状模式中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。

1. DBLE 启动时,读取用户在 rule.xml 配置的 sBeginDate 来确定起始时间
2. 读取用户在 rule.xml 配置的 sPartionDay 来确定每个 MySQL 分片承载多少天内的数据
3. 读取用户在 rule.xml 配置的 dateFormat 来确定分片索引的日期格式
4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的时间类型
5. 然后求分片索引值与起始时间的差,除以 MySQL 分片承载的天数,确定所属分片

1. DBLE 启动时,读取用户在 rule.xml 配置的起始时间 sBeginDate、终止时间 sEndDate 和每个 MySQL 分片承载多少天数据 sPartionDay
2. 根据用户设置,建立起以 sBeginDate 开始,每 sPartionDay 天一个分片,直到 sEndDate 为止的一个环,把分片串联串联起来
3. 读取用户在 rule.xml 配置的 defaultNode
4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的日期类型
5. 然后求分片索引值与起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于 sBeginDate,就会被放到 defaultNode 分片上

与MyCat的类似分片算法对比

中间件
DBLE
MyCat

分片算法种类 date 分区算法 按日期(天)分片
两种中间件的取模范围分片算法使用上无差别

开发注意点
【分片索引】1. 必须是字符串,而且 java.text.SimpleDateFormat 能基于用户指定的 dateFormat 来转换成 java.util.Date
【分片索引】2. 提供带状模式和环状模式两种模式
【分片索引】3. 带状模式以 sBeginDate(含)起,以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,理论上分片数量可以无限增长,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)
【分片索引】4. 环状模式以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,以 sBeginDate(含)到 sEndDate(含)的时间长度除以单个分片长度得到恒定的分片数量,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)
【分片索引】5. 无论哪种模式,分片索引字段的格式化字符串 dateFormat 由用户指定
【分片索引】6. 无论哪种模式,划分不是以日历时间为准,无法对应自然月和自然年,且会受闰秒问题影响

运维注意点
【扩容】1. 带状模式中,随着 sBeginDate 之后的数据出现,分片数量的增加无需再平衡
【扩容】2. 带状模式没有自动增添分片的能力,需要运维手工提前增加分片;如果路由策略计算出的分片并不存在时,会导致失败
【扩容】3. 环状模式中,如果新旧 [sBeginDate,sEndDate] 之间有重叠,需要进行部分数据迁移;如果新旧 [sBeginDate,sEndDate] 之间没有重叠,需要数据再平衡

配置注意点
【配置项】1. 在 rule.xml 中,可配置项为 <propertyname="sBeginDate"> 、 <propertyname="sPartionDay"> 、 <propertyname="dateFormat"> 、 <propertyname="sEndDate"> 和 <propertyname="defaultNode">
【配置项】2.在 rule.xml 中配置 <propertyname="dateFormat">,符合 java.text.SimpleDateFormat 规范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate

【配置项】3.在 rule.xml 中配置 <propertyname="sBeginDate">,必须是符合 dateFormat 的日期字符串

【配置项】4.在 rule.xml 中配置 <propertyname="sEndDate">,必须是符合 dateFormat 的日期字符串;配置了该项使用的是环状模式,若没有配置该项则使用的是带状模式

【配置项】5.在 rule.xml 中配置 <propertyname="sPartionDay">,非负整数,该分片策略以 86400000 毫秒(24 小时整)作为一份,而 sPartionDay 告诉 DBLE 把每多少份放在同一个分片

【配置项】6.在 rule.xml 中配置 <propertyname="defaultNode"> 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义

热点内容
股软加密 发布:2024-10-20 18:48:00 浏览:241
android夜间模式 发布:2024-10-20 18:41:50 浏览:967
开源通信服务器搭建 发布:2024-10-20 18:41:41 浏览:994
网吧服务器卡顿是什么原因 发布:2024-10-20 18:39:27 浏览:876
服务器性能如何充分利用 发布:2024-10-20 18:35:01 浏览:880
安卓和平精英更新是什么时候 发布:2024-10-20 18:35:00 浏览:368
安卓手机office怎么打开 发布:2024-10-20 18:23:29 浏览:757
冰火人编程 发布:2024-10-20 18:03:38 浏览:402
现金为王怎么找资产配置 发布:2024-10-20 17:45:04 浏览:300
数控编程车内孔 发布:2024-10-20 17:41:07 浏览:260