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

相关推荐
80530单词突击赢1 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法1 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy1 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇2 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
long3162 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_1112 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
短剑重铸之日2 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
Volunteer Technology3 小时前
sentinel基本操作
spring cloud·sentinel
Dragon Wu3 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
一个有梦有戏的人4 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python