【IT168资讯】由IT168(ITPUB、IXPUB、ChinaUnix)主办的2012中国数据库技术大会(DTCC)于(以下简称大会)2012年4月13日~15日在北京永泰福朋喜来登大酒店隆重召开。大会将针对大数据架构设计、数据库安全、分布式数据库、商业智能、NoSQL、Hadoop等多个重点话题进行深入探讨。此次大会得到了全国数据库技术高手们的高度关注与支持,是当前象征最高技术水平的数据库工程师盛会。
目前业界正在面临最大的难题,面对的数据量在爆炸性的增长,用户对互联网服务提出了更多的要求,因此在背后的架构上都是很大的挑战。随着数据库流量和服务器数量增长,数据库集群面临很多的问题,如何实现应用程序和集群的解耦,降低运维成本?如何实现数据库服务的高可用?如何将并发控制前移,保护数据库系统?如何降低数据库开发的成本,用中间曾实现基本的技术,降低了开发成本。
▲百度高级DBA 数据库Topic技术负责人尹博学
本节课上,百度高级DBA 数据库Topic技术负责人尹博学给到场的开发者介绍了百度数据库中间层技术,主要包括百度数据库中间层的整体设计、主要功能模块的实现策略、性能方面;同时就百度数据库集群所面临的问题、从这些问题中抽象出的对数据库中间层的需求同大家进行深入的探讨。
百度运维部DBA组负责百度所有数据库服务管理工作,是百度服务核心数据的提供者和保障者,是维护服务稳定的核心力量;涵盖数据库设计、评审、SQL代码REVIEW;数据库核心组件及平台的规划、设计、开发工作;使百度的数据库更稳定、更高效、更易于管理。
所谓三层体系结构,是在客户端与数据库之间加入了一个中间层。三层体系不是指物理上的三层,不是简单地放置三台机器就是三层体系,三层是指逻辑上的三层,即使这三个层放置到一台机器上。三层体系结构的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过与中间层通讯建立连接,再经由中间层与数据库进行交互。
在三层结构中,数据计算与业务处理集中在中间层,只有中间层实现正式的进程和逻辑规则。数据库中间层的定义:屏蔽集群内部细节,MysQL集群读写分离,连接池,负载均衡,访问控制,可集群化的部署,运维关键要求:支持高并发和低延迟,对数据库应用透明。
▲百度数据库集群的三层架构
▲百度Dbproxy逻辑框架设计
由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费,而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。
Dbproxy负载均衡策略:1基本算法是基于数据库当前连接数的。2新建连接选取集群中同类角色中“当前连接数/权重”最小的数据库。
▲Dbproxy支持并发设计
连接池是数据库开发中最重要的策略
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
主要用于以下方面:1构建有与MysQL连接池,提升性能。2、连接池有三级hash策略,保证取到的连接可以正确的使用,包括read/write,用户权限,连接属性,如client_found_rows等(include/mysql_com.h)。
百度在Dbproxy做了四个方面的开发工作
1配置信息热加载。2支持连接多个数据库集群。3、将自身压力信息准确的输出。4流量控制,不至于压垮数据库。
Dbproxy对应用程序透明策略
1、MySQL clientserver protocol。2、数据库(MysQL)某系统特性。3、各种语言的MysQL API,各种MysQL的连接框架的特殊行为。
Dbproxy提高性能的策略
1. 减少延长。通过进程+状态机的模式,无锁,nonblock,网络操作都是就绪之后才能执行。对于大结果集的接收,采用了非连续接收的模式,减少其他链接的等待。
2. 提高 并发处理能力。支持多个dbproxy工作进程监听一个端口。