阅读更多
最近根据多个应用使用阿里云DRDS( https://www.aliyun.com/product/drds)的情况,我这边做了一个比较入门的攻略,因为文档很多,全部看完不现实,但是用好这个产品有几个点还是需要非常清楚,否则可能会采坑。
一切的开始,需要了解这玩意到底是干什么的,推荐看下这个产品的概述 https://help.aliyun.com/document_detail/29659.html和产品的基本原理 https://help.aliyun.com/document_detail/29679.html
确认这个产品能够解决你的核心问题,接下来一个很重要的点是怎么用好这个产品,数据库产品我个人认为都是有坑的,只是坑大坑小,以及能否从坑里面爬出来的问题。
无论怎么滴,简单上手下看看,快速入门系列文档是比较合适的 https://help.aliyun.com/document_detail/50067.html
当你按步骤连上DRDS后,做了一些操作之后,其实你可能并不清楚到底发生了什么,如果这个时候马上去按照你的理解上业务表测试,可能就埋了坑,DRDS这个产品的表结构设计和单机数据库有一个很重要的区别在于:怎么拆。所以这个时候我推荐大家看下 https://help.aliyun.com/document_detail/51309.html这个文档以及 https://yq.aliyun.com/video/play/981这个视频,这个时间我认为花得是值得的。
当你了解这个产品最重要的点之后,接下来实际上是一个初始化测试环境,进行数据导入或者造数据的过程,你对资源一定很关心,怎么配比DRDS和RDS, 按照个人经验,DRDS可以从最低配规格开始,因为我理解这个产品本身没有状态,升配如同应用扩机器一样会比较方便,RDS的话测试环境1或者2个都行,生产可以参考 https://help.aliyun.com/document_detail/51307.html这个文档,但是有一点可能文档中没有提,需要考虑数据容量的问题,因为单个RDS目前最高2T,其实并不是说硬件问题,而在于到时你要做个备份、做个只读实例、做个容灾恢复,时间是以天来计的,所以个人建议,除非你要怼在一个RDS实例上天荒地老,否则如果程序能够改成拆分的,单个RDS数据量不超过1T为好。举个非常简单的例子,你有10T数据,我个人建议使用 10-15个RDS 解决问题,而不是5-6个。
另外最最重要的一点是,如果你想以后避免一些生产上的麻烦,建议选择8c16g(包含)以上的RDS节点,用一堆屌丝实例堆出来的分布式数据库,稳定性远不如规格比较大的实例。
当你把环境规划好,在做功能开发的过程中,建议能够看下这个产品的大部分文档,并且推荐看下 https://bbs.aliyun.com/read/313990.html这个帖子,乍一看吓一跳,但是能够把坑告诉你的产品是不多的,并且了解这些内容,对团队开发遇到问题的解决速度会有帮助。
功能开发完毕,很多应用可能会直接上线,我个人建议补充下性能测试,特别是核心场景。目前市面上提供的分布式数据库,即使功能兼容性再好,不做性能测试,是非常不靠谱的,很可能导致发布失败,因为有些物理原理上的问题是跨不过去的(按照目前大部分产品的架构和硬件而言),所以这个时候你会导入一些数据到DRDS中,可以参考 https://help.aliyun.com/document_detail/52131.html。
实际生产使用之前,你应该还会非常关心告警问题,虽然这个产品提供了监控告警,但是目前个人认为监控和告警指标还不够丰富,只有cpu, 并且监控指标聚合粒度比较大(5分钟),介绍可以看看 https://help.aliyun.com/document_detail/52009.html,但是很有意思的是,他提供了秒级统计的指令让我们可以有所发挥,参见这个指令的说明 https://help.aliyun.com/document_detail/52139.html,我为此还写过一篇文章使用grafana来做这个产品的秒级监控,参见文档 http://bucketli.iteye.com/blog/2397401,总体来说是有效的,里面包括 ERROR_PER_SECOND, FULLGCCOUNT,CPU都是值得关注的指标,ERROR_PER_SECOND有数值的话,你的应用是不正常的(排除VIOLATION_PER_SECOND),FULLGCCOUNT 不断在增张的话(几秒钟变化一次),那很可能SQL出了问题,CPU一直处于80%以上时,一个可能是存在大量数据导入导出或者数据处理,另外一个可能是应用流量过大等等,后续我专门写一篇文章对这些指标进行一下解析,这个指令整体来说是非常不错的。
当你经过性能测试或者真正上线功能之后,你会发现实际上DRDS适用的场景可能覆盖不了你的所有场景,从云栖大会来看,这个产品比较适合前台落数据的业务(当然如果后面能够把全局二级索引搞定那这类业务就能解决得更加好了),后台业务可能会碰到一些问题。所以你会需要把数据同步到其他数据库(包括单机数据库),去做一些报表分析之类的业务,这边推荐下云上数据集成工具(CDP,开源产品叫datax),参见他们对于DRDS使用的文档 https://github.com/alibaba/DataX/blob/master/drdsreader/doc/drdsreader.md 和 https://github.com/alibaba/DataX/blob/master/drdswriter/doc/drdswriter.md ,前者是从DRDS中抽取数据,后者是写入数据到DRDS. 不过这个工具没有增量比较蛋疼,因为DRDS底下基于RDS,所以实际上可以开多个binlog同步任务进行数据同步,这边还是推荐云上的 https://www.aliyun.com/product/dts 产品,当然如果你不想付钱,想自己折腾下,也可以使用 https://github.com/alibaba/canal 产品。对于数据导入导出,以及同步,个人认为都做得不够好,什么时候能够出一个通杀的产品呢?值得期待。
整体使用指南就介绍到这里,如果对DRDS产品你有一次比较成功的使用,我相信还是会比较爽的,至少个人认为如此。