云数据库认识

news/2024/7/8 3:38:34 标签: 数据库

数据库概述

  • 说明
  • 数据库厂商概述
  • 数据库系统架构
    • UMP 系统概述
    • UMP 系统架构
      • Mnesia
      • RabbitMQ
      • ZooKeeper
      • LVS
      • Controller 服务器
      • Proxy 服务器
      • Agent 服务器
      • 日志分析服务器
    • UMP 系统功能
      • 容灾
    • 读写分离
      • 分库分表
      • 资源管理
      • 资源调度
      • 资源隔离

说明

  • 本文参考自林子雨老师的《大数据技术原理与应用(第三版)》教材内容,仅供学习和交流

数据库厂商概述

数据库厂商主要分为三类。
① 传统的数据库厂商,如 Oracle、IBM DB2 和 Microsoft SQL Server
② 涉足数据库市场的云数据库厂商,如 Amazon、Google、阿里、百度、腾讯
③ 新兴厂商,如 Vertica、LongJump 和 EnterpriseDB
在这里插入图片描述

Amazon 云数据库产品

  • Amazon 是云数据库市场的先行者。Amazon 除提供著名的 S3(Simple Storage Service) 存储服务和 EC2(Elastic Compute Cloud) 计算服务以外,还提供基于云的数据库服务 SimpleDB 和 DynamoDB。

  1. S3 (Simple Storage Service):
    • S3:对象存储服务,旨在提供可扩展、安全、耐用的存储解决方案。它允许用户通过网络存储和检索任意数量的数据,每个对象可以达到 5TB,并且支持多种数据类型,包括文本、图像、视频和其他多媒体文件。
    • S3 提供高可用性和持久性通过在不同的数据中心和设备之间复制数据来保护数据的安全性,并提供多种安全功能,如访问控制列表 (ACL)、存储桶策略和加密选项。
  2. EC2 (Elastic Compute Cloud):
    • EC2 :基于云的虚拟服务器服务,允许用户租用虚拟计算资源以运行应用程序。它提供了可伸缩性和灵活性,用户可以根据需要快速启动、配置和管理虚拟机实例。
    • EC2 实例的规格和配置可以根据用户需求进行调整,包括计算能力、内存、存储和网络性能等方面。用户可以选择不同类型的实例,如通用型、计算优化型、存储优化型等,以满足不同类型的工作负载需求。

  • 云的数据库服务 SimpleDB 和 DynamoDB。
  1. SimpleDB
    • SimpleDB 是 Amazon 公司开发的一个可供查询的分布式数据存储系统,是 Amazon 网页服务(Amazon Web Service,AWS)上的第一个 NoSQL 数据库服务,集合了 Amazon 的大量 AWS 基础设施
    • SimpleDB 是一种非关系型的数据库服务旨在提供简单而灵活的数据存储解决方案。它适用于需要快速构建和迭代的应用程序,特别是那些需要动态模式和可扩展性的应用。
    • SimpleDB 使用简单的数据模型,其中包含项目(Item)、属性(Attribute)和值(Value)。这种结构使得它更容易处理半结构化数据,并且能够以高可用性和可扩展性存储大量数据。
  2. DynamoDB
    • DynamoDB 一种全管理的、多区域、高可扩展的 NoSQL 数据库服务,专为云规模应用程序而设计。它提供快速的性能、无限制的扩展性和灵活的数据模型,可满足各种应用程序的需求。
    • DynamoDB 采用键-值对数据模型,同时支持文档和列族数据模型。它提供了自动化的数据复制、备份和恢复,以及内置的安全性和可用性功能,使得开发人员可以专注于应用程序的逻辑而无需担心基础设施的管理。
    • DynamoDB 采用“键值”存储,其所存储的数据是非结构化数据,不识别任何结构化数据,需要用户自己完成对值的解析。
    • Dynamo 系统中的键(key)不是以字符串的方式进行存储的,而是采用 md5_key(通过 MD5 算法转换后得到)的方式进行存储的,因此它只能根据 key 去访问,不支持查询。DynamoDB 使用固态盘,实现恒定、低延迟的读写时间,旨在扩展大容量的同时维持数据库的一致性。

Google 的云数据库产品

  • Google Cloud SQL 是谷歌推出的基于 MySQL 的云数据库,所有的事务都在云中,并由谷歌管理,用户不需要配置或者排查错误,仅依靠它来开展工作即可。由于数据在谷歌多个数据中心中复制,因此它永远是可用的。谷歌还将提供导入或导出服务,方便用户将数据带进或带出云。

Microsoft 的云数据库产品

  • Microsoft(微软)公司通过 SDS(SQL Data Service)提供 SQL Server 的关系数据库功能。微软公司对SDS 功能进行了扩充,并且重新命名为 SQL Azure。微软公司的 Azure 平台提供Web 服务集合,可以允许用户通过网络在云中创建、查询和使用 SQL Server 数据库,云中的 SQL Server服务器的位置对于用户而言是透明的。
  • SQL Azure 具有以下特性:
    ① 属于关系数据库。支持使用 Transact-SQL 来管理、创建和操作云数据库
    ② 支持存储过程。它的数据类型、存储过程和传统的 SQL Server 具有很大的相似性
    ③ 支持大量数据类型。包含了几乎所有典型的 SQL Server 的数据类型。
    ④ 支持云中的事务。支持局部事务,但是不支持分布式事务。
  • SQL Azure 的体系架构中包含了一个虚拟机簇,可以根据工作负载的变化,动态增加或减少虚拟机的数量。每台 SQL Server 虚拟机(Virtual Machine)安装了SQL Server数据库管理系统,并以关系模型存储数据。通常,一个数据库会被分散存储到 3~5 台 SQL Server VM 中。每台 SQL Server VM 同时安装 SQL Azure Fabric 和 SQL Azure 管理服务。不同 SQL Server VM 内的 SQL Azure Fabric 和管理服务之间会彼此交换监控信息,以保证整体服务的可监控性。SQL Azure负责数据库的数据复写工作,以保障 SQL Azure 的基本高可用性要求。
    在这里插入图片描述

数据库系统架构

  • 以阿里巴巴核心系统数据库团队开发的 UMP(Unified MySQL Platform)系统为例进行介绍。

UMP 系统概述

  • UMP 系统是低成本和高性能的 MySQL 云数据库方案。开发者通过网络从平台上申请 MySQL 实例资源,利用平台提供的单一入口来访问数据。UMP 系统把各种服务器资源划分为资源池,并以资源池为单位把资源分配给 MySQL 实例。系统中包含了一系列组件,这些组件协同工作,以对用户透明的形式提供主从热备、数据备份、迁移、容灾等一系列服务。
  • 系统内部将用户划分为 3 种类型:数据量和流量比较小的用户、中等规模用户,以及需要分库分表的用户。多个小规模用户共享一个 MySQL 实例,中等规模用户独占一个 MySQL 实例,需要分库分表的用户的多个 MySQL 实例可以共享同一台物理机,UMP 系统通过这些方式实现了资源的虚拟化,降低了整体成本。
  • UMP 系统通过“用 Cgroup限制 MySQL 进程资源”和“在 Proxy 服务器端限制 QPS”两种方式,实现了资源隔离、按需分配,以及限制CPU、内存和 I/O 资源;同时,UMP 系统还支持在不影响提供数据服务的前提下根据用户业务的发展进行动态扩容和缩容。

  • UMP 系统架构设计遵循了以下原则。
    ① 保持单一的系统对外入口,并且为系统内部维护单一的资源池。
    ② 消除单点故障,保证服务的高可用性。
    ③ 保证系统具有良好的可伸缩性,能够动态地增加、删减计算与存储节点。
    ④ 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保应用和数据的安全。

UMP 系统架构

  • UMP 系统中的角色包括 Controller 服务器、Web 控制台、Proxy服务器、Agent 服务器、日志分析服务器、信息统计服务器、愚公系统;依赖的开源组件包括 Mnesia、RabbitMQ、ZooKeeper 和 LVS。
    在这里插入图片描述

Mnesia

Mnesia 是一个分布式数据库管理系统,适合需要持续运行和具备软实时特性的Erlang 应用,是构建电信应用的控制系统平台—开放式电信平台(Open Telecom Platform,OTP)的一部分。

  • Erlang 是一种结构化、动态类型的编程语言,内建并行计算支持,非常适合构建分布式、软实时并行计算系统。
  • Mnesia 支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可以线性扩展到至少 50 个节点。Mnesia 的数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点来改进容错性。Mnesia 的这些特性,使其在开发云数据库时被用来提供分布式数据库服务。

RabbitMQ

  • RabbitMQ 是一个用 Erlang 开发的工业级的消息队列产品,作为消息传输中间件来使用,可以实现可靠的消息传送。UMP 集群中各个节点之间的通信,不需要建立专门的连接,都是通过读写队列消息来实现的。

ZooKeeper

  • ZooKeeper 是高效和可靠的协同工作系统,提供分布式锁之类的基本服务,用于构建分布式应用,减轻分布式应用程序所承担的协调任务。在 UMP 系统中,ZooKeeper 主要发挥 3 个作用:
    • 作为全局的配置服务器:UMP 系统把多台服务器相同的配置信息交给 ZooKeeper 来管理,把配置信息保存在 ZooKeeper 的某个目录节点中,然后在所有需要修改的服务器中对这个目录节点设置监听(监控配置信息的状态),一旦配置信息发生变化,每台服务器就会收到 ZooKeeper 的通知,然后从 ZooKeeper 获取新的配置信息
    • 提供分布式锁:UMP 集群中部署了多个 Controller 服务器,为了保证系统的正确运行,对于某些操作,在某一时刻,只能由一个服务器执行,而不能由多台服务器同时执行
    • 监控所有 MySQL 实例:UMP 系统借助于 ZooKeeper 实现对所有MySQL 实例的监控。每个 MySQL 实例在启动时都会在 ZooKeeper 上创建一个临时类型的目录节点,当某个 MySQL 实例挂掉时,这个临时类型的目录节点也随之被删除。

LVS

  • UMP 系统借助于 LVS 来实现集群内部的负载均衡。
  • Linux 虚拟服务器(Linux Virtual Server,LVS),是虚拟的服务器集群系统。LVS 采用 IP负载均衡技术和基于内容的请求分发技术。调度器是 LVS 集群系统的唯一入口点。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
  • 整个服务器集群的结构对客户是透明的,而且无须修改客户端和服务器端的程序。

Controller 服务器

Controller 服务器向 UMP 集群提供各种管理服务。Controller 服务器上运行了一组 Mnesia 分布式数据库服务,其中存储了各种系统元数据,主要包括集群成员、用户的配置和状态信息,以及用户名与后端 MySQL 实例地址的映射关系(或称为“路由表”)等。当其他服务器组件需要获取用户数据时,可以向 Controller 服务器发送获取数据请求。
为了避免单点故障,保证系统的高可用性,UMP 系统中部署了多台 Controller 服务器,然后由 ZooKeeper 的分布式锁功能来帮助选出一个“总管”,负责各种系统任务的调度和监控。

Proxy 服务器

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

Agent 服务器

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

日志分析服务器

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

UMP 系统功能

UMP 系统构建在一个大的集群之上,通过多个组件的协同作业,整个系统实现了对用户透明的容灾、读写分离、分库分表、资源管理、资源调度、资源隔离和数据安全等功能。

容灾

  • 为了实现容灾,UMP 系统会为每个用户创建两个 MySQL 实例,一个是主库,一个是从库,而且这两个 MySQL 实例之间互相把对方设置为备份机,任意一个 MySQL 实例上面发生的更新都会复制到对方。同时,Proxy 服务器可以保证只向主库写入数据。
  • 主库和从库的状态是由 ZooKeeper 负责维护的,ZooKeeper 可以实时监听各个 MySQL 实例的状态,一旦主库死机,ZooKeeper 可以立即感知到,并通知 Controller 服务器。Controller 服务器会启动主从切换操作,在路由表中修改用户名与后端 MySQL 实例地址的映射关系,并把主库标记为不可用,同时,借助于消息队列中间件 RabbitMQ 通知所有 Proxy 服务器修改用户名与后端 MySQL 实例地址的映射关系。通过这一系列操作后,主从切换完成,用户名就会被赋予一个新的可以正常使用的 MySQL 实例,而这一切对于用户自己而言是完全透明的。

读写分离

  • 由于每个用户都有两个 MySQL 实例(主库和从库),因此 UMP 系统可以充分利用主从库实现用户读写操作的分离,实现负载均衡。
  • UMP 系统实现了对于用户透明的读写分离功能,当整个功能被开启时,负责向用户提供访问 MySQL 数据库服务的 Proxy 服务器,就会对用户发起的 SQL语句进行解析。如果该 SQL 语句属于写操作,就直接发送到主库;如果该 SQL 语句属于读操作,就会被均衡地发送到主库和从库上执行。
  • 特殊情况:用户刚刚写入数据到主库,数据还没有被复制到从库之前,用户从库读这个数据,导致用户要么读不到数据,要么读到数据的旧版本。为避免这种情况的发生,UMP 系统在每次用户写操作发生后都会开启一个计时器,如果用户在计时器开启的 300 ms 内读数据,不管是读刚写入的这些数据还是其他数据,都会被强行分发到主库上去执行读操作。

分库分表

  • UMP 支持对用户透明的分库分表(Shard / Horizontal Partition),但是用户在创建账号的时候需要指定类型为多实例,并且设置实例的个数,系统会根据用户设置来创建多组 MySQL 实例。
  • 当采用分库分表时,系统处理用户查询的过程如下:首先,Proxy 服务器解析用户 SQL 语句,提取重写和分发 SQL 语句所需要的信息;其次,对 SQL 语句进行重写,得到多个针对相应 MySQL实例的子语句,然后把子语句分发到对应的 MySQL 实例上执行;最后,接收来自各个 MySQL实例的 SQL 语句执行结果,合并得到最终结果。

资源管理

  • UMP 系统采用资源池机制来管理数据库服务器上的 CPU、内存、磁盘等计算资源,所有的计算资源都放在资源池内进行统一分配,资源池是为 MySQL 实例分配资源的基本单位。

资源调度

  • UMP 系统通过 MySQL 实例的迁移来实现资源调度。借助于阿里巴巴中间件团队开发的愚公系统,UMP 系统可以实现在不停机的情况下动态扩容、缩容和迁移。

资源隔离

  • 当多个用户共享同一个 MySQL 实例或者多个 MySQL 实例共存在同一台物理机上时,为了保护用户应用和数据的安全,必须实现资源隔离。
    在这里插入图片描述

http://www.niftyadmin.cn/n/5450609.html

相关文章

网络七层模型之表示层:理解网络通信的架构(六)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【超图 SuperMap3D】【基础API使用示例】54、超图SuperMap3D -鼠标左键拖拽绘制圆

前言 引擎下载地址:[添加链接描述](http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id2524) 通过左键按下拖拽的方式在地图上进行贴地的圆绘制 完整代码拷贝直接本地运行即可查看效果效果 核心代码 // 绘制圆形 function startDrawCircleHand…

字符驱动程序-LCD驱动开发

一、驱动程序的框架 总共分为五步: 1、自己设定或者系统分配一个主设备号 2、创建一个file_operations结构体 这个结构体中有操作硬件的函数,比如drv_open、drv_read 3、写一个注册设备驱动函数 需要register_chrdev(major,name,结构体)&#xff0…

【代码片】图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D

Graphics2D图像压缩 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File;public class ImageResolutionModifier {public static void main(String[] args) {// 输入图片路径和输出图片路径String inputImagePath …

web渗透测试漏洞流程:红队目标信息收集之资产搜索引擎收集

web渗透测试漏洞流程 渗透测试信息收集---域名信息收集1.域名信息的科普1.1 域名的概念1.2 后缀分类1.3 多重域名的关系1.4 域名收集的作用1.5 DNS解析原理1.6 域名解析记录2. 域名信息的收集的方法2.1 基础方法-搜索引擎语法2.1.1 Google搜索引擎2.1.1.1 Google语法的基本使用…

你在测试金字塔的哪一层(下)

​在《你在测试金字塔的哪一层(上)》中介绍了自动化测试的重要性以及测试金字塔。测试金字塔分为单元测试、服务测试、UI测试,它们分别是什么呢?本期文章让我们一起详细看看测试金字塔的不同层次。 一、单元测试 单元测试是指对程…

docker配置镜像加速后容器和镜像消失

一、问题描述 根据阿里云给docker配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://gt6j98xi.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl rest…

04、Lua 数据类型

Lua 数据类型 Lua 数据类型nil&#xff08;空&#xff09;boolean&#xff08;布尔&#xff09;number&#xff08;数字&#xff09;string&#xff08;字符串&#xff09;table&#xff08;表&#xff09;function&#xff08;函数&#xff09;thread&#xff08;线程&#xf…