【IT168 资讯】众所周知,百度的访问量在所有中文网站中估计是最大的,面对如此庞大的访问量,百度数据库优化面临着许多难题,如:1、数据量大,访问量高,并发量大,每天的PV大概在100亿以上;2、开发周期紧;3、产品线和业务种类繁多;4、数据库本身存在BUG,由于上述原因导致影响被放大;5、业务上对数据库的要求较高。尽管有上述困难,但是百度做到了,几十倍的提升了产品线整体性能,增强了用户体验,节约了大量成本,并且,数据库优化逐步成为体系化、系统化。那么他是怎么做到的呢?今天李京生将给我们分享百度的经验。
▲百度高级DBA 李京生
百度数据库架构三阶段:分散式、集中式、分布式的发展过程就是架构优化的过程。优化的过程不同,是因为不同时期有不同的困难,针对不同的困难,会产生不同的优化方案。不仅局限于一类型的数据库,要根据不同的业务特点选择不同种类的数据库。甚至有时候,完全可以去定制架构。
Transfer示意图
比如说百度的Transfer,这是几年前的一个案例,其要求访问量巨大,实时性要求比较高,而且不能使用RAC。针对这种情况,百度的数据库管理人员专门设计了Transfer。其可以同时生成多个数据相同的主库,同时提供服务;其本身具备完整的冗余,确保这种优化机制不出现新单点;当然Transfer是为了满足特定产品线要求产生的,有它的局限性和限制。
建模优化
▲拆库优化示意图
建模优化现在主流的优化手段是拆库,但是如果发现拆库之后还需要拆库怎么办呢?首先我们要在拆库之前预测拆库之后的性能,计算拆库之后要提供多少年的服务,预测数据量达到多少。要解决这些问题,必须要做验证,1、可以通过QBS去判断;2、可以通过服务器性能去测试。而如果拆库之后性能不达标,还需要拆库,则可以通过一致哈希校对去减少拆库的损失。
SQL优化
很多时候,通过SQL优化可以解决很多问题,同样,百度也很重视MySQL的优化。但是,因为SQL是一个开源的数据库,有众多的版本,有很多的思想,但是怎么去统一思想呢?1、建立准入机制;2.数据库业务设计准则;3数据库运维设计。当然仅有这些还不够,还需要引入评审机制,1、评审流程;2、评审的各技术标准。
最重要的是需要考虑系统化的去优化,而不能总靠人工去优化,数据库调优系统对SQL优化,乃至整个数据库优化具有重要意义。
硬件优化
▲使用SSD优化示意图