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。

相关推荐
用户2986985301431 分钟前
Python 将 Word 文档转换为 XML 的实践要点
后端·python·api
Java爱好狂.1 小时前
阿里1658页Java面试题总结(含答案)
java·后端·高并发·架构师·java面试·java面试题·java八股文
vipxieliang1 小时前
PHP Swoole 协程模型详解:协程与线程/进程、调度、常驻内存及与 Go goroutine 的异同
后端·php
lazy H1 小时前
【计算机网络】第 12 篇:IPv6 详解——地址格式、地址类型与双栈网络
网络·经验分享·后端·学习·计算机网络·408
Rain的Java大神之路1 小时前
LeetCode 21 合并两个有序链表:一道 Easy 题,凭什么刷掉一半候选人?
java·后端·算法
w_t_y_y2 小时前
JWT(5)JWT+spring security
java·后端·spring
念何架构之路2 小时前
OpenTelemetry核心概念
后端·目标跟踪·golang·c#·linq
IT_陈寒2 小时前
Java项目实战经验分享:一次由JPA懒加载引发的生产事故
前端·人工智能·后端
环境栈笔记2 小时前
浏览器多开同步怎么做?先分清设置、登录态和窗口操作
前端·人工智能·后端·自动化