大数据技术原理与应用3NoSQL数据库、云数据库

第5讲 NoSQL数据库

5.1 NoSQL概述

在这里插入图片描述
通常,NoSQL数据库具有以下几个特点: (1)灵活的可扩展性 (2)灵活的数据模型 (3)与云计算紧密融合
可以支持在多个节点上扩展、
关系设计库中行和列都得遵循一定的规范和模式,而、noSQL不需要遵守、
根据整个负载实时变化来对整个底层的IT基础设施进行动态伸缩,如果负载增加,可以把更多的机器纳到整个集群当中,负载减少可以把相关的机器节点退出去。传统的数据库即使底层的资源具有非常良好的可伸缩性,依然没有办法充分发挥作用,因为对于关系数据库来讲,纵向可扩展性受到一定的限制,也不具备水平可扩展性。

现在已经有很多公司使用了NoSQL数据库: •Google
•Facebook •Mozilla •Adobe •Foursquare •LinkedIn •Digg •McGraw-Hill Education •Vermont Public Radio •百度、腾讯、阿里、新浪、华为……

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每次访问网页都要去访问数据库的话是不太行的,web1.0通过是动态网页静态化解决。现在很多任务都要实时生成
在这里插入图片描述
MySQL集群的方式解决业务负载
物理数据库,主从备份。把写负载都放到主服务器上,同步到从服务器。同步传播:只有主从都一致才返回结果、异步传播:延迟更新到从。读负载放到从服务器。
但是规模越来越大后,还是不行。
在这里插入图片描述
写负载的分流。
在这里插入图片描述

在这里插入图片描述
1、关系数据库已经无法满足Web2.0的需求。主要表现在以下几个方面:
(1)无法满足海量数据的管理需求 (2)无法满足数据高并发的需求 (3)无法满足高可扩展性和高可用性的需求
MySQL集群是否可以完全解决问题?
•复杂性:部署、管理、配置很复杂
•数据库复制:MySQL主备之间采用复制方 式,只能是异步复制,当主库压力较大时可 能产生较大延迟,主备切换可能会丢失最后 一部分更新事务,这时往往需要人工介入, 备份和恢复不方便
•扩容问题:如果系统压力过大需要增加新的 机器,这个过程涉及数据重新划分,整个过 程比较复杂,且容易出错
•动态数据迁移问题:如果某个数据库组压力 过大,需要将其中部分数据迁移出去,迁移 过程需要总控节点整体协调,以及数据库节 点的配合。这个过程很难做到自动化
MySQL
2、“One size fits all”模式很难适用于截然不同的业务场景 •关系模型作为统一的数据模型既被用于数据分析,也被用于在线业务。 但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架 构。用同一套模型来抽象显然是不合适的
•Hadoop就是针对数据分析
•MongoDB、Redis等是针对在线业务,两者都抛弃了关系模型
在这里插入图片描述
3、关系数据库的关键特性包括完善的事务机制和高效的查询机制。但是,关 系数据库引以为傲的两个关键特性,到了Web2.0时代却成了鸡肋,主要表现在 以下几个方面:
(1)Web2.0网站系统通常不要求严格的数据库事务 (不像是去银行存款,发一条微博没多大影响)
(2)Web2.0并不要求严格的读写实时性 (刚刚发布一条微博不要求后面的用户立马就能看到)
(3)Web2.0通常不包含大量复杂的SQL查询(避免了多表连接查询。web1.0要降低冗余,要连接多表,但是web2.0中去结构化,非规范化,宁可有适当的冗余,用更多的存储空间换取更好的查询性能,现在存储设备价格低。)
在这里插入图片描述

5.2 NoSQL与关系数据库的比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结
(1)关系数据库
优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性 ,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持
劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无 法较好支持Web2.0应用,事务机制影响了系统的整体性能等
(2)NoSQL数据库
优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0 应用,具有强大的横向扩展能力等
劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性 ,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较 困难等
关键性业务不能被用nosql
在这里插入图片描述
总结 关系数据库和NoSQL数据库各有优缺点,彼此无法取代
•关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务 一致性
•NoSQL数据库应用场景:互联网企业、传统企业的非关键业务(比如数据 分析)

采用混合架构
案例:亚马逊公司就使用不同类型的数据库来支撑它的电子商务应用
•对于“购物篮”这种临时性数据,采用键值存储会更加高效
•当前的产品和订单信息则适合存放在关系数据库中
•大量的历史订单信息则适合保存在类似MongoDB的文档数据库中
在这里插入图片描述
在这里插入图片描述

5.3 NoSQL的四大类型

市面上存在一两百种NoSQL数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

键值数据库

在这里插入图片描述
百度云数据库(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、 StackOverFlow(Redis)、Instagram (Redis)、Youtube(Memcached)、Wikipedia (Memcached)
在这里插入图片描述

列族数据库

在这里插入图片描述
Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Twitter (Cassandra and HBase)、Facebook(HBase)、Yahoo!(HBase)

文档数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图形数据库

在这里插入图片描述
不同类型数据库比较分析
在这里插入图片描述

5.4 NoSQL的三大基石

在这里插入图片描述

CAP理论

在这里插入图片描述
所谓的CAP指的是:
 C(Consistency):一致性,是指任何一个读操作总是能够读到之前完成的。写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据;
 A:(Availability):可用性,是指快速获取数据,可以在确定的时间内返回 操作结果,保证每个请求不管成功或者失败都有响应;
 P(Tolerance of Network Partition):分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
M1上有个副本V1,M2上有个副本V2,它们初始值都是一样的,都是0,而且有两个进程
M1上有个P1进程对副本V1进行了更新操作。因为副本V1在M1上,而副本V2在M2上,这是一个数据的两个副本。在M1上进程P1对V1进行更新,更新要传播到机器M2上,传播完成后进程P2会把副本V2读出来。这样P1进程在M1上写入一个数据之后,P2就可以在M2上将这个数据读出来。在不同位置写入,在另外一个地方读出,它是一致的。
在这里插入图片描述
如果中间网络发生故障,P1进程在M1机器上吧把这个数据更新以后,要传播到M2机器上。如果网络出现了问题,无法传播。这个时候如果进程P2直接去读副本V2,读到的数据肯定是不一致的。如果想要马上得到副本的值,就要牺牲一致性。所以不管最新值是否能够传过来,为了保证可用性,就要马上把副本V2旧的值0返回给进程P2.P2就会得到一个不一致的值。虽然可以马上得到结果,可以满足可用性要求,但是牺牲了一致性。
如果让P2进程一直等,M1上P1进程写的数据能够传播到机器M2上,等到传播过来时,已经过了很久了。
在这里插入图片描述
当处理CAP的问题时,可以有几个明显的选择:
1.CA:也就是强调一致性(C)和可用性(A),放弃分区容忍性(P),最简单的做
法是把所有与事务相关的内容都放到同一台机器上。很显然,这种做法会严重影响系统 的可扩展性。传统的关系数据库(MySQL、SQL Server和PostgreSQL),都采用了这 种设计原则,因此,扩展性都比较差
2.CP:也就是强调一致性(C)和分区容忍性(P),放弃可用性(A),当出现网络 分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务
3.AP:也就是强调可用性(A)和分区容忍性(P),放弃一致性(C),允许系统返 回不一致的数据
在这里插入图片描述
MySQL都不会去做分区
HBase放弃了可用性,来成就一致性和分区容忍性,有延迟
Cassandra放弃了一致性

BASE

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

最终一致性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步 复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的 。一般设定是R+W = N+1,这是保证强一致性的最小设定

如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库, N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱 一致性。

对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性 和一致性之间取一个平衡,以适应不同的应用场景。

•如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于 数据分布的N个节点是同步写入的,因此可以保证强一致性。

实例:HBase是借助其底层的HDFS来实现其数据冗余备份的。HDFS采用的就是强一致 性保证。在数据没有完全同步到N个节点前,写操作是不会返回成功的。也就是说它的W =N,而读操作只需要读到一个值即可,也就是说它R=1。

•像Voldemort,Cassandra和Riak这些类Dynamo的系统,通常都允许用户按需要设置N ,R,W三个值,即使是设置成W+R<= N也是可以的。也就是说他允许用户在强一致性 和最终一致性之间自由选择。而在用户选择了最终一致性,或者是W<N的强一致性时, 则总会出现一段“各个节点数据不同步导致系统处理不一致的时间”。为了提供最终一 致性的支持,这些系统会提供一些工具来使数据更新被最终同步到所有相关节点。

5.5 从NoSQL到NewSQL数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个是微软的SQL Azure
在这里插入图片描述

5.6 文档数据库MongoDB

•MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库 系统。
•在高负载的情况下,添加更多的节点,可以保证服务器性能。
•MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
•MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。 MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
主要特点
•提供了一个面向文档存储,操作起来比较简单和容易
•可以设置任何属性的索引来实现更快的排序
•具有较好的水平可扩展性
•支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组
•可以实现替换完成的文档(数据)或者一些指定的数据字段
•MongoDB中的Map/Reduce主要是用来对数据进行批量处理和聚合操作
•支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等语言
•MongoDB安装简单
在这里插入图片描述
很多对键值对
在这里插入图片描述
要进行多表连接操作
在这里插入图片描述
提高易用性和并发性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://github.com/mongodb/mongojava-driver/downloads
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
public class MongoDBJDBC{
public static void main( String args[] ){
try{ // 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( “localhost” , 27017 );
DB db = mongoClient.getDB( “test” ); // 连接到数据库
System.out.println(“Connect to database successfully”);
boolean auth = db.authenticate(myUserName, myPassword);
System.out.println("Authentication: "+auth);
DBCollection coll = db.getCollection(“mycol”);
System.out.println(“Collection mycol selected successfully”);
BasicDBObject doc = new BasicDBObject(“title”, “MongoDB”).
append(“description”, “database”).
append(“likes”, 100).
append(“url”, “http://www.w3cschool.cc/mongodb/”).
append(“by”, “w3cschool.cc”);
coll.insert(doc);
System.out.println(“Document inserted successfully”);
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}

总结:
•本章介绍了NoSQL数据库的相关知识
•NoSQL数据库较好地满足了大数据时代的各种非结构化数据的存储需 求,开始得到越来越广泛的应用。但是,需要指出的是,传统的关系数 据库和NoSQL数据库各有所长,彼此都有各自的市场空间,不存在一方 完全取代另一方的问题,在很长的一段时期内,二者都会共同存在,满 足不同应用的差异化需求
•NoSQL数据库主要包括键值数据库、列族数据库、文档型数据库和图 形数据库等四种类型,不同产品都有各自的应用场合。CAP、BASE和 最终一致性是NoSQL数据库的三大理论基石,是理解NoSQL数据库的 基础
•介绍了融合传统关系数据库和NoSQL优点的NewSQL数据库
•本章最后介绍了具有代表性的NoSQL数据库——文档数据库MongoDB

第6讲 云数据库

6.1 云数据库概述

6.1.1 云计算是云数据库兴起的基础

在这里插入图片描述
在这里插入图片描述
适用于各种行业
采用冗余机制、失败恢复机制
没有先期投入成本,只需要根据实际使用资源付费
带宽、CPU、内存、磁盘
把底层相关资源统一放到一个资源池中,进行统一的调配和使用
根据底层的负载,动态的增加节点

6.1.2 云数据库概念

云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景 下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力 ,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易。云数据库 具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。

6.1.3 云数据库的特性

在这里插入图片描述
数据库负载增加时,可以往集群里面增加更多的节点,提高数据库服务的性能
提供7X24不间断服务
投入成本低
通过网络就可以马上用到服务
性能好
在这里插入图片描述

6.1.4 云数据库是个性化数据存储需求的理想选择

企业类型不同,对于存储的需求也千差万别,而云数据库可以很好地满 足不同企业的个性化存储需求:
•首先,云数据库可以满足大企业的海量数据存储需求
•其次,云数据库可以满足中小企业的低成本数据存储需求
•另外,云数据库可以满足企业动态变化的数据存储需求
到底选择自建数据库还是选择云数据库,取决于企业自身的具体需求
•对于一些大型企业,目前通常采用自建数据库
•对于一些财力有限的中小企业而言,IT预算比较有限,云数据库这种 前期零投入、后期免维护的数据库服务,可以很好满足它们的需求
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.1.5 云数据库与其他数据库的关系

•从数据模型的角度来说,云数据库并非一种全新的数据库技术,而只是以服务的方式提 供数据库功能
•云数据库并没有专属于自己的数据模型,云数据库所采用的数据模型可以是关系数据库 所使用的关系模型(微软的SQL Azure云数据库、阿里云RDS都采用了关系模型),也 可以是NoSQL数据库所使用的非关系模型(Amazon Dynamo云数据库采用的是“键/值 ”存储)
•同一个公司也可能提供采用不同数据模型的多种云数据库服务
•许多公司在开发云数据库时,后端数据库都是直接使用现有的各种关系数据库或NoSQL 数据库产品
在这里插入图片描述
在这里插入图片描述

6.2 云数据库产品

6.2.1 云数据库厂商概述

在这里插入图片描述

6.2.2 Amazon的云数据库产品

Amazon是云数据库市场的先行者。Amazon除了提供著名的S3 存储服务和EC2计算服务以外,还提供基于云的数据库服务: •Amazon RDS:云中的关系数据库
•Amazon SimpleDB:云中的键值数据库
•Amazon DynamoDB:云中的NoSQL数据库
•Amazon Redshift:云中的数据仓库
•Amazon ElastiCache:云中的分布式内存缓存

6.2.3 Google的云数据库产品

•Google Cloud SQL是谷歌公司推出的基于MySQL的云数据库
•使用Cloud SQL,所有的事务都在云中,并由谷歌管理,用户不需要配 置或者排查错误
•谷歌还提供导入或导出服务,方便用户将数据库带进或带出云
•谷歌使用用户非常熟悉的MySQL,带有JDBC支持(适用于基于Java 的App Engine应用)和DB-API支持(适用于基于Python的App Engine 应用)的传统MySQL数据库环境,因此,多数应用程序不需过多调试即 可运行,数据格式对于大多数开发者和管理员来说也是非常熟悉的
•Google Cloud SQL还有一个好处就是与Google App Engine集成 。

6.2.4 Microsoft的云数据库产品

SQL Azure具有以下特性:
•属于关系型数据库:支持使用TSQL(Transact Structured Query Language)来管理、创建和操作云数据库
•支持存储过程:它的数据类型、存储过程和传统的SQL Server具有很大的相似性,因此,应用可以在本地进行开发,然后部署到云平台上
•支持大量数据类型:包含了几乎所有典型的SQL Server 2008的数据类型
•支持云中的事务:支持局部事务,但是不支持分布式事务

6.3 云数据库系统架构

6.3.1 UMP系统概述

在这里插入图片描述
UMP系统是低成本和高性能的MySQL云数据库方案

总的来说,UMP系统架构设计遵循了以下原则:
•保持单一的系统对外入口,并且为系统内部维护单一的资源池
•消除单点故障,保证服务的高可用性
•保证系统具有良好的可伸缩,能够动态地增加、删减计算与存储节点
•保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保应用和数据安全
在这里插入图片描述
在这里插入图片描述
UMP解决了这个问题,会对单个用户有限制

6.3.2 UMP系统架构

在这里插入图片描述
在这里插入图片描述

  1. Mnesia
    •Mnesia是一个分布式数据库管理系统
    •Mnesia支持事务,支持透明的数据分片,利用两阶段锁实现分布式事 务,可以线性扩展到至少50个节点
    •Mnesia的数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点来改进容错性
    •Mnesia的这些特性,使其在开发云数据库时被用来提供分布式数据库服务
    在这里插入图片描述
  2. RabbitMQ
    在这里插入图片描述
    •RabbitMQ是一个工业级的消息队列产品(功能类似于IBM公司的消息 队列产品IBM Websphere MQ),作为消息传输中间件来使用,可以实现可靠的消息传送
    •UMP集群中各个节点之间的通信,不需要建立专门的连接,都是通过读写队列消息来实现的
    在这里插入图片描述
    异步式的基于消息队列的传输
  3. Zookeeper
    Zookeeper是高效和可靠的协同工作系统,提供分布式锁之 类的基本服务(比如统一命名服务、状态同步服务、集群管 理、分布式应用配置项的管理等),用于构建分布式应用, 减轻分布式应用程序所承担的协调任务
    在UMP系统中,Zookeeper主要发挥三个作用:
    •作为全局的配置服务器 ,自动配置
    •提供分布式锁(选出一个集群的“总管”)controller
    •监控所有MySQL实例 安装在不同的MySQL实例,发生故障及时探测
    4.LVS
    LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统
    •UMP系统借助于LVS来实现集群内部的负载均衡
    •LVS集群采用IP负载均衡技术基于内容请求分发技术
    调度器是LVS集群系统的唯一入口点,调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故 障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器
    •整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器 端的程序
    5 Controller服务器
    在这里插入图片描述
    Controller服务器向UMP集群提供各种管理服务,实现集群成员管理 、元数据存储、MySQL实例管理、故障恢复、备份、迁移、扩容等功能
    •Controller服务器上运行了一组Mnesia分布式数据库服务,其中存储 了各种系统元数据,主要包括集群成员、用户的配置和状态信息,以及用户名到后端MySQL实例地址的映射关系(或称为“路由表”)等
    •当其它服务器组件需要获取用户数据时,可以向Controller服务器发 送请求获取数据
    •为了避免单点故障,保证系统的高可用性,UMP系统中部署了多台 Controller服务器,然后,由Zookeeper的分布式锁功能来帮助选出一 个“总管”,负责各种系统任务的调度和监控

6.Web控制台 Web控制台向用户提供系统管理界面

7 Proxy服务器
Proxy服务器向用户提供访问MySQL数据库的服务,它完全实现了 MySQL协议
用户可以使用已有的MySQL客户端连接到Proxy服务器
Proxy服务器通过用户名获取到用户的认证信息、资源配额的限制(例如 QPS、IOPS(I/O Per Second)、最大连接数等),以及后台MySQL实例的地址
然后,用户的SQL查询请求会被转发到相应的MySQL实例上。 除了数据路由的基本功能外,Proxy服务器中还实现了很多重要的功能, 主要包括屏蔽MySQL实例故障、读写分离、分库分表、资源隔离、记录 用户访问日志等

8 Agent服务器
Agent服务器部署在运行MySQL进程的机器上,用来管理每台物理机上的 MySQL实例,执行主从切换、创建、删除、备份、迁移等操作,同时,还负责收 集和分析MySQL进程的统计信息、慢查询日志(Slow Query Log)和bin-log

9.日志分析服务器
日志分析服务器存储和分析Proxy服务器传入的用户访问日志,并支持实时查询一段时间内的慢日志和统计报表

10.信息统计服务器
信息统计服务器定期将采集到的用户的连接数、QPS数值以及MySQL实例的进 程状态用RRDtool进行统计,可以在 Web界面上可视化展示统计结果,也可以把 统计结果作为今后实现弹性的资源分配和自动化的MySQL实例迁移的依据

11.愚公系统
做数据迁移,不停机的情况下
愚公系统是一个全量复制结合bin-log分析进行增量复制的工具,可以实现在不停机的情况下动态扩容、缩容和迁移
在这里插入图片描述
MySQl集群,用于具体数据的存储
分布存储需要管家,它里面存储了元数据信息,可以知道相关数据被分片成什么样子,管家应该解决单点故障,设置多个controller服务器
通过zookeeper服务器来帮你实现只有一个controller服务器起作用,还可以帮助你实现整个集群相关的配置文件的管理,以及对mysql集群的运行状态的一个总体监控,一旦发现mysql集群相关的机器发生故障,探测到后,就会向相关的controller管家汇报
对外提供的服务窗口,是通过proxy服务器,客户端连接到proxy服务器,它会把你具体引导到相关的mysql实例查询访问
整个集群通过LVS这个通用的负载均衡框架
通过web控制台可以查询系统当中各个组件运行的相关状态信息
各个组件之间相互传递消息,进行通信通过消息队列RabbitMQ来实现的
日志服务器来看看各个资源到底消耗了多少
信息统计服务器搜集系统当中各个组件及用户查询的相关信息,更好的负载聚恒,还可以数据迁移

6.3.3 UMP系统功能

UMP系统是构建在一个大的集群之上的,通过多个组件的协同作业,整个系统实现了对用户透明的各种功能:
•容灾
•读写分离
•分库分表
•资源管理
•资源调度
•资源隔离
•数据安全
1.容灾
•为了实现容灾,UMP系统会为每个用户创建两个MySQL实例,一个是主 库,一个是从库
•主库和从库的状态是由Zookeeper负责维护的

主从切换过程如下:
•Zookeeper探测到主库故障,通知Controller服务器
•Controller服务器启动主从切换时,会修改“路由表”,即用户名到 后端MySQL实例地址的映射关系
•把主库标记为不可用
•借助于消息中间件RabbitMQ通知所有Proxy服务器修改用户名到后端MySQL实例地址的映射关系
•全部过程对用户透明
在这里插入图片描述

宕机后的主库在进行恢复处理后需要再次上线,过程如下:
•在主库恢复时,会把从库的更新复制给自己
•当主库的数据库状态快要达到和从库一致的状态时,Controller 服务器就会命令从库停止更新,进入不可写状态,禁止用户写入数据
•等到主库更新到和从库完全一致的状态时,Controller服务器就会发起主从切换操作,并在路由表中把主库标记为可用状态 •通知Proxy服务器把写操作切回主库上,用户写操作可以继续执行,之后再把从库修改为可写状态 1
在这里插入图片描述

2.读写分离
•充分利用主从库实现用户读写操作的分离,实现负载均衡
•UMP系统实现了对于用户透明的读写分离功能,当整个功能被开启时, 负责向用户提供访问MySQL数据库服务的Proxy服务器,就会对用户发起 的SQL语句进行解析:
如果属于写操作,就直接发送到主库,如果是读操作,就会被均衡地发送到主库和从库上执行

3.分库分表
UMP支持对用户透明的分库分表(shard / horizontal partition)
当采用分库分表时,系统处理用户查询的过程如下:
•首先,Proxy服务器解析用户SQL语句,提取出重写和分发SQL语句所需要的信息
•其次,对SQL语句进行重写,得到多个针对相应MySQL实例的子语句 ,然后把子语句分发到对应的MySQL实例上执行
•最后,接收来自各个MySQL实例的SQL语句执行结果,合并得到最终结果

4.资源管理
•UMP系统采用资源池机制来管理数据库服务器上的CPU、内存、磁 盘等计算资源,所有的计算资源都放在资源池内进行统一分配,资源池是为MySQL实例分配资源的基本单位
•整个集群中的所有服务器会根据其机型、所在机房等因素被划分多个资源池,每台服务器会被加入到相应的资源池中
•对于每个具体MySQL实例,管理员会根据应用部署在哪些机房、需要哪些计算资源等因素,为该MySQL实例具体指定主库和从库所在的资源池,然后,系统的实例管理服务会本着负载均衡的原则,从资源池中选择负载较轻的服务器来创建MySQL实例

5.资源调度
•UMP系统中有三种规格的用户,分别是数据量和流量比较小的用户、 中等规模用户以及需要分库分表的用户
•多个小规模用户可以共享同一个MySQL实例
•对于中等规模的用户,每个用户独占一个MySQL实例
•对于分库分表的用户,会占有多个独立的MySQL实例

6.资源隔离
在这里插入图片描述

7.数据安全 UMP系统设计了多种机制来保证数据安全:
•SSL数据库连接:SSL(Secure Sockets Layer)是为网络通信提供安全 及数据完整性的一种安全协议,它在传输层对网络连接进行加密。 Proxy服务器实现了完整的MySQL客户端/服务器协议,可以与客户端 之间建立SSL数据库连接
•数据访问IP白名单:可以把允许访问云数据库的IP地址放入“白名 单”,只有白名单内的IP地址才能访问,其他IP地址的访问都会被拒绝, 从而进一步保证账户安全
•记录用户操作日志:用户的所有操作记录都会被记录到日志分析服务 器,通过检查用户操作记录,可以发现隐藏的安全漏洞
•SQL拦截:Proxy服务器可以根据要求拦截多种类型的SQL语句,比如 全表扫描语句“select *”

6.4 Amazon AWS和云数据库

6.4.1 Amazon和云计算的渊源

Amazon Web Services
•2016年3月14日,亚马逊网络服务(AWS)十岁了
•Amazon Web Services业务相当于紧随其后的4大竞争对手的总和 (谷歌、微软)
•亚马逊在全球拥有12个区域性数据中心
•Amazon Web Services提供的多个亚马逊数据库都在与甲骨文(Oracle)激烈 竞争,其中Amazon RDS有10万多个活跃用户 •亚马逊数据库Aurora,是Amazon Web Services历史上增长最快的服务
在这里插入图片描述
在这里插入图片描述

6.4.2 Amazon AWS

在这里插入图片描述
1AWS Global Infrastructure(AWS全局基础设施)
•在全局基础设施中有3个很重要的概念。
第一个是Region (区域),每个Region是相互独立的,自成一套云服务体系, 分布在全球各地。目前全球有10个Region(比如 北京)
•第二个是Availability Zone(可用区),每个Region又由数个可 用区组成,每个可用区可以看做一个数据中心,相互之间通 过光纤连接
•第三个是Edge Locations(边缘节点)。全球目前有50多个 边缘节点,是一个内容分发网络(CDN,Content Distrubtion Network),可以降低内容分发的延迟,保证终端用户获取资源的速度
在这里插入图片描述
在这里插入图片描述
可以加速对网络资源的访问速度
2Networking(网络)
AWS提供的网络服务主要有:
•Direct Connect:支持企业自身的数据中心直接与AWS的数 据中心直连,充分利用企业现有的资源
•VPN Connection:通过VPN连接AWS,保证数据的安全性
•Virtual Private Cloud: 私有云,从AWS云资源中分一块给 你使用,进一步提高安全性
•Route 53:亚马逊提供的高可用的可伸缩的云域名解析系统。 Amazon Route 53 高效地将用户请求连接到 AWS 中运行的 基础设施,例如 Amazon EC2 实例、Elastic Load Balancing 负载均衡器或 Amazon S3 存储桶

3Compute(计算)
亚马逊的计算核心,包括了众多的服务
•EC2: Elastic Compute Cloud,弹性计算云。亚马逊的虚拟机,支持 Windows和Linux的多个版本,支持API创建和销毁,有多种型 号可供选择,按需使用。并且有自动扩展功能(5分钟即可新建 一个虚拟机),有效解决应用程序性能问题
•ELB: Elastic Load Balancing, 亚马逊提供的负载均衡器, 可以和EC2无缝配合使用,横跨多个可用区,可以自动检查实 例的健康状况,自动剔除有问题的实例,保证应用程序的高可 用性

4Storage(存储)
•S3: Simple Storage Service,简单存储服务,是亚马逊对 外提供的对象存储服务。不限容量,单个对象大小可达5TB, 可实现高达99.999999999%的可用性
•EBS: Elastic Block Storage,专门为Amazon EC2 虚拟机设计的弹性块存储服务,Amazon EBS可以为Amazon EC2的 虚拟机创建卷volumns。 EBS相当于一个分布式块设备,可 以直接挂载在EC2实例上,用于替代EC2实例本地存储,从 而增强EC2可靠性
•Glacier:主要用于较少使用的存储存档文件和备份文件,价格便宜量又足,安全性高

5Database(数据库)
亚马逊提供关系型数据库和NoSQL数据库,以及一些cache等数据库服务
•SimpleDB:基于云的键 / 值数据存储服务
•DynamoDB: DynamoDB是亚马逊自主研发的No SQL数据库,性能高, 容错性强,支持分布式
•RDS:Relational Database Service,关系型数据库服务。支持MySQL, SQL Server和Oracle等数据库
•Amazon ElastiCache: 数据库缓存服务

6Application Service(应用程序服务)
•Cloud Search: 一个弹性的搜索引擎,可用于企业级搜索
•Amazon SQS: 队列服务,存储和分发消息
•Simple Workflow:一个工作流框架
•CloudFront:世界范围的内容分发网络(CDN)
•EMR: Elastic MapReduce,一个Hadoop框架的实例,可用于大数据处理

7Deployment & Admin (部署和管理)
•Elastic BeanStalk: 一键式创建各种开发环境和运行时
•CloudFormation:采用JSON格式的模板文件来创建和管理一系列亚马逊云资源
•OpsWorks: OpsWorks允许用户将应用程序的部署模块化,可以实现对数据库、 运行时、服务器软件等自动化设置和安装
•IAM: Identity & Access Management,认证和访问管理服务。用户使用云服务 最担心的事情之一就是安全问题。亚马逊通过IAM提供了立体化的安全策略,保 证用户在云上的资源绝对的安全

总体而言,Amazon AWS的产品分为几个部分:
1计算类
•弹性计算云EC2:EC2提供了云中的虚拟机
•弹性MapReduce:将Hadoop MapReduce搬到云环境中,大量EC2实例动态地成为执 行大规模MapReduce计算任务的工作机
2存储类
•弹性块存储EBS
•简单消息存储SQS
•Blob对象存储S3
•NoSQL型数据库:SimpleDB和DynamoDB
•关系数据库RDS
3工具支持
•AWS支持多种开发语言,提供Java、Rupy、Python、PHP、Windows &.NET 以及 Android和iOS的工具集
•工具集中包含各种语言的SDK,程序自动部署以及各种管理工具
•AWS通过CloudWatch系统提供丰富的监控功能
在这里插入图片描述

Amazon EC2架构
在这里插入图片描述
相比传统的虚拟机托管, EC2的最大特点是允许用户根据需求动态调整 运行的实例类型和数量, 实现按需付费
Amazon EC2平台主要包含如下部分: •EC2实例(AMI) •弹性块存储 •弹性负载均衡(自动缩放)

在这里插入图片描述
在这里插入图片描述

EC2存储
在这里插入图片描述
•EC2本地存储是实例自带的磁盘空间,但它并不是持久的,也就是说这个实 例所在的节点出现故障时,相应的磁盘空间也会随之清空
•为了解决本地存储不可靠问题,EC2推出了EBS
•EBS通过卷来组织数据,每个EBS卷只能挂载到一个EC2实例
•EBS卷并不与实例绑定,而是与用户帐号绑定
在这里插入图片描述

在EC2中创建虚拟机实例时,会提示选择镜像(Images)的类型:
•S3-Hosted images:镜像需从S3存储中拷贝到EC2实例的本地存 储。完成虚拟机镜像拷贝后启动EC2实例
•EBS-backed images:虚拟机启动要快得多,当关闭虚拟机后,虚 拟机的数据还在EBS上

AWS云管理平台
在这里插入图片描述
云平台负责根据客户的需求(并发数、吞吐量、数据存储空间等)来弹性地分配资源,然后将不用的资源收回
任何一个SaaS在提供服务的时候,云平台都会通过4个阶段对服务进行资源的分配及调整:
1.首先启动服务,当有客户进行服务操作时,云平台会启动服务
2. 启动后监控服务的需求情况
3. 当无人访问时,停止服务
4. 回收不被使用的资源
在这里插入图片描述
一个典型的Hadoop作业执行时,AWS具体的操作流程:
•消息平台首先发送服务启动的命令给启动控制器,由启动控制器首先将启动信息放在SimpleDB的缓冲区里
分配EC2的计算资源,启动Hadoop等操作,将计算数据从S3中导入EC2, 开始进行计算和分析
•监控控制器接收到监控信息后,对应用中所有的资源和错误进行监控,更新 SimpleDB的缓冲区中的状态,并且根据用 户的需要随时增减资源(计算节点和存储节点)
•关闭控制器在收到关闭消息后,会停止 EC2、Hadoop等资源,将运算结果放入S3 或者客户指定的存储目标,并发消息给结 算控制器

6.4.3 Amazon AWS平台上的云数据库

时至今日,所有Amazon Web Services数据库服务都已走 上正轨,成为亚马逊数十亿美元业务的组成部分。这些数 据库服务包括:
•Amazon RDS:云中的关系数据库
•Amazon SimpleDB:云中的键值数据库
•Amazon DynamoDB:云中的NoSQL数据库
•Amazon Redshift:云中的数据仓库
•Amazon ElastiCache:云中的分布式内存缓存

SimpleDB
•SimpleDB是AWS上的第一个NoSQL数据库服务(键值数据库)
•记录由主键和多个属性组成
•可以把数据进行多副本存储,支持高并发读取
•更新操作只能针对主副本进行,但可以快速传播到其他副本,提供最终一致性
•SimpleDB更适合存储小型、碎片化的零散数据
缺陷如下:
•SimpleDB有单表限制。SimpleDB 数据模型由域、项目、属性和值组成,每 个域最多只能保存10GB的数据,所以得自己分区以免超过此限制
•性能不稳定。SimpleDB以简单为设计目标,SimpleDB并不需要用户指定主 键,也不需要用户创建索引,会默认对所有属性创建索引。然而这种简洁性 也带来了一些副作用
•一致性问题。SimpleDB设计时采用的是最终一致性模型

Amazon DynamoDB
•采纳了SimpleDB中成功的托管服务形式及灵活的数据模型
•记录由主键和多个属性组成,这一点类似于SimpleDB与BigTable,这比 简单的KV模型更易用
提供了一致性读功能
•限制了系统的功能,只能通过主键去操作记录,不能进行批量更新,这使得系统可以保证可伸缩性及任何时候的高性能
•全面使用SSD来提升系统性能

Amazon RDS
•Amazon RDS 有超过 10 万活跃客户和 多个数据库引擎可供选择,已成为云中运行关系数据库的新常态
•MySQL •Oracle •SQL Server •PostgreSQL •MariaDB •Aurora
•借助 AWS 数据库迁移服务及其附带模式转换工具,客户可选择从本地部署向 AWS 迁移相同数据库引擎
•RDS可以建立3TB和3万的DB实例

6.5 微软云数据库SQL Azure

在这里插入图片描述
SQL Azure是微软的云关系型数据库,后端存储又称为“云SQL Server”
会把这个应用所涉及到的相关数据都放到一个表组里面,那么怎么进行分区呢?
构建在SQL Server之上,通过分布式技术提升传统关系数据库的可扩展性和容错能力
1.逻辑模型
•一个逻辑数据库称为一个表格组
•表格组中所有划分主键相同的行集合称为行组(row group)
•只支持同一个行组内的事务,同一个行组的数据逻辑上会分布到一台服务 器,以此规避分布式事务
•通过主备复制将数据复制到多个副本, 保证高可用性
水平切分,切分时要保证每一个行组都在一个分区内,就可以把大的数据切分到云环境中不同的服务器下面去
2.物理模型
•在物理层面,每个有主键的表格组根据划分主键列有序地分成多个数据分 区。每个行组属于唯一分区
•分区是SQL Azure复制、迁移、负载均衡的基本单位。每个分区包含多个副 本(默认为3),每个副本存储在一台物理的SQL Server上
•SQL Azure保证每个分区的多个副本分布到不同的故障域。每个分区有一个 副本为主副本(Primary),其他副本为从副本(Secondary)。主副本处理 所有的查询、更新事务,并以操作日志的形式,将事务同步到从副本,从副 本接收主副本发送的事务日志并应用到本地数据库

每台物理SQL Server数据库混合存放了来自不同逻辑分区的主副本和从副本
在这里插入图片描述
3.体系架构
在这里插入图片描述
•SQL Azure分为四个主要部分: SQL Server实例、全局分区管理器、协议网关、 分布式基础部件。
•每个SQL Server实例是一个运行着SQL Server的物理进程。每个物理数据库包含 多个子数据库,它们之间相互隔离。子数 据库是一个分区,包含用户的数据以及 schema信息
•全局分区管理器维护分区映射表信息
•协议网关负责将用户的数据库连接请求转 发到相应的主分区上
•分布式基础部件(Fabric)用于维护机器 上下线状态,检测服务器故障并为集群中 的各种角色执行选取主节点操作
在这里插入图片描述
•SQL Azure的体系架构中包含了一个 虚拟机簇,可以根据工作负载的变化, 动态增加或减少虚拟机的数量
•每台虚拟机SQL Server VM(virtual machine)安装了SQL Server 数据库管 理系统,以关系模型存储数据
•通常,一个数据库会被散存储到3~5 台SQL Server VM中

6.6 云数据库实践,以阿里云RDS为实例

6.6.1 阿里云RDS简介

Relational Databases Service
RDS是阿里云提供的关系型数据库服务,它将直接运行于物理服务 器上的数据库实例租给用户,是专业管理的、高可靠的云端数据库服务
 RDS由专业数据库管理团队维护,还可以为用户提供数据备份、数 据恢复、扩展升级等管理功能,相对于用户自建数据库而言,RDS具有专业、高可靠、高性能、灵活易用等优点,能够帮助用户解决费时费 力的数据库管理任务,让用户将更多的时间聚焦在核心业务上
 RDS具有安全稳定、数据可靠、自动备份、管理透明、性能卓越,灵活扩容等优点,可以提供专业的数据库管理平台、专业的数据库优化 建议以及完善的监控体系

6.6.2 RDS中的概念

 RDS实例,是用户购买RDS服务的基本单位。
在实例中:
• 可以创建多个数据库
• 可以使用常见的数据库客户端连接、管理及使用数据
• 可以通过RDS管理控制台或OPEN API来创建、修改和删除数据库 (不允许你用本地的客户端去创建,只可以进行检查的查看)

 RDS数据库,是用户在一个实例下创建的逻辑单元
• 一个实例可以创建多个数据库,在实例内数据库命名唯一,所有数据库 都会共享该实例下的资源,如CPU、内存、磁盘容量等
• RDS不支持使用标准的SQL语句或客户端工具创建数据库,必须使用 OPEN API或RDS管理控制台进行操作

 地域指的是用户所购买的RDS实例的服务器所处的地理位置
RDS目前支持杭州、青岛、北京、深圳和香港五个地域,服务品质完全相 同。用户可以在购买RDS实例时指定地域,购买实例后暂不支持更改

 RDS可用区是指在同一地域下,电力、网络隔离的物理区域,可用区之间 内网互通,可用区内网络延时更小,不同可用区之间故障隔离
RDS可用区又分为单可用区和多可用区
• 单可用区是指RDS实例的主备节点位于相同的可用区,它可以有效控制云 产品间的网络延迟
• 多可用区是指RDS实例的主备节点位于不同的可用区,当主节点所在可用 区出现故障(如机房断电等),RDS进行主备切换后,会切换到备节点所 在的可用区继续提供服务。多可用区的RDS轻松实现了同城容灾

 磁盘容量是用户购买RDS实例时,所选择购买的磁盘大小
实例所占用的磁盘容量,除了存储表格数据外,还有实例正常运行所需 要的空间,如系统数据库、数据库回滚日志、重做日志、索引等

 RDS连接数,是应用程序可以同时连接到RDS实例的连接数量
• 任意连接到RDS实例的连接均计算在内,与应用程序或者网站能够支持 的最大用户数无关
• 用户在购买RDS实例时所选择的内存大小决定了该实例的最大连接数

6.6.3 购买和使用RDS数据库

 进入阿里云首页,阿里云官网(http://www.aliyun.com/)
 使用支付宝账户登录阿里云,账户登录成功后,点击“云数据库RDS“,即 可进入云数据库RDS页面。点击“立即购买”,即可获得RDS服务。新用 户可以免费体验半年的RDS服务。购买成功后,可以通过管理控制台对 RDS实例进行使用
 购买RDS实例
 管理RDS
 管理RDS实例
 新建RDS账号
 新建RDS数据库
 连接RDS数据库
 操作RDS数据库
1.购买RDS实例
进入RDS页面后,点 击“立即购买”,即 可跳到下图的购买页面
如果已经购买阿里云服务器ECS(Elastic Compute Service)若选择和ECS所在地域相同,ECS和RDS 之间可以以内网方式访问
提供虚拟机服务器ECS
在这里插入图片描述
2.管理RDS
购买RDS实例成功后,可以通过管理控制台,查看已开通的产品与服务 。点击云数据库RDS 进入管理界面如下图。我们可以创建新实例、对已 购买实例进行管理、续费和升级操作
在这里插入图片描述
在这里插入图片描述
3.管理RDS实例
•点击已购买RDS实例的管 理操作,可以查看该实例 的基本信息如下图
• 一个实例可以创建多个 数据库,在实例内数据库 命名唯一,所有数据库都 会共享该实例下的资源

4.新建RDS账号
• 点击“创建新账号”按钮后,可创建新的RDS账号,并选定需绑定 的数据库,以及输入账号密码和账号类型(读写权限)等信息
• MySQL实例支持最多创建50个账号,SQL Server实例支持最多创建 20个账号
• 创建完RDS账号后,还可以对RDS账号进行重置密码和修改操作

5.新建RDS数据库
• 点击“数据库管理”按钮后,可查看数据库基本信息,并可对数据 库进行创建、删除(需至少有1个数据库)的操作
• 点击“增加数据库”后,在弹出的界面中填写数据库相关信息,提 交后即可生效
• 此外,RDS数据库还可以是自建数据库迁移来的或是从其他RDS实 例中迁入的

6.连接RDS数据库
 使用客户端MySQL-Front 访问
 使用数据库管理工具Navicat_MySQL
 使用MySQL命令登录 命令格式如下: mysql -u user_name -h yuqianli.mysql.rds.aliyuncs.com -P3306 -pxxxx
 使用阿里云控制台iDB Cloud访问 RDS连接地址以及端口不需要再输入,只 需在“用户名”中输入数据库的账号,在 “密码”栏中输入数据库账号的密码,便 可以登录RDS。

7.操作RDS数据库
• 连接RDS数据库后,对数据库的操作与直接对本机MySQL数据库操作无 异。iDB Cloud登录数据库后的界面如下图所示:
• 在“iDB Cloud登录数 据库界面”的顶端可以看到iDB Cloud提供以下三种创建 表的方法:
可视化界面
SQL窗口
命令窗口
在这里插入图片描述

6.6.4 将本地数据库迁移到云端RDS数据库

假设我们有一个本地应用程序,它使用本地的MySQL数据库存取和管理 数据。现在,我们打算把本地MySQL数据库中的数据全部迁移到远程的 阿里云RDS数据库中,本地应用程序不迁移(依然运行在本地),但是 ,我们希望本地应用程序使用云端的RDS数据库服务进行数据存取和管 理。为此,需要执行以下两步操作:
第一步:把本地数据库迁移到云端的RDS数据库
第二步:修改本地应用程序配置,使用RDS数据库服务

如何把本地数据库迁移到云端的RDS数据库?
第1步:在本地数据库中创建一个迁移账号
第2步:设置迁移账号权限
第3步:确认本地数据库中的配置文件是否正确,需要确认本地数据 库中的MySQL配置文件my.cnf
在这里插入图片描述
第4步:登录本地数据库,通过命令查看是否为“ROW”模式
第5步:在RDS管理控制台对应的实例页面,点击“将数据迁移至RDS”按钮,在弹出的页面中,填写待迁移的本地数据库连接地址、数据库连接端 口、数据库账号、数据库密码,即可完成从本地迁移到云端

总结:
• 本章介绍了云数据库的相关知识。云数据库是在云计算兴起的大背景 下发展起来的,在云端为用户提供数据服务,用户不需要自己投资建 设软硬件环境,只需要向云数据库服务供应商购买数据库服务,就可 以方便、快捷、低成本地实现数据存储和管理功能
• 云数据库具有动态可扩展、高可用性、低成本、易用性、大规模并行 处理等突出优点,是大数据时代企业实现低成本的大规模数据存储的 理想选择
• 云数据库市场有很多代表性的产品可供选择。Amazon是云数据库市 场的先行者,谷歌和微软公司都开发了自己的云数据库产品,都在市 场上形成了自己的影响力
• 本章最后以阿里云RDS为例,介绍了云数据库的具体使用方法

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

A记录学习路线

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值