Apache ShardingSphere是开源的分布式数据库增强计算引擎,通过在应用和数据库之间部署ShardingSphere-Proxy代理,来实现非应用侵入式的分库分表。
PolarDB多主集群(库表)通过将不同的逻辑数据库分散至不同的主节点(RW),来实现读写能力水平扩展。
ShardingSphere-Proxy结合PolarDB多主集群(库表),将数据通过ShardingSphere分散至多个数据库,再结合PolarDB多主集群(库表)实现读写能力扩展。原理图如下所示:

- 如果仅使用ShardingSphere,在需要提升数据库集群读写能力时,需要先使用传统数据库运维手段进行数据复制和备份恢复,再配合业务系统停写、规则切换、数据验证、业务系统恢复等步骤来提升数据库集群的读写能力,其中,数据库的运维操作尤为复杂耗时。
- 使用PolarDB多主集群(库表)之后,您可以省去绝大部分手工扩展数据库集群的工作,您只需要通过控制台或OpenAPI为PolarDB多主集群(库表)增加节点,然后在业务低峰期,执行ALTER DATABASE name POLARDB_WRITE_NODE x等操作,即可在数秒内将数据库集群的读写扩展到新增的节点上,大幅减少了数据库停写维护的时间,提高了业务系统的SLA。
PolarDB多主集群(库表)在执行ALTER DATABASE name POLARDB_WRITE_NODE x切换数据库所在的主节点时,目标数据库会有秒级的不可访问,显示为查询阻塞或获取表全局锁失败错误。如果能够在切换节点期间避免访问该数据库,或者避免访问该库的查询阻塞过久抢占访问其他库的资源,均可以减少切换数据库所在的RW节点时对业务的影响。- 切换节点期间,避免访问切换中的数据库。
ShardingSphere借助注册中心实现集群管理,在/metadata/${schemeName}/dataSources路径下,记录了一个逻辑库的数据源。ShardingSphere会感知该路径值的变化,并动态更新和重建相关连接池。通过联动注册中心配置变更和PolarDB进行多主集群(库表)的弹性扩容,先禁用指定的数据源,再执行ALTER DATABASE,最后再恢复数据源。您可以将业务影响控制在预期范围(只影响与需要迁移的数据库相关的查询)的情况下获得接近线性的数据库读写能力扩展。 - 切换节点期间,避免访问切换中的数据库时查询阻塞过久。
使用JDBC URL配置ShardingSphere的数据源,您可以在URL中配置connectTimeout和socketTimeout参数。通过将这两个超时时长配置为500ms,也可以使访问到正在切换的数据库的查询,尽可能快地超时失败,从而释放线程和连接资源去访问其他数据库。
- 切换节点期间,避免访问切换中的数据库。
ShardingSphere-Proxy的config-sharding.yaml配置文件中可以配置数据源,建议将每一个分库都配置成一个数据源,同时在JDBC URL中配置connectTimeout和socketTimeout参数,结合业务的属性和系统所在网络环境设置合理的超时时间,例如:
- 如果ShardingSphere-Proxy和PolarDB多主集群(库表)部署在同一地区,且网络RTT较低,则connectTimeout可以设置为5~10s。
- 如果业务是以在线事务为主,大部分的SQL查询都能够在1s以内返回数据,则socketTimeout也可以设置为5~10s。
一般情况下,可以借助监控系统来合理规划超时时间,将超时时间设置为业务查询耗时P99的3倍左右,既可以避免影响正常的业务查询,又可以避免局部故障阻塞过久影响整体业务。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




