阿里云RDS

阿里云RDS

但是那些 RDS 用户的数据量也是在持续增长的,对于云服务提供商来说不能眼睁睁的看着这些 RDS 用户数据量一大就走掉或者自己维护数据库集群。因为也不是谁都能彻底重构代码到 NoSQL 之上,并且分库分表其实对于业务开发者来说是一个很痛苦的事情,在痛苦中往往是蕴含着商业机会的。

比如对于 RDS 的扩展方案,我介绍两个比较典型的:第一个是阿里云的 DRDS (不过现在好像从阿里云的产品列表里拿掉了?),DRDS 其实思路很简单,就是比 RDS 多一小步,在刚才提到的 RDS 的中间层中加入用户配置的路由策略,比如用户可以指定某个表的某些列作为 sharding key 根据一定规则路由到特定的实例,也可以垂直的配置分库的策略。

其实 DRDS 的前身就是淘宝的 TDDL,只不过原来 TDDL 是做在 JDBC 层,现在将 TDDL 做进了 Proxy 层(有点像把 TDDL 塞到 Cobar 的感觉)。这样的好处是,将应用层分库分表的工作封装起来了,但是本质上仍然是一个中间件的方案,尽管能对简单的业务做到一定程度的 SQL 兼容。

对于一些复杂查询,多维度查询,跨 Shard 事务支持都是有限了。毕竟中间路由层对 SQL 的理解有限,至于更换 Sharding key 、DDL、备份也是很麻烦的事情。从 Youtube 开源的中间件 Vitess 的实现和复杂程度来看甚至并不比实现一个数据库简单,但是兼容性却并没有重新写一个数据库来得好。