ddbs简介
本文从个人项目经历来说一点自己对ddbs的理解,包括催生ddbs的原因,ddbs的基本原理,其解决了哪些问题,还有哪些不足。欢迎大家讨论、斧正。
创新互联建站一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以网站制作、做网站、移动互联产品、成都全网营销服务为核心业务。10余年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
业务规模较小时,使用单机MySQL作存储。但伴随业务发展,存储容量和并发能力会有瓶颈。
首先,假设单机的硬盘为1.8T,也可以挂更大容量硬盘,但仍有限。
其次,单机的读写并发能力有限,假设峰值写入qps1000,峰值读取qps3000,网卡对读取时流量也有要求,单次访问的读取量不应过大。
单机的链接数也有限。
那么,当使用单机mysql的业务发展,受到以上瓶颈时,一般的思路会是什么呢?一台机器不行,用两台呢,再不行,扩展更多台。
一台扩展为两台,磁盘容量扩大了,通过分表,将表打散在不同机器上,共同承担写入任务,并发也提高了,感觉这个思路是对的。
那么在这个过程中,我们需要做什么?
业务发展到单机无法承受,即使在单机上,很多表应该也做过分表了。一般会根据业务选择分表键。单个表的大小mysql也有一定要求,一般存储量不大于1G,单条记录小一些,一般不超过1k,条数一般不超过1000万条,最多不超过5000万条,否则表的使用和维护效率都很低。假设业务已经做了足够多的分表,满足三年的数据增长需要,第一年过后,每个分表的条数达到200万条,整机存储容量使用了一半,此时我们想拆分为两台机器。
此时我们可以将原机器上部分表数据同步到新机器上,并在model层抽象一个路由层,将对数据库的操作发到不同的机器上,上层业务仍可以认为在使用单机。此时可以将原机器上不归属自己管理范围的表删除,腾出空间。
一台变成了两台,向分布式走了一步。此时存储容量和并发都提高了,由路由层管理两台机器。如果两台或今后的多台机器,并发数高于路由层处理能力怎么办?那还要把路由层机器也扩一下,把路由规则都写进去,大家按一个格则办事。
经过上面的一番折腾,数据库机器水平扩展,解决了单机存在的一些问题。在这个扩展的过程中,是否会对业务产生中断影响呢?
会有一点影响。至少在路由层改路由表时,会中断数据库的写入,读取此时可以不中断。
ddbs中,使用到的多台机器,都叫做分片。分片提高了系统存储容量和并发能力,引入分片,也是系统的复杂度提高了,需要引入路由层机器,路由机器也可能需要扩展,复杂操作,还需要添加更多逻辑功能。但至少可以可业务逻辑区分开,业务可以把ddbs当做单机在使用。
那么ddbs有哪些不足呢?
ddbs还是要基于分表、分片实现的。那么对数据库的任何操作,首要条件是需要指明操作的分表键。没有这个维度的准确值,就不能对数据库操作,当然除非是备用库,那你随便扫表,因为备用库可以转为冗余安全,不走线上流量,可以做统计任务。
单指明分表键还不行,还要注意操作的数据可能会分布在不同分表、不同分片中,这样的操作会引发ddbs产生大量并发操作,业务的一个请求就会占用多个机器多个链接,使ddbs得并发能力大打折扣。比如‘where 分表键 in ()’操作,这种操作要慎重,in中个数不可太多。
分表键最好选用×××,字符串型,可能hash后分配不均,表大小不均衡。
事物操作在ddbs中的实现,非常耗费系统性能。事务类操作需要路由控制层控制整个操作过程,期中可能涉及多个分片,多个不同的表的操作,对系统整体可用性要求高。
分享标题:ddbs简介
分享路径:http://ybzwz.com/article/pgsiee.html