img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 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 实例共存在同一台物理机上时,为了保护用户应用和数据的安全,必须实现资源隔离。
    在这里插入图片描述

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

提升。**

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐