云数据库认识

云数据库概述

  • 说明
  • 云数据库厂商概述
    • Amazon 云数据库产品
    • Google 的云数据库产品
    • Microsoft 的云数据库产品
  • 云数据库系统架构
    • 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.mzph.cn/news/771117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刚删除的文件怎么找回?刚删除的文件重新找回方法

电脑是我们办公、生活和娱乐必不可缺少的设备,里面存储着我们很多重要的文件。但是,有时候我们不小心误删了文件,或者是不小心删除了一些重要的数据等,要怎么进行恢复呢?今天,小编就专门给大家讲下刚删除的文件重新找回方法。 方法一: 文件不小心删除了,请立即停止对硬…

JavaParser 手动安装和配置

目录 前言 一、安装 Maven 工具 1.1 Maven 软件的下载 1.2 Maven 软件的安装 1.3 Maven 环境变量配置 1.4 通过命令检查 Maven 版本 二、配置 Maven 仓库 2.1 修改仓库目录 2.2 添加国内镜像 三、从 Github 下载 JavaParser 3.1 下载并解压 JavaParser 3.2 从路径打…

蓝桥杯单片机快速开发笔记——利用定时器计数器设置定时器

一、基本原理 参考本栏http://t.csdnimg.cn/iPHN0 二、具体步骤 三、主要事项 如果使用中断功能记得打开总中断EA 四、示例代码 void Timer0_Isr(void) interrupt 1 { }void Timer0_Init(void) //10毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0;…

python网络爬虫实战教学——requests的使用(2)

文章目录 专栏导读1、POST请求2、响应3、Cookie设置 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程…

Typecho 博客文章评论添加显示 UserAgent(UA)的功能

本篇文章实现了为 Typecho 博客文章评论添加显示 UserAgent(UA)的功能本功能可替代 UserAgent 插件,更美观、简洁且好看 效果显示 大概就是这样了,实际效果请看我的评论! 目前可以识别的操作系统以及浏览器 食用方…

Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)

目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QLabel组件-显示图像或文本 2.2 QCalendarWidget组件-日历简单的使用 2.3 QLCDNumber组件-控件作时钟的显示 2.4 QProgressBar组件-模拟手机电池充电 2.5 QFrame组件-绘制水平/垂直线 Display Widgets将分…

【C++练级之路】【Lv.16】红黑树(冰与火的碰撞,红与黑的史诗)

快乐的流畅:个人主页 个人专栏:《C语言》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、红黑树的概念二、红黑树的模拟实现2.1 结点2.2 成员变量2.3 插入情况一:uncle在左&#xff…

【Python】Scrapy整合FastAPI实现爬虫API 附大量示例

文章目录 前言1. 网页分析入门1.1 基本原理1.2 Scrapy 原理 2. 创建项目2.1 创建Scrapy项目2.2.1 创建Scrapy项目2.2.2 创建Spider2.2.3 执行Demo 2.2 引入FastAPI 2. 获取Cookie3. 数据建模3.1 Scrapy 数据建模3.2 SQLAlchemy 创建实体类 3. 分析网页3.1 xpath 分析3.2 css 分…

Kotlin协程CoroutineScope命名空间CoroutineName,Kotlin

Kotlin协程CoroutineScope命名空间CoroutineName&#xff0c;Kotlin import kotlinx.coroutines.*fun main(args: Array<String>) {val myName CoroutineName("fly")runBlocking {CoroutineScope(Dispatchers.IO).launch {repeat(3) {val name coroutineCont…

厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件开发之功能结构篇

厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件开发之功能结构篇 好几年前&#xff0c;应朋友之邀&#xff0c;为其工厂的厨余垃圾处理设备研发一套用于对现场的生产及维护进行远程查看、管理和质量监控的厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件系统。 因为…

9.串口通信

串口基本认识 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方 式的扩展接口。串行接口&#xff08;Serial Interface&#xff09;是指数据一位一位地顺序传送。其特点是通信线路简 单&#x…

搭建 canal 监控mysql数据到RabbitMQ

项目需求&#xff1a; 使用canal监控mysql某个库某个表&#xff0c;或者多个库&#xff0c;多个表---- update/inster/create 操作&#xff0c; 系统版本mysql版本java版本canal版本rabbitMQ版本Rocky 9.2MySQL 8.0.26openjdk 11.0.221.1.6rabbitmq-server 3.12.4 mysql 配置…

淘宝扭蛋机小程序开发:开启线上扭蛋新体验

随着科技的飞速发展和移动互联网的普及&#xff0c;线上娱乐方式也变得越来越多样化。为了满足广大用户对于新鲜、有趣的娱乐体验的需求&#xff0c;我们决定开发一款淘宝扭蛋机小程序&#xff0c;为用户带来全新的线上扭蛋乐趣。 淘宝扭蛋机小程序将结合淘宝平台的优势资源&a…

flask_restful渲染模版

渲染模版就是在 Flask_RESTful 的类视图中要返回 html 片段代码&#xff0c;或 者是整个html 文件代码。 如何需要浏览器渲染模板内容应该使用 api.representation 这个装饰器来定 义一个函数&#xff0c; 在这个函数中&#xff0c;应该对 html 代码进行一个封装&#xff…

基于nginx 动态 URL反向代理的实现

背景&#xff1a; 我们在项目中在这样一个场景&#xff0c;用户需要使用固定的软件资源&#xff0c;这些资源是以服务器或者以容器形式存在的。 资源以webAPI方式在内网向外提供接口&#xff0c;资源分类多种类型&#xff0c;每种类型的资源程序和Wapi参数都一样。这些资源部属…

学习SpringBoot笔记--知识点(1)

目录 SpringBoot介绍 创建一个最基础的springbooot项目 使用Spring Initializr创建springboot项目 Spring Boot 自动配置机制 SpringBoot常用注解 1.组件注册 2.条件注解 3.属性绑定 SpringBoot自动配置流程​编辑 学习SpringBoot的方法 ​编辑 SpringBoot日志配置…

2015年认证杯SPSSPRO杯数学建模A题(第一阶段)绳结全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 A题 绳结 原题再现&#xff1a; 给绳索打结是人们在日常生活中常用的技能。对登山、航海、垂钓、野外生存等专门用途&#xff0c;结绳更是必不可少的技能之一。针对不同用途&#xff0c;有多种绳结的编制方法。最简单的绳结&#xff0c;有时称…

PyCharm环境下Git与Gitee联动:本地与远程仓库操作实战及常见问题解决方案

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言下载及安装GitGit的使用设置用户签名设置用户安全目录Git基本操作Git实操操作 Pyc…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布,并上传镜像到阿里镜像私仓

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布&#xff0c;并上传镜像到阿里镜像私仓一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、…

Webpack生成企业站静态页面 - 项目搭建

现在Web前端流行的三大框架有Angular、React、Vue&#xff0c;很多项目经过这几年的洗礼&#xff0c;已经都 转型使用这三大框架进行开发&#xff0c;那为什么还要写纯静态页面呢&#xff1f;比如Vue中除了SPA单页面开发&#xff0c;也可以使用nuxt.js实现SSR服务端渲染&#x…