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

相关推荐
世界哪有真情2 分钟前
用虚拟IP扩容端口池:解决高并发WebSocket端口耗尽问题
前端·后端·websocket
知其然亦知其所以然10 分钟前
JVM社招面试题:队列和栈是什么?有什么区别?我在面试现场讲了个故事…
java·后端·面试
武子康13 分钟前
大数据-30 ZooKeeper Java-API 监听节点 创建、删除节点
大数据·后端·zookeeper
知了一笑14 分钟前
SpringBoot3集成多款主流大模型
spring boot·后端·openai
wmze15 分钟前
InnoDB存储引擎--索引与锁
后端
星辰大海的精灵19 分钟前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构
调试人生的显微镜20 分钟前
iOS App首次启动请求异常调试:一次冷启动链路抓包与初始化流程修复
后端
AI小智23 分钟前
Context Engineering:AI 工程的下一个前沿阵地?
后端
paopaokaka_luck24 分钟前
基于SpringBoot+Vue的酒类仓储管理系统
数据库·vue.js·spring boot·后端·小程序
梦兮林夕25 分钟前
02 gRPC 语法及类型介绍
后端·go·grpc