河海大学商学院的云计算课程期末复习笔记上半部分
只针对考点所以不太全面,留给未来需要的学弟学妹
本文主要讲了Google云计算、Amazon AWS、微软Azure这三套云计算体系的重要知识点
云计算是一种提供计算服务的模式,包括服务器、存储、数据库、网络、软件、分析等服务,都通过互联网(“云”)提供给全世界的用户。根据服务类型,云计算通常可以分为三类:基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。
以下是这三种服务类型的详细介绍和典型例子:
以上就是云计算的三种主要服务类型。需要注意的是,这三种服务类型并非互斥,很多云服务提供商会同时提供这三种服务。
GFS设计初衷是满足Google大数据存储和处理的需求。系统由一个主服务器(Master Server)和多个分块服务器(Chunk Server)组成,以及一系列客户端库(Client)。
GFS文件写入流程大致为:
升级原理
?
分布数据处理
MapReduce是Google设计的一种大数据处理编程模型,Apache Hadoop是该模型的一个著名开源实现。
MapReduce主要包括三个阶段:Map阶段、Shuffle阶段和Reduce阶段。在Map阶段,输入数据被分割成多个块,并在集群的各节点上并行处理,生成一系列的键值对。接下来的Shuffle阶段会把这些键值对按照键进行排序和分组,这样就可以将具有相同键的值集中到一起。然后在Reduce阶段,根据键值对的键来对相应的值进行聚合操作。
以下是这个过程的一个示例:
假设我们需要处理一个大型文本文件,目标是计算每个单词出现的次数。我们可以使用MapReduce来完成这个任务。
这样,通过MapReduce,我们就可以在一个大规模的集群上,高效地处理大量的数据。
- 具体执行过程:
- MapReduce 的大致执行过程如下图所示:
图中的6个步骤对应如下:
- 先将输入文件分成 M个数据片段,每个数据片段的大小一般从 16MB 到 64MB。然后用户程序在集群中创建大量程序副本。
- 副本程序中除了一个 master,其他都是 worker 程序,并由 master 分配 M个 map 任务和 R个 reduce 任务。master 将一个 map 任务或 reduce 任务分配给一个空闲的 worker。
- 被分配了 map 任务的 worker 程序读取对应的输入数据片段,解析并处理键值对,生成并输出中间键值对结果,并缓存在内存缓冲区中。
- 周期性地,缓冲区中的中间结果会被用户指定的切分(partition)函数(例如
hash(key) mod R
)切分为 R 个部分,并存入到本地磁盘中。任务完成时,缓存在本地磁盘上的存储位置将被回传给 master,由 master 负责把这些存储位置再传送给 reduce worker。- Reduce worker 程序接收到 master 程序发来的数据存储位置信息后,使用 RPC 从 map worker 所在主机的磁盘上读取这些缓存数据,然后通过对 key 进行排序后使得具有相同 key 值的数据聚合在一起。如果中间数据太大无法在内存中完成排序,那么就要在外部进行排序。
- Reduce worker 程序遍历排序后的中间数据,对于每一个唯一的中间 key 值,reduce worker 将这个 key 值和它相关的 value 值的集合传递给用户自定义的 reduce 函数进行处理,处理输出被追加到所属分区的输出文件。由于是按顺序对排序后的中间数据进行处理,所以每个输出文件分片内部是有序的。
Chubby是Google的分布式锁服务。它通过提供粗粒度的锁以及存储小量数据的能力,为Google的其他系统提供协同服务。
主服务器出错
租约机制
举个例子,假设你正在用Google Docs编写文档,这时你的同事也想同时编辑这份文档。Chubby锁可以在这个过程中防止你们同时修改同一部分文档,造成冲突。当你编辑一个段落时,你的客户端会获取一个Chubby锁,保证在你编辑这个段落时,其他人无法修改。如果你的租约到期没有续租,Chubby就会认为你已经停止编辑,释放锁,允许其他人编辑这个段落。
视频:https://www.bilibili.com/video/BV1bj41137BY/
Bigtable是Google的分布式存储系统,主要用于存储结构化数据。Bigtable主要由三个部分组成:客户端程序库(Client Library)、一个主服务器(Master Server)和多个子表服务器(Tablet Server)。
Bigtable中的数据按照行和列进行组织,每一行由行键(row key)进行唯一标识。
<行关键字,列关键字,时间戳> -> 内容
行标签如何存储
行标签的倒排的优点
同一地址域的网页会被存储在表中的连续位置,有利于用户查找和分析
倒排便于数据压缩,可以大幅提高压缩率
解释一下:
域名:
- “www.example.com/news” 中,“example.com” 是主域名,“www” 是这个主域名下的一个子域名,而 “/news” 是这个子域名下的一个路径或者页面。
- “news.example.com” 中,“example.com” 仍然是主域名,但是这次 “news” 是这个主域名下的一个子域名。
子域名是主域名的一个分支,通常用来表示主域名下的不同功能或服务。比如,很多网站会有 “blog.example.com” 来托管他们的博客,或者 “shop.example.com” 来托管他们的在线商店。
Bigtable 的设计者选择使用倒序的 URL 主要是为了更好地优化对“域名”的查询效率,尤其是当 URL 的子域名层级较多时,例如:
- news.example.com
- sports.example.com
- finance.example2.com
如果按照正序 URL 排序,上述三个 URL 中,相同主域名(example.com 或example2.com)的页面不一定会被放在一起,而按照倒序排序则可以做到这一点:
- com.example.news
- com.example.sports
- com.example2.finance
tablet
子表服务器(tablet server)是Bigtable中负责处理一个或多个子表(tablet)的服务器。它处理子表的读取和写入请求,并在必要时将子表分割成更小的单元。
SSTable
子表实际组成
子表地址组成
三种形式的数据压缩
子表的数据最终还是写到GFS里的,子表在GFS里的物理形态就是若干个SSTable文件
集群包括主服务器和子服务器,主服务器负责将片分配给子服务器,而具体的数据服务则全权由子服务器负责。
但是不要误以为子服务器真的存储了数据(除了内存中memtable的数据),数据的真实位置只有GFS才知道,主服务器将子表分配给子服务器的意思应该是,子服务器获取了子表的所有SSTable文件名,子服务器通过一些索引机制可以知道所需要的数据在哪个SSTable文件,然后从GFS中读取SSTable文件的数据,这个SSTable文件可能分布在好几台chunkserver上。
Bigtable 使用了一些性能优化的技术:BWT(Burrows-Wheeler Transform)和布隆过滤器。
BWT (Burrows-Wheeler Transform):它是一种用于数据压缩的算法,主要用于对字符串数据进行变换。在 BWT 中,字符串的字符会按照某种顺序进行排列,然后选择一个新的字符串,这个新的字符串中的字符顺序会提高后续压缩算法(如 move-to-front transform, run-length encoding)的效率。换句话说,BWT 通过改变字符串中字符的顺序,将原本随机分布的字符变得更加集中,从而增加了压缩的效率。值得注意的是,这种变换是可逆的,也就是说经过 BWT 变换和压缩的数据,可以被完整地恢复出来。???
布隆过滤器 (Bloom Filter):布隆过滤器是一种空间效率极高的概率数据结构,用于检测一个元素是不是集合中的成员。它的主要特点是存在一定的误报率,但绝对不会漏报。误报率是指查询一个不存在于集合中的元素,布隆过滤器可能会错误地认为它在集合中;漏报则是指查询一个存在于集合中的元素,布隆过滤器不会错误地认为它不在集合中。在 Bigtable 中,布隆过滤器用于减少不必要的磁盘读取操作:当我们查询一个元素时,先用布隆过滤器判断一下,如果判断结果为“不在”,则可以避免进行磁盘读取;如果判断结果为“在”,则需要进一步从磁盘读取数据来确定。
假设我们有一份电话簿,我们需要判断一个电话号码是否在电话簿中。如果我们直接查询电话簿,那么可能需要翻阅整本电话簿,这需要很长的时间。而如果我们使用布隆过滤器,那么我们可以在很短的时间内得到答案。我们首先将电话簿中的所有电话号码添加到布隆过滤器中,这个过程会生成一个位数组。然后,当我们需要查询一个电话号码是否在电话簿中时,我们只需要查询这个位数组即可。如果布隆过滤器判断结果为“不在”,那么我们就可以确定这个电话号码肯定不在电话簿中,从而避免了不必要的查询。如果布隆过滤器判断结果为“在”,那么我们还需要进一步查询电话簿来确定。这样,大多数情况下,我们可以在很短的时间内得到答案,从而大大提高了查询效率。
总的来说,BWT 是用于提高数据压缩效率的算法,而布隆过滤器是用于减少不必要的磁盘读取,从而提高查询效率的数据结构。两者在 Bigtable 中都发挥了重要的作用。
https://www.jianshu.com/p/7c4d0ab911f6
Megastore是Google的一个分布式存储系统,它是在Bigtable基础之上构建的,为用户提供了包括ACID事务在内的一些关系数据库特性。
Megastore的基本架构包括以下几个部分:
Entity Group: Megastore将数据组织为实体组(Entity Group),每个实体组内部都是按照Bigtable的方式存储的,每个实体组都可以提供ACID语义的事务(就像一个小的数据库)。实体组之间则无法提供ACID事务。
Replicas: 为了提高数据的可用性和容错能力,Megastore会将每个实体组的数据复制到多个物理位置。
Paxos: Megastore使用Paxos算法来保证每个实体组的多个副本之间的一致性。Megastore的每个写操作都需要经过Paxos的多数派同意才能提交。
Catch-up: 为了保证不同地域之间数据的一致性,Megastore提供了Catch-up机制,即当某个副本落后于其他副本时,它可以通过Catch-up过程来获取丢失的更新。
Product: Megastore被广泛应用在Google的许多产品中,例如Google App Engine的数据存储就是基于Megastore实现的。
ACID是指数据库事务正确执行的四个基本特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
A(Atomicity)原子性:这是指整个事务是不可分割的单位,事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务的操作,系统保证所有操作要么全部完成,要么全部不做,不可能停滞在中间环节。事务的原子性是通过Undo和Redo来实现的。
C (Consistency)一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态。一致性与业务有关,如A账户给B账户转账,不管转账是否成功,A账户的出账金额与B账户的进账金额必须一致,这就是业务一致性。
I (lsolation)- 隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这使得每个事务都感觉不到系统中有其他事务并行执行。
D (Durability) 持久性:一旦事务提交,则其所做的修改就会永久保存在数据库中。即使在事务提交后,系统出现崩溃,重新启动后也能保证事务的持久性。
完整副本:Bigtable中存储完整的日志和数据。
见证者副本:在Paxos算法执行过程中无法产生一个决议时参与投票,因此对于这个副本,Bigtable只存储其日志而不存储具体数据。
只读副本:无法参与投票,作用只是读取到最近过去某一个时间点的一致性数据。如果读操作能容忍这些过期数据,只读副本能够在不加剧写延迟的情况下将数据在较大的地理空间上进行传输。
Megastore的部署需要通过一个客户端函数库和若干个的服务器。应用程序连接到这个客户端函数库,这个函数库执行Paxos算法,还有一个称为协调者(Fast Reads)的服务,要理解这个服务的作用,首先需要了解快速读和快速写机制
你可以把 Megastore 想象成一个超大的图书馆,这个图书馆在全球有很多分馆,也就是服务器。在这些分馆中,有些图书馆(完整副本)储存了全部的书籍和详细的借阅记录。还有一些图书馆(见证者副本)并没有储存书籍,但他们记录了所有的借阅行为。另外,还有一些图书馆(只读副本)只允许读者阅读书籍,但并不记录借阅信息。当读者想借书时,就需要连接到客户端函数库(即借阅台),借阅台会执行一套流程(类似Paxos算法)来保证借书的流程正确无误。协调者服务就像一个快速查询服务,能快速告诉你想找的书在哪里,这就是快速读的机制。
把这个过程想象成你去超市购物。你手上有一个购物清单,这个清单在你进超市之前需要保证是最新的,也就是说你在家里做的所有的改动(比如添加或删除某个商品)都已经更新到这个清单上,这个过程就是Catchup。然后你按照清单在超市进行购物,这就是数据读取的过程。如果在购物过程中,你突然发现清单上少了某个商品,那么你就需要回家再次更新清单,这就是保证清单(也就是副本)是最新的。
云计算 | AWS | Dynamo
Dynamo
Windows Azure是一个基于云的应用程序执行环境,提供了计算服务、存储服务以及与应用程序通信的各种服务。在Azure中,存储层使用了多副本复制机制,通过复制数据到不同的物理节点来实现数据的持久性和可靠性。
两者的主要区别在于其设计目标和实现方法。Dynamo注重高可用性和扩展性,适合非结构化数据,使用了最终一致性模型;而Azure是一个更通用的平台,提供了计算、存储和通信等服务,适合存储结构化数据,并使用了强一致性模型。
P96
Dynamo是无中心的架构,每个成员节点需要保存其他节点的路由信息
在分布式系统中,成员资格和错误检测是非常重要的问题。成员资格是指确定系统中有哪些节点正在参与运行。错误检测是指确定系统中哪些节点可能发生了故障。
成员资格(Membership) 是指在一个分布式系统中,确定哪些节点是活跃的,也就是当前正在参与运行的节点。由于在一个分布式系统中,节点可能会因为故障或者其他原因离线,所以需要一个机制来跟踪和识别出哪些节点是在线的。
错误检测(Failure Detection):是指在分布式系统中,识别出哪些节点发生了故障。这是因为在一个大规模的分布式系统中,故障是常态。可能由于硬件故障、网络问题等各种原因导致某些节点无法工作。
成员资格和错误检测通常是通过一种名为"Gossip(闲聊)"的协议来实现的。在这个机制中,每个节点周期性地向其他节点发送消息,表示它还“活着”。如果某个节点在一段时间内没有收到另一个节点的消息,那么它就会认为那个节点已经离线或发生了故障。
地理区域和可用区域
EC2是Amazon的Elastic Compute Cloud的简称,提供了可伸缩的计算能力。用户可以在Amazon的计算环境中虚拟机器上启动应用程序。各种各样的服务,比如提供GPU
AWS全球基础设施是分布在世界各地的云基础设施。这些基础设施包括地理区域和可用区域。
在应用架构中融入这种思想,就可以提高应用的可用性和容灾能力。例如,通过在多个可用区域部署应用,即使某个可用区域出现问题,应用也可以在其他可用区域正常运行。
S3即Simple Storage Service,是Amazon提供的一种对象存储服务,它以对象为单位,提供了在互联网上存储和检索任意数量的数据的能力。
我们可以把桶和对象的关系,类比为现实生活中的一个大仓库(Bucket)和仓库里的各种商品(Object)。仓库是用来存放各种商品的地方,而商品则是仓库中的基本单位。每个商品都有自己的标签(例如商品的名称,生产日期等等),这就像是对象的元数据。而在仓库中,每个商品都有其固定的位置,这就像是对象在S3桶中的键。
在这个例子中,如果我们想找到特定的商品,我们首先需要知道它在哪个仓库(桶),然后根据商品的标签(元数据)或者位置(键),就可以找到这个商品(对象)。
其与关系型数据库的区别
课本P108
AWS为MySQL提供了一种称为Amazon RDS的托管服务。它处理数据库的许多日常管理任务,如备份、打补丁和故障转移等。用户可以选择在单个可用区内运行RDS实例,或者为了更高的可用性和容错能力,可以在多个可用区之间进行复制。
RDS(Relational Database Service)是Amazon Web Services (AWS) 提供的一种关系型数据库服务。MySQL则是一种开源的关系型数据库管理系统(RDBMS)。因此,你可以将MySQL看作是一种"产品",而RDS是一个"服务"。
在RDS服务中,你可以选择不同类型的数据库引擎,包括MySQL、PostgreSQL、MariaDB、Oracle、SQL Server等。因此,MySQL是RDS支持的数据库之一。使用AWS的RDS服务,用户可以很方便地部署、扩展和管理数据库。RDS会为用户处理很多数据库运维的工作,如备份、软件补丁更新、故障转移等。
简单地说,你可以直接下载并在自己的服务器上安装运行MySQL,这需要你自己处理所有的维护和管理工作。而如果你选择使用AWS的RDS服务并选择MySQL作为数据库引擎,那么AWS会帮你处理许多运维任务,你只需要专注于使用数据库。
CDN,也就是内容分发网络,是一种在不同地理位置的服务器上复制内容,以便用户能更快地访问到它的服务。通过使用CDN,你可以将你的内容更靠近你的用户,这样他们获取内容的速度就会更快。
区别:
Amazon CloudFront和Azure CDN都是这种服务的例子。他们都可以把你的内容(例如网站的静态和动态内容,视频流,API调用等)缓存在全球范围内的边缘位置,以便更快地将内容提供给用户。
???这俩的区别是啥,Azure应该是有缓存的
举个例子,假设你在美国东部有一个网站,你的用户遍布全球。如果没有使用CDN,来自澳大利亚的用户需要将请求发送到美国东部的服务器,然后再将结果返回。这会增加延迟。但是,如果你使用了CDN,你的网站内容将被复制到全球各地的服务器,包括澳大利亚。因此,来自澳大利亚的用户现在可以从他们附近的服务器获取内容,从而显著减少延迟。
Azure 服务平台为应用程序提供了三种类型的角色(Role)来运行代码:Web Role、Worker Role 和 VM Role。这些角色定义了运行在 Azure 服务平台上的应用程序实例的运行环境。
- Web Role: Web Role就像是一家提供餐饮服务的餐厅。它可以接受和处理客户端(用户)的请求,类似于餐厅为饿了的人提供食物。在Azure中,Web Role是一种运行在微软公共云环境中的服务,专门处理外部HTTP或HTTPS请求,就像在餐厅中处理订单一样。
- Worker Role: Worker Role就像是餐厅后厨的厨师,负责烹饪食物。在Azure中,Worker Role则是执行在后台运行的任务,如处理来自Web Role的数据,运行脚本或者其他长时间运行的任务。它们就像厨师,把原材料(数据)加工成美食(有用的信息)。
- VM Role: VM Role就像是租用的公寓,你可以按照自己的需求装修,放置家具。在Azure中,VM Role提供的是一种虚拟机环境,用户可以按照自己的需求来配置这个环境,安装所需要的软件。这种角色让用户有更大的自由度来定义他们的云服务环境,就像你可以在租用的公寓中自由布置一样。
不同的SQL Azure数据库之间的同步是使用“轮幅式(hub-and-spoke)”模型
在这个模型中,中心节点(Hub)负责接收和分发数据,边缘节点(Spokes)则负责存储数据。
这里Hub是SQL Azure数据库,其他的Hub可以是SQL Azure数据库、也可以是SQL Server数据库
我们可以将这个模型比喻为航空公司的路线网络。在这个例子中,航空公司的大型中枢机场(例如亚特兰大机场或者阿姆斯特丹机场)就像是中心节点,其他较小的机场就像是边缘节点。所有的航班(数据)都会经过中枢机场(Hub)然后被分发到不同的目的地(Spokes)。
在Azure的数据中心网络中,也采用了类似的模型。其中的主数据中心(Hub)负责接收所有的用户数据,并将数据同步到各个边缘数据中心(Spokes)。这样,无论用户在哪里访问数据,都可以得到最快的响应时间,因为他们总是从最近的数据中心获取数据。
而且,如果某个边缘数据中心发生故障,用户的数据仍然可以从主数据中心或者其他边缘数据中心获取,这样确保了数据的可用性和一致性。