早期阿里巴巴数据库去 O 时,在电商场景选择了 MySQL 方案。随着淘宝业务增长,MySQL 从单实例又演变为分布式中间件加MySQL。早期淘宝的数据库中间件内部叫TDDL,主要功能是分库分表和简单SQL路由,不支持分布式事务。TDDL 的形态是 jar 包,部署在应用服务器上(应用也主要是 java 应用)。其中分库分表规则保存在一个独立的 MySQL 中并由一个单独的应用提供接口去读取和修改规则。当数据库里表和库信息发生变化时(新增表和修改表结构、分表扩容、数据库和实例数量扩容),这个应用会负责将最新的分库分表规则推送到所有应用服务器节点。当然应用服务器规模也越来越大,这其中可能也有一些主动拉取和缓存的机制来减轻元数据应用的压力。不过随着分库和表的规模越来越大时,规则的推送和拉取终究会面临一个性能瓶颈(超时)。所以理论上分库分表的规模也不是无限大。在 2016 年最大的分库数量是 256 个,最大的分表数量是 4096 。这是历史上多次扩容的结果(扩容简单就是分表数量和分库数量分别独立的翻倍,这也是由 MySQL 单实例的能力决定的)。就这样一套架构,支撑了很多年的天猫双十一大促活动。所以它是经得起考验的。
当 TDDL 产品要对外输出时,这种部署在客户端的中间件就不适合外部客户,所以产品又推出了服务端的中间件(DRDS SERVER),即通过一组无状态的应用(部署在 Docker 或 ECS 里)进程提供分库分表和 SQL 路由功能,并在后期还实现了对分布式事务的支持。这就是阿里云数据库产品的DRDS。其他云厂商也陆续推出各自的 DRDS 产品。在云上的 DRDS 产品功能是最全面丰富的,在私有云推出的 DRDS 功能会显得相对不足。这其中的挑战就是 IAAS 层的变化给运维带来的困难。DRDS 架构是计算和存储分离。计算节点是一组无状态的应用进程( JAVA 开发),存储节点是一组 MySQL 实例。这里面涉及到应用的部署和启动、MySQL 的安装部署以及高可用等等,要求运维既要懂 Java 又要懂数据库,所以使用起来非常困难,后来 Docker 和 k8s 容器技术极大缓解了这个问题。只是客户端服务器要能保证一定的CPU和内存资源。
阿里云后来将 DRDS 品牌升级为 PolarDB-X,并进一步完善了其SQL和事务能力。如今的PolarDB-X 对用户确实实现了分库分表的透明,用户使用就像使用一个单实例数据库一样。不过PolarDB-X 也保留了高级用户自定义分库分表规则的用法。PolarDB-X 分为两代。第一代就是DRDS,第二代加入了很多云原生特性。这里引用官方的介绍:PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。更详细的特性介绍可以查看官方文档:https://docs.polardbx.com/ 。本文后面主要是实操记录和分析。
还没有评论,来说两句吧...