天天看点

《MySQL DBA修炼之道》——1.2MySQL 的基础架构和版本

本节书摘来自华章出版社《mysql dba修炼之道》一书中的第1章,第1.2节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2.1 软件架构中数据库的定位

数据库一般位于整个软件架构的后端,而不直接服务于用户,数据的展示、应用逻辑的处理都是由其他层次的程序来实现的。比较流行的一种软件架构的分类是“双层”、“三层”、“多层”架构。客户端直接和数据库服务器通信,比如通过odbc、jdbc连接数据库,一般称为“双层架构”或“client-server”架构。若客户端和数据库之间有一个中间服务器(如web服务器,中间件),则由中间服务器负责转发请求给数据库服务器,这种模式称为“三层架构”。在很多较大规模的web应用中,在web服务器和数据库服务器之间还可能存在一个应用服务器,这种结构称为“四层架构”。

本书探讨的mysql是基于目前互联网最常见的架构,如,网站应用、移动互联网应用。它们一般是三层架构,这三层架构分别如下。

1)用户接口层,即各种终端,比如,运行在最终用户计算机上的浏览器。

2)业务逻辑和数据处理层,即应用程序服务器,比如,php、java ee、asp.net、ruby on rails等应用服务。网站处理网络访问请求的过程可能是这样的:由nginx接受用户请求,处理静态页面,并且将动态请求转发给后端的php服务,php服务处理完动态请求后,将结果返还给nginx,nginx再返还给用户。有时也称该层为中间件(middle ware)。

3)dbms,即后端数据存储,如mysql、postgresql、redis、memcached等产品。

相应地,在软件系统架构设计中也存在一种分层设计的方法学。我们熟知的三层架构(3-tier application)是一种应用广泛的分层设计,它把应用分解为表现层、业务逻辑层、数据访问层3个层次。三层(多层)架构主要的好处是提供了一个灵活的、可重用的模型,开发者可以通过简单地修改某一层的功能或增加某一层的功能来实现某种需求,而不需要修改整个应用程序。

表现层(ui),即直接和用户交互的界面。

业务逻辑层(bll),即对业务逻辑进行处理,处理用户的请求,它将许多最终用户的业务逻辑集中到了应用服务器上。

数据访问层(dal),直接操作数据库,即针对数据的增加、删除、修改、查找等

操作。

传统行业的商业数据库往往还承载了许多业务逻辑的功能,这其中就会经常用到存储过程、触发器。互联网世界的开源数据库虽然也有存储过程、触发器之类的特性,但绝大部分场合下并不会用到这些非核心的基本特性,开发者把数据库更多地看作一个存储数据的容器,并已将核心业务逻辑从数据库功能中分离了出来。

本书主要是讲述mysql的使用,由于mysql的优化与软件整体架构的其他组件的关系密切,所以对于web服务器、缓存产品、队列等产品,也会做一些简单介绍。作为一个合格的dba,有必要了解各种应用服务的运行机制,以及是否需要对它们进行优化。

1.2.2 mysql的基础架构

mysql是一种关系数据库产品。关系数据库,顾名思义,是建立在关系模型基础上的数据库。现实世界中,实体与实体之间的各种联系一般都可以用关系模型来表示。经过数十年的发展,关系数据库在理论和工业实践中都已经很成熟了。

数据库产品的架构一般可以分为应用层、逻辑层、物理层,对于mysql,同样可以理解为如下的3个层次。

应用层。负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应它们的请求,返回数据和控制信息(错误信息、状态码等)。

逻辑层。负责具体的查询处理、事务管理、存储管理、恢复管理,以及其他的附加功能。查询处理器负责查询的解析、执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交由计划执行器来执行,执行器有时需要访问更底层的事务管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事务管理、并发控制、存储管理。这其中,将由事务管理器来确保“acid”特性,通过锁管理器来控制并发,由日志管理器来确保数据持久化,存储管理器一般还包括一个缓冲管理器,由它来确定磁盘和内存缓冲之间的数据传输。

物理层。实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。

图1-1是mysql官方文档的一个基础架构图,其中connectors可以理解为各种客户端、应用服务;connection pool 可以理解为应用层,负责连接、验证等功能;management services & utilities、sql interface、parser、optimizer、caches & buffers、pluggable storage engines可以理解为数据库的大脑——逻辑层;最下方的files& logs可以理解为物理层。

《MySQL DBA修炼之道》——1.2MySQL 的基础架构和版本

图1-1 mysql的基础架构

1.2.3 mysql的版本及特性mysql支持的平台

mysql支持目前市面上的大部分平台,包括32位和64位平台,一般情况下程序运行在64位平台上比32位更快。mysql支持的平台如下所示。

solaris

linux

windows

aix

mac os

hpux

mysql许可协议?

oracle以双重授权(dual licensed)的方式发布mysql,它们是gpl和商业许可协议(commercial license)。如果你在一个遵循gpl的自由(开源)项目中使用mysql,那么你可以遵循gpl协议使用mysql,无论是否将其用作商用。

如果某些商业软件中结合了mysql或修改了mysql源码,但又不愿意按gpl协议公开软件源码,那么就必须和oracle公司达成商业许可协议。简而言之,如果你违反了gpl,则需要购买商业许可。

gpl授予用户以下权利。

以任何目的运行此程序的自由。

再发行复制件的自由。

改进程序,并公开发布改进内容的自由。

需要注意的是,gpl只限制了对外分发的软件,也就是说,如果该软件只在内部使用,无论开不开源都没有关系。如何使用开源软件并不受gpl的约束,只有在你基于开源软件,修改开源软件的源码时才受 gpl约束,如果你的应用程序只是用到了mysql,无论是否商用,都不需要考虑开源。

mysql版本

mysql目前可分为4个版本:mysql社区版、mysql标准版、mysql企业版、mysql集群版。

(1)mysql社区版

可免费下载使用的开源版本,遵循gpl协议,包括如下的这些特性。

可插拔的存储引擎架构

多存储引擎支持innodb、myisam、ndb(mysql cluster即采用ndb存储引擎)、memory、merge、archive、csv等

复制

分区

存储过程、触发器、视图

信息数据库(information-schema)

mysql连接器

mysql工作台(mysql workbench)

目前已经发布了mysql 5.0、mysql 5.1、mysql 5.5、mysql 5.6、mysql 5.7一共5个ga版本。一般来说,后面的版本比前面的版本功能更强、扩展性更好。

以下3个版本是给商业用户使用的,商业客户可灵活选择多个版本,以满足特殊的商业和技术需求。

(2)mysql标准版

和社区版差别不大,提供社区版所支持的各种特性。

(3)mysql企业版

mysql企业版提供7×24小时的技术支持服务,用户可直接联系mysql专业支持工程师,获取关于mysql应用程序开发、部署和管理的全方位支持。

mysql企业版提供了更全面的高级功能、管理工具和技术支持,例如:mysql企业级备份可为数据库提供在线“热”备份,从而降低数据丢失的风险。它支持完全、增量和部分备份,以及时间点恢复和备份压缩。

mysql线程池提供了一个高效的线程处理模型,旨在降低客户端连接和语句执行线程的管理开销。

mysql企业级安全性提供了一些立即可用的外部身份验证模块,可将mysql轻松集成到现有的安全基础架构中。

其他特性还有mysql企业级审计、mysql企业级监视器(mysql enterprise monitor)和mysql查询分析器(mysql query analyzer)等。

mysql的一些新特性出现在了企业版中,但并没有出现在社区版,这导致很多人对于mysql产生了疑虑,但mysql的生态已经建立成熟,官方版本和其他分支也都在稳定地发展改进中,一般的中小公司选择社区版本即可。一些行业、领域要求更好的服务,更高的稳定性,或者有其他复杂的业务需求,对于它们企业版是一个很好的选择。

(4)mysql集群(mysql cluster)版

oracle收购mysql之后,对mysql cluster做了大量改进,这也是oracle力推的产品。集群版是一种分布式、无共享(share-nothing)的架构,也就是说把数据分布在各个节点的内存里。据官方宣称,集群版可比单机数据库提供更高的可用性,高达99.999%。它还有一些好处,比如自动分片、动态添加节点、支持跨idc复制、减少维护成本等。但这个产品比较复杂,国内也缺少精通mysql cluster的专家,如果一定要使用,建议做好充分的测试验证工作。

据说现在的mysql cluster版本已经允许存储部分数据到硬盘上,但由于主要数据需要存放在内存中,因此其部署成本会比较高。另外,随着mysql cluster节点的增多,节点之间通信、同步的代价也越来越大,所以其扩展性也是有限的。对于海量数据,mysql cluster可能不是很好的方案,从理论上来讲,仅仅把热点数据加载到内存是更经济的做法。

1.2.4 mysql的开发周期

oracle公司是一家成熟的商业公司,拥有一流的工程能力和执行力,自收购mysql以来,就增加了相应的开发人员,并且提供了更成熟的开发模式,目前mysql的开发进度比收购之前高了很多,许多第三方的优化补丁也都在官方版本中得到了实现。而之前mysql的400多名开发人员分布在25个国家,70%的开发人员在家工作,导致了交流沟通不畅,产品开发进展缓慢。

目前mysql的发展路线更清晰,开发周期大致分为4个阶段。

1)新特性开发。

2)发布实验室版本。

实验室版本可以提前预览到一些正在开发的特性,供用户试用,但是不保证这些特性会被整合到里程碑版本和ga版本。

3)发布里程碑版本(development milestone releases)。

这个时候的版本称为rc(release candidate候选)版本,有充分的文档支持,在所有支持的平台上发布,可以让用户试用,以收集反馈。一般平均3~6个月发布一个dmr(里程碑版本)。

4)发布ga版本(generally availability releases)。

ga版本是建议用于生产系统的版本。一般18~24个月为一个周期。