Springboot3 shardingsphere5.2.1 读写分离及数据加密实践

稻花香里说丰年,听取蛙声一片。

1 前言

前文中已经介绍了 ShardingSphere5.2.1 的分库分表规则,除了分库分表的功能之外, Apache ShardingSphere 提供了读写分离和数据加密两大功能(在新版本中还添加了数据脱敏的模块),帮助用户提升数据库的性能和安全性。本文将详细介绍 ShardingSphere 的读写分离和数据加密功能的用法,并探讨其使用中的注意事项。

2 项目准备

项目准备可以参见之前的分库分表,同时需要准备好数据库表的主从配置。同时也要准备好数据库的读写分离的数据库表。

3 读写分离配置

在数据库读写分离配置之前,需要先配置数据库的连接,本例采用的是1主2从的架构,数据库连接配置如下所示:

配置数据库读写分离,需要先配置数据库的写库和独库,然后再指定读数据库的路由算法,默认采用随机的算法,可以配置数据库的权重信息。目前支持的负载均衡算法有:

复制代码
ROUND_ROBIN  基于轮询的读库负载均衡算法
RANDOM  基于随机的读库负载均衡算法
WEIGHT  基于权重的读库负载均衡算法
如果需要自定义负载均衡算法,和数据库分库分表算法配置一样,需要自定义实现 ReadQueryLoadBalanceAlgorithm 算法。

通过以上的配置即可实现数据库的读写分离,需要说明的是在事务中的读数据是会路由到主库中的。所以在业务业务实现中需要读到最新的数据时,需要采用编程式事务或者声明式事务。

4 数据库字段加密

字段加密,在业务实现中有广泛的现实需要,实现字段的加密有多种方式,在本文中介绍的是 ShardingSphere5.2.1 的实现方式,通过配置的方式即可实现字段的加密,同时可以实现明文和密文的同时存储,在储存数据时以密文的方式存储,读取时进行解密。ShardingSphere 支持的方式有 AES/MD5/RC4 等方式,此外也可以自定义 EncryptAlgorithm 加密算法。

在本例中使用的是 AES 加密方式,密文的字段为 tb_user.username,存储时也可以将明文存储(tb_user.username1 该字段在数据库中存在,但是在业务代码中可以不用存在)。query-with-cipher-column 即是否使用加密列进行查询。

5 注意事项

5.1 读写分离注意事项
  • 数据一致性:在主从同步延迟的情况下,读写分离可能导致读取到的数据不是最新的。可以通过强制读主库或采用延迟容忍的策略来解决这一问题。
  • 负载均衡策略:根据业务需求选择合适的负载均衡策略,如轮询、随机、权重等,确保读请求的均衡分布。
  • 故障切换:配置故障切换机制,当主库或从库发生故障时,能够自动切换到可用的数据源,保证系统的高可用性。
5.2. 数据加密注意事项
  • 性能影响:数据加密和解密操作会带来一定的性能开销,需评估其对系统性能的影响,并在必要时进行优化。
  • 密钥管理:妥善管理加密密钥,确保其安全性。定期更换密钥,并及时更新配置文件中的密钥信息。
  • 字段长度:加密后的数据长度通常比明文数据长,在设计数据库表结构时需考虑这一点,避免字段长度不足导致的数据截断问题。

6 总结

ShardingSphere 通过提供读写分离和数据加密功能,有效提升了数据库系统的性能和安全性。在实际应用中,合理配置和使用这些功能,可以显著提高系统的读写效率和数据安全性。需要关注数据一致性、负载均衡策略、故障切换机制、性能优化和密钥管理等关键环节,可以确保系统的高可用性和可靠性,保证系统的稳定性。本文中所涉及的代码已经上传至 gitee, 欢迎交流学习。项目地址 fortunecloud

相关推荐
考虑考虑5 小时前
docker compose V2版本新属性
运维·后端·自动化运维
weixin_BYSJ19877 小时前
【计算机毕设】基于SpringBoot与Vue的文物保护档案管理系统08621
vue.js·spring boot·spring cloud·微服务·架构·django·课程设计
GreenTea7 小时前
7000 万 QPS、500 PB:OpenAI 如何用一个 Python 存储平台撑住 10 亿用户
后端·架构
Flynt7 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet7 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
GreenTea7 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
Bs_MoneyMagnet10 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
IT_陈寒11 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端
陌シ未央ゞ11 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法
第五页的你11 小时前
SpringBoot基础设施配置(Redis序列化,JJWT新版)
后端