1、私有云数据库实践之道数据库发展的两个方向 云数据库很多人认为云数据库是一切数据库问题的灵丹妙药,性能不足,用云数据库。稳定性差,用云数据库。扩展性差,用云数据库,等等。云数据库当然没有这么万能,在构建云之前,要先搞清楚云数据库可以解决哪些问题、不能解决哪些问题。简而言之,就是要先明白云数据库是什么。为了彻底搞清楚这个问题,我们先从当前数据库发展的两个方向入手,从数据库的发展之中,梳理云数据库是什么,以及云可以解决什么问题、不能解决什么问题。数据库发展的两个方向 更 快NoSQL、无事务、弱一致性(最终一致性)、分布式,等等特性,最终目的只有一个,更快的响应时间、更短的耗时。 更 便 捷功能更强
2、,使开发更容易。更自动,运维更便捷。获得数据库更容易,也就是安装、建库这些初始化操作更简单。简而言之,最便捷的方向,就是让数据库的用户(开发、测试等人员),可以更便捷的使用数据库。数据库发展的两个方向:更快 更 快,NoSQL:更快和更便捷是背道而驰的,有时候为了性能,不得不牺牲简便性。SQL就是典型的例子。比如简单的Key、Value查询。根据Key值,计算Hash值,根据Hash值,直接定位到数据(也就是value),简单而快速,有不少NoSQL的数据库,使用Key、Value的方式存储、读取数据。假如数据的存储格式非常简单,可以用Key、Value的形式表达,但如果加上一层SQL,但每次
3、操作数据,依然要解析SQL、判断使用何种索引、生成执行计划,然后才能开始搜索数据。步骤繁多,每一步都要有各种锁保护,每一种锁都可能产生竞争。因此总体性能不如NoSQL更快。数据库发展的两个方向:更快 更 快,NoSQL:但是,如果批量读取一部分数据,按某些列做group by操作,对SQL来说,只要加一个group by子句就可以了。对于key、value型数据库来说呢,要读出数据之后,自己在应用层实现这个功能了吧。这样一来,肯定会拖慢开发者开发应用程序的进度。NoSQL,从某些层面上讲,是用开发时间,换响应时间。用更大的工作量,换取更快的速度。数据库发展的两个方向:更快 更 快,无事务:事务
4、的消耗更大。以Oracle/MySQL InnoDB为例,要修改一行,先要把行读取UNDOBlock中,还要为此产生UNDO Block的Redo。才能真正修改行。PostgreSQL,虽没有UNDO,但修改行时,先把行复制到另一位置,原来的行标记为过期。在事务提交后,过期的行还要清理。如果没有了事务,要修改数据,直接修改即可。最多为了恢复,先生成条Redo而己。没有了UNDO,或过期行清理等问题,减少数据库的消耗、和复杂性,从而提高性能。数据库发展的两个方向:更快 更 快,弱一致性:采用弱一致性,也是为了性能,不得已做出的牺牲。弱一致性包括两点: 一是分布式中的最终一致性,为实现分布式中跨库
5、事务的强一致性,通常都是两/三阶段提交。但两/三阶段提交的耗时问题无法解决,耗时太久。使用最终一致性,则不必再用高耗时的两/三阶段提交。响应时间大大提升。(关于最终一致性详细讲解,可以参考15年系统架构师大会我的PPT:“去IOE关键技术分析”) 二是,出现灾难时的崩溃恢复,很多时候,应用是允许少量数据的丢失。不必一定要做到万无一失。万无一失的强一致性,要求数据库在正常运行的做更多工作,产生更多额外开销,因此影响性能。数据库发展的两个方向:更快 更 快,分布式:分布式:减少单库、单台主机数据量。数据量减少,对应的访问量就下降,负载下降,响应时间就可以上升。就好像我们的一线城市,两千万级的人口,
6、结果都变成首堵和魔堵。分布式就是把两千万级人口,分布到100个城市,每个城市只有20万人,拥堵问题立马解决。数据库发展的两个方向:更快 总 结 :“更快”这个方向,总体思路就是,给现在复杂的数据库作减法,抛弃一些功能,或者将一部分可以在应用层实现的功能,转移到应用层。正如前文所述,“用开发时间,换响应时间。”用更大的工作量,换取更快的速度。鱼和熊掌不可兼得,想要更快,必然要舍弃一些便捷性、带来工作量上的增加。所有增加性能的特性,和便捷性,都是背道而驰的。很多都要增运维成本、开发成本。数据库发展的两个方向:更快 总 结 :极致快速的数据库,并不是每一个企业、每一个应用、每一个数据库所追求的方向。
7、强一致的事务,也不是每个应用都需要。事实上,大多数应用都不需要事务。完全不丢失任何数据的数据库,也不是每个数据库的必须条件。很多应用、很多情况下,都允许崩溃时有少量数据丢失。在满足性能的情况下,更便捷,更敏捷的支持应用不断的上线、变化等等,在这个不断变化、一切都要敏捷的时代,是很多应用、很多企业的另一个选择。这就是数据库的另一个发展方向:更便捷。数据库发展的两个方向:更便捷 更 便 捷 的 目 标也是为了“快”,但不是性能快。而是为了整个应用项目更快速的上线、更快速的迭代、更快速变化、。数据库发展的两个方向:更便捷 更 便 捷 :功能强数据库功能更强,应用所需要的实现的功能就更少,开发可以用更
8、少的代码,实现某个需求,应用的开发周期就可以更快。 更 便 捷 :更自动无论那个企业,数据库的数量总是会越来越多,当数据库数量在到一定规模后,即使是普通的运维工作,纯粹依赖人工,也会十分麻烦。比如要检查100个库的表空间是否足够,单是登陆100个数据库,都需要多久时间!自动化,也是更便捷的发展方向之一。数据库发展的两个方向:更便捷 更便捷:数据库的获得更简单建一个数据库,从DBA的简单来说,不是什么难事。放到企业环境,建一个可以给开发、测试等人员使用的、符合一定标准的库,步骤就有点繁多了。要涉及多个部门的协调,这要耗费不少时间。数据库发展的两个方向:更便捷 数据库的获得更简单考虑一个场景,产品
9、经理和架构商定好一个新应用,需要一个独立的数据库环境,他们审请购置了一台物理机,需要上架并安装数据库,需求提给运维。根据我的经验,完成这个流程通常需要以下几个步骤:1. 机房管理人员,上架、配置网络。2. SA安装系统。3. DBA安装、配置数据库,并进行初步调试。数据库发展的两个方向:更便捷这三个步骤,每个步骤至少需要几天、甚至是一周才能完成。虽然这些都是简单的操作,但运维人员不是24小时待命只为这一个项目服务。你的需求进入运维人员的工作队列后,他们还需要分配人员、然后才能开始开活。而且这三个步骤,分属三个团队、三拔人,网络、SA、DBA。他们互相之间再进行协调,简单说吧。根据我以前的经历,
10、这个过程需要两周到一个月时间。具体要看运维人员当时忙不忙。很多时候,一个项目的开发周期,也不过才个把月时间,但是折腾一个数据库,都已经用去了几周到一个月,还能说获得一个数据库简单吗?数据库发展的两个方向:更便捷对于DBA来说,“获得数据库”不是什么问题,大不了占用自己半天、一天时间。但是,跳出DBA、从整个产品、项目角度,“获得数据库简单化”,是当前数据库发展最需解决的问题。数据库发展的两个方向:云的方向 云数据库的方向刚才已经梳理了“更快”和“更便捷”这两大数据库发展的方向,其实“更便捷”也是为了快,只不过不是性能快,而是项目周期更快,更快的迭代。在更快、和更便捷之中,云,或者说云数据库,属
11、于那个方向。云技术,主要解决性能问题,还是为我们提供方便性、更快项目迭代周期呢。我们以一个公有云为例子,看一下公有云数据库的使用感受。数据库发展的两个方向:云的方向数据库发展的两个方向:云的方向对DBA来说,整个过程可能没什么感觉。对开发、测试等数据库用户来说,“获得一个数据库原来这么容易啊”。再也不用一遍的发邮件、发消息催促SA、DBA。数据库发展的两个方向:云的方向 云数据库的方向“点点鼠标,做做选择”,就有了一个数据库。通过阿里云,显然我们可以得出结论,云数据库方向是:“让用户方便、快速的获得一个数据库”这不单是公有云的方向,也是私有云的方向。数据库发展的两个方向:云的方向 容器数据库:
12、CDB(Container DataBase)了解了云数据库的主要方向,再来看看Oracle 12C后的主要特性:容器数据库(CDB与PDB)。 就不难理解为什么Oracle要称这是重要的变革了。以前Oracle的版本迭代,最大的变革都是在性能方面。更智能的SQL优化器、更细粒度的锁(比如Mutex)、更优化的事务流程(比如InMemeory Undo)。CDB与PDB刚发布的时候,很多DBA人觉得有点莫明其妙,不知道它是干什么的。它用来解决一个重要问题的:简单快速的获得一个数据库。数据库发展的两个方向:云的方向 容器数据库:CDB(Container DataBase)在容器数据库中,数据库
13、整体称为CDB(母体)。每个母体中,可以插入N个独立的数据库,也就是PDB 。每个PDB都是完全独立的数据库,可以拔出、插入任何一个母体:CDB 。数据库实例主旨思想:“在一个数据库实例中,塞入N个数据库”。SGA 首先要明确一点,每个PDB,都是一个独立的数据库。CKPTDBWRLGWRPMONRedo File 控制文件 所有PDB共享同一块SGA内存,和一系列的后台进程。这被称为:实例共享PDB1: PDB2: 每个PDB有独立的SYSTEMSYSAUXUNDOSYSTEMSYSTEM/SYSAUX、UNDO表空间和数据文件。 但共享控制文件和Redo文件。SYSAUXUNDO其他表空间
14、 其他表空间数据库发展的两个方向:云的方向 容器数据库:CDB(Container DataBase)“每一个PDB,都是一个独立的数据库。”数据库的范围被缩小了,提到数据库,不再包括各种内存池、各种进程等。数据库不再包罗万象,一个数据库只是一个PDB。虽然对DBA来说,一个PDB,还不是整个数据库整体。但在用户(数据库的使用者,开发、测试、架构等)眼中,一个PDB,就是一个完整的、独立的、属于自己的数据库。数据库发展的两个方向:云的方向 容器数据库:CDB(Container DataBase)数据库的范围被缩小之后,获得一个数据库(现在叫PDB)的步骤,非常简单化了:创建一个数据库(PDB
15、):SQL CREATE PLUGGABLE DATABASE pdbtest1ADMIN USER dba1 IDENTIFIED BY afile_name_convert=(/export/home/oradb/oradata/CDBV3/pdbseed/,/export/home/oradb/oradata/CDBV3/pdbtest1/);一条命令,就能得到一个数据库。数据库发展的两个方向:云的方向 容器数据库:CDB(Container DataBase)使用Python的Web模块Django,或Flask。做一个前端页面,让用户在页面选择空间大小,再点下确定按钮,后台执行条“C
16、REATE PLUGGABLEDATABASE”命令,一个数据库就建好了。这就是私有云数据库的雏形,可以让用户快速的获得一个数据库。数据库发展的两个方向:云的方向使用云数据库的方式,对开发、测试来说,数据库就像一种服务,在Web界面中选择自己所需的服务,马上就能得到一个数据库。前文中的场景,产品经理、架构申请数据库,在云化方式下,步骤如下:1、用户(产品经理、架构)自己到一个系统中,在网页上选择所需要的数据库配置。磁盘大小、内存大小、是偏运算型还是偏I/O型。2、选定后点击创建,一个独立的数据库系统就创建好了。从用户开始选择、点击,到数据库系统生成、交付使用,整个过程仅需要不到半个小时。这就是
17、云数据库的主要作用。云数据库的定义 云数据库的定义云数据库的定义,可以用一个名词做总结:“数据库即服务”,也就是DBaaS,“DataBase as a Services”。云数据库就像水、电这些基础设施一样,打开水笼头、插上插头,就有了一个数据库。云数据库并没有太多让DBA激动的特性,比如像智能的SQL优化器、Mutex、IMU、读不阻塞写的Latch等。云数据库,更多是从架构角度出发,为了整个项目服务。而不是为了解决某一种性能问题。云数据库的定义 云数据库的特性:除了“数据库即服务”,云数据库还要具有如下特性:资源限制:云数据库系统中的每一个Cloud DB(云库),都不会独占一台物理机(
18、甚至都不会独占一台虚拟机),大家都挤在一起,如何避免互相的影响。这就需要资源限制或隔离,以减少各个云库之间相互影响。云数据库的定义 云数据库的要求:免运维:免运维并不是不需要运维,而是不能让客户自己去运维。数据库的生成现在是按需分配、由用户自已发起。但备份、恢复等基础运维什么的,也让用户自己去做的话,没有用户会去使用这套云数据库系统。当然,SQL层面的事情,还要用户自己做。自动化:数据库数量会快速增加,就算是企业内的私有云数据库,数据库数量快速增加到几百、上千个也是有可能的。随之而来的监控、基础运维(空间不足需要加空间了等工作)、高可用、 灾备,会随着规模的不断扩大,而变的越来越难以为继。因此
19、自动化是必须的。云数据库的作用 云能提升性能吗云数据库,能提升性能、加快响应时间吗。云数据库不是干这个的。云数据库的作用 云能提升性能吗分布式、降低要求(使用弱一致性、最终一致性)、去掉SQL(NoSQL)、去掉事务等等,这些是为了加快响应时间的。它们在加快响应时间的同时,也加大了开发、运维的工作量。而云数据库,是在架构角度,为了整个项目更“快”(更快上线、更快迭代)。云数据库的作用 云能提升性能吗以汽车为例,极致快速的数据库,就像专业的赛车,性能良好、速度超快,但维护成本高。不是有钱人玩不起。但大多数情况下,我们不需要极致快速的速度。云数据库就是为普通情况下准备的汽车,它可以快速、较低成本的
20、获得,也不需要用车的人怎么去运维。但,你想用的时候就会有。云与分布式的区别 云与分布式的区别使用云数据库,你将会有很多个库。分布式数据库,你也将会有很多个库。从库的数量上来说,它们都会使数据库数量大大增加。因此很多人会混淆它们的区别。数据库发展的两个方向:云与分布式的区别 云与分布式的区别分布式数据库,往往是将一张大表,切割存放到多个数据库中。这样单个库数据量大大减少、访问量也随之减少,响应时间可以更快。拥堵大大减少,速度自然大大提升。数据库发展的两个方向:云与分布式的区别 云与分布式的区别云数据库的作用,是从整体项目角度出发,在不明显增加DBA工作量的情况下,为架构、开发、测试人员更便捷的获
21、得、使用数据库提供便利,从而缩短项目开发周期、减少上线风险。二者虽不同,但也有交集。一套分布式数据库系统,需要大量的主机、数据库。可以云化的方式分配、管理分布式数据库系统的主机和数据库。数据库发展的两个方向:分布式云数据库系统架构应用层应用层中间件层云数据库层DB DB DB DBDB DB DBDBDB DBDB云主机层物理层数据库发展的两个方向:分布式云数据库系统架构转发SQL,聚合查询应用层应用层结果。把下层的N个数据库,聚合在一起,让上层应用认为下层只有一个数据库。中间件层云数据库层DB DB DB DBDB DB DBDBDB DBDB云主机层物理层数据库发展的两个方向:分布式云数据
22、库系统架构应用层应用层云数据库层,以云的方式,为此分布式系统提供N个数据库。中间件层云数据库层DB DB DB DBDB DB DBDBDB DBDB云主机层物理层数据库发展的两个方向:分布式云数据库系统架构应用层应用层中间件层主机、数据库,由云系统提供。数据的切割、分布,SQL转发、事务(包含分布式事务)由,分布式系统的中间层提供。云数据库层DBDB云在整体架构中,分量并不重。最重要的部分,仍是分布式中间件层。云主机层物理层云与大数据的区别 云与大数据的区别云和分布式的一个共同点,都是数据量比较大。还有一个方向,数据量也比较大。就是大数据。大数据:大数据是早些年数据挖掘的升级版。虽然也是数理
23、统计,但相比数据挖掘,典型意义上的大数据,数据量覆盖更为全面,比依赖“样本”的数据挖掘,更能发现数据的价值。和“云和分布式”的关系一样,云系统可以为大数据提供底层主机、数据库的支持,共同构建“大数据云”系统。但主要的分布式计算能力,还是要由大数据系统本身提供。云与虚拟化的区别 云与虚拟化的区别:虚拟化是云的基础以Oracle的CDB/PDB为例,其实它相当于把数据库虚拟化了。一个PDB,相当于一个VMWare的虚拟机。虚拟化是技术手段。比如,如果问“Oracle如何实现了CDB/PDB机制”?答案可以是:使用类似虚拟机的机制,将PDB独立出来,实现PDB可以插、拔进实例。从这个一回一答中,可以
24、看出,虚拟化是一种技术。而云数据库,是这种技术手段的应用形式。使用虚拟化的技术,达到了:以服务化的形式,快速得到一个数据库。云数据库总结云数据库总结:总的来说,云数据库就是DBaaS,以服务的形式提供数据库。它主要改变了用户获得一个数据库的方式。下面,我们首先以Oracle为例,说一下构建私有云数据库系统的方式。Oracle云数据库技术介绍使用Oracle建立企业自己的私有云数据库,是最方便的、最简单的。缺点是License费用会有点高。但对于仍在使用Oracle的企业来说,也是有必要的。另外,了解它的私有云技术,对我们也有很强的借鉴意义。Oracle云数据库技术介绍非CDB数据库架构中,一个
25、完整的数据库服务器数据库服务器包括以下几个部分: 公共内存池:SGA 各种数据库进程 控制文件SGACKPTDBWRLGWRPMONRedo File 控制文件 Redo File文件UNDO表空间其他表空间SYSTEM表空间SYSAUX表空间 各种表空间:系统表空间、UNDO表空间、临时表空间、用户表空间。数据库实例CDB数据库架构中,将实例级信息独立出来。实例级信息包括以下四部分:SGA也就是说,Oracle将表空间、数据文件独立出来,称为PDB。可以DBWR让用户连接的、对外提供查询、DML等SQL服务的,称为实例。一个PDB可以插入任何一个实例。用户可以通过实例,读、写插入进实例的PD
26、B中的数据。这些实例级信息,是数据库运行的基础。在此基础上,可以插入多个PDB。每个PDB是一堆表空间和表空间物理文件的组合:PDB1: PDB2:SYSTEMSYSAUXUNDOSYSTEMSYSAUXUNDO其他表空间 其他表空间 系统表空间、UNDO表空间、临时表空间、用户表空间。Oracle云数据库技术介绍:资源限制前文所述,使用Python+Web框架,底层使用Oracle CDB,可以快速做一个私有云数据库系统。但它只解决了一个问题,就是“快速获得一个数据库”。除了这一点外,资源限制对云数据库也是很重要的,总结一下,一个良好的云数据库系统,要对以下这四大资源进行限制: 空间 I/O
27、 内存 CPUOracle云数据库技术介绍:资源限制,空间 空间限制空间的限制是十分简单的,Oracle本来在数据文件中,就有最大空间限额命令,使用它可以很容易的限制表空间的可用空间:create tablespace user_data datafile /home/oracle/user_data_01.dbf size 100m AUTOEXTEND OnNEXT 1m MAXSIZE 27G;alter tablespace user_data add datafile /home/oracle/user_data_02.dbf size 100m AUTOEXTEND OnNEXT
28、1m MAXSIZE 27G;alter tablespace user_data add datafile /home/oracle/user_data_03.dbf size 100m AUTOEXTEND OnNEXT 1m MAXSIZE 26G;上面的命令创建了USER_DATA表空间,初始分配300MB空间,最大充许此表空间使用80GB磁盘空间。Oracle云数据库技术介绍:资源限制,空间只要将此表空间设为PDB的缺省表空间,并使用触发器,对命令进行过滤,限制用户创建其他表空间、或向此表空间中添加数据文件,就可以实现空间资源的限制。或者,如果不想限制用户执行某些命令,可以使用Pyt
29、hon(或其他语言),开发监控程序,当监测到某个PDB空间超出限制时,给出警告,甚至将PDB转为只读,或关闭PDB 。企业内的私有云数据库,又不是面向全社会的公有云,基础的限制手段,足以保障资源限制。Oracle云数据库技术介绍:资源限制,I/O I/O限制在PDB级,有两个初始化参数,可以限制I/O:max_iops、max_mbps。如下的命令,限制pdbtest1的每秒最大IOPS为1000,最高吞吐量为每秒50MB:alter session set container=pdbtest1;alter system set max_iops=1000;alter system set m
30、ax_mbps=50;Oracle云数据库技术介绍:资源限制,空间使用参数限制I/O,和前面空间限制一样,用户可以使用alter system命令,很容易的修改。我们也可以使用触发器,对此命令进行过滤,限制用户执行alter system命令。或者,也可以使用Python(或其他语言),开发监控程序,当监测到I/O限额参数被修改时,给出警告、将PDB转为只读、或关闭PDB。后面的内存限制、CPU限制,处理方法一样,使用触发器,或自己开发监控程序,监控资源的使用。Oracle云数据库技术介绍:内存限制 内存限制多个PDB虽然共享SGA,但每个PDB仍然可以使用sga_target参数,限制此PD
31、B所使用的内存量。使用pga_aggregate_target参数,即可限制某一个PDB的PGA内存。Oracle云数据库技术介绍:CPUCPU的资源限制比较复杂,不是简单设置参数就可以实现的。需要使用Oracle的资源管理器(Resource Manager)。在资源管理器中,有两个参数可以限制某一PDB的CPU使用: Shares:份额。份额越高,越有使用CPU的优先权。 Utilization_limit:使用限制。限制PDB所能使用CPU的最高比例,比如设置为30%,在CPU繁忙、不足时,则此PDB最多只能使用30%的CPU。如果CPU十分空闲,此PDB可以使用超过30%的CPU。Or
32、acle云数据库技术介绍:CPU如下的命令,设置PDB1的份额为3,CPU使用率限制为20%:BEGINDBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(plan = VAGE_PLAN,pluggable_database = PDB1,shares = 3,utilization_limit = 20);END;多个PDB合计的utilization_limit可以超过100%,因此有可能出现多个PDB争抢资源的情况。当多个PDB争抢资源时,份额高的PDB有优先的CPU使用权。Oracle云数据库技术介绍:CPU资源管理器功能是很强大的,
33、还可以限制并行度和内存的使用。我们在此介绍私有云建设的思路,具体命令使用,可以搜索相关文档。Oracle云数据库技术介绍:资源限制云数据库Web管理页面数据库用户PD资用PDBPDBPDBPDB PDBPDBPDB PDB再数私有云CDB2CDB3CDB1云数据库的要求 建库简单 资源限制与监控 自动化管理工具 自动化监控工具满足以上四点要求,就可以算的上完善的云数据库系统了。如果不使用Oracle,使用其他数据库构建私有云数据库系统,也一样要满足以上四点要求。下面以MySQL为例,介绍一下如何达到以上四点要求。MySQL 云数据库 建库简单:Docker + MySQL可以轻松实现建库简单这
34、一要求:下载MySQL镜像(也可自己制作镜像):https:/ pull mysql启动镜像:docker run -d -name mysql -v /data/datadir:/var/lib/mysql -v /etc/mysql/f:/etc/mysql/f -p3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:tag-v:宿住主机目录和容器目录的映像。-e:设置环境变量镜像名:mysql:tagMySQL 云数据库 资源限制与监控CPU、内存和IO带宽、IOPS的资源限制,可以使用cgroups。然后,可以使用docker启动参数dm.basesize,限制Docker的默认磁盘空间。 自动化工具使用Python(或其他语言),开发自动化管理、自动化监控工具。MySQL 云数据库云数据库Web管理页面数据库用户Doc然后控工MySQLPostGreSQLMongoDBMySQLPostGreSQLMongoDBMySQLPG云主机层物理层云数据库总结 一句话总结云数据库,或者称DBaaS,从数据库技术角度上讲,可能没有那么高大上。因为它不是为DBA而推出的特性。从整个项目角度,它意义重大。它主要改变了数据库的获得方式,使基于数据库的项目可以更容易的得到、使用数据库,以加快项目的上线、迭代周期。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。