你必须知道的云计算知识(上)

最近订阅学习了《深入浅出云计算》专栏,一口气学完之后,做了一些总结笔记形成此文,特分享与你,希望对你有所帮助!本文为上半部分,主要总结了IaaS篇的核心要点。

零、开篇词

1、开发者为何要学习云计算?

  (1)历经多年发展已成熟并成为一种潮流,企业数字化转型的组成部分。

  (2)产业的发展必然影响个体:

  未来更多的应用都会运行在云上,架构模式和思维方式也会更多地与云契合共生!

  (3)很多人对云的特性还不够熟悉,对云产品存在误解甚至偏见。

2、开发者应该如何学习云计算?

  尽可能多地结合应用场景来解析云的概念和能力,学习“用云”而非“做云”;对于我们程序员学习者而言,也是如此,重点放在用云上即可!

  不进行“厂商绑定”而是同时观察运用多个主流云厂商的服务,了解共性和差异性;对于我们学习者而言,先了解共性和差异,再重点放在企业所选择的云服务商提供的产品上重点关注!

一、Iaas篇

  IaaS 的本质,是对云数据中心和各类 IT 基础设施的抽象,是基于软件技术对物理硬件进行的封装和虚拟

1、区域和可用区

  区域对应云厂商在某个地理位置提供的所有云服务的组合=>对外提供云服务的基本单位和容器;区域一般以国家或地区命名,也经常辅以城市和序号予以区分,例如:cn-hangzhou,cn-beijing,cn-chengdu等;

  区域的设立和分布体现了云厂商的业务重点和地区倾向,例如:人口稠密的中心城市如北京、上海;相对偏远的地区如宁夏;

阿里云的可选区域列表

如何选择合适的区域?

  (1)区域的地理位置本身:尽量靠近最终用户保证接入速度更快,混合云的专线接入一般以同城或短距离接入为主;

  (2)区域之间云服务的差别:同一个云在不同的区域提供的服务和规模可能是不同的,区域的“开服时间”也与区域内云服务的可用性有较大关联;

  (3)成本预算:同一种服务的价格在不同区域也存在差异,区域的流量费用也需要关注。

PS:一般来说,入站流量、内部流量=>免费或近乎免费,而出站流量=>单独收费。

如何实践多区域架构?

  (1)实践背景:部分关键应用,为了追求最佳的用户体验和高可用性,需要把多个区域的资源和能力结合起来进行构建。

  (2)云厂商背后做的工作:

    • 物理上,多区域之间建设骨干网=>能够有较高的带宽和较低的延时;
    • 软件层面上,允许位于不同区域的虚拟网络跨区域进行互联;
    • DNS解析层面上,通常会提供就近解析和智能路由能力=>以获得最快的响应速度;

  (3)给我们带来的便利:借助云的力量,小厂也能轻松拥有巨头的分布式部署能力

  (4)实践要点:

    • 根据实际情况各司其职,让不同区域担任不同的角色,联动起来达到业务目的
    • 切记不要轻率、随意地拓展区域!因为会相应增加应用架构的复杂性和流量费及增加额外的运维工作负担;

可用区区域的下级概念

  可用区是一个具备完整而独立的电力供应、冷却系统、网络设施的数据中心单元!一般来说,一个区域通常由多个可用区高速互联组成,区域内的可用区一般位于同一个城市,之间相距往往在一百公里以内。

  那么,为什么要建多个可用区?

  (1)解决区域内高可用性问题:避免单个数据中心故障让整个区域不可用;

  (2)区域本身有扩展的需求:通过新建可用区,不断扩展自身容量,补充新鲜血液;

  此外,可用区的数量也成为一个衡量区域规模的重要指标!数量越多,意味着这个区域规模越大,在选择区域的时候,这个指标也可以作为我们的重要参考。

学习小结

  (1)区域是云计算的顶层概念,云服务以区域为单位对外开放;

  (2)区域选择需要考虑多种因素,包括但不限于地理位置、服务丰富性、开服时间、资源成本、可用区数量等;

  (3)可用区是区域之下的重要层级,代表独立的数据中心,一个区域内往往有多个可用区;

  (4)妥善将资源分布到不同可用区,可实现故障隔离,提升架构的可用性;

2、云虚拟机知多少(一)

云虚拟机的核心概念

  云虚拟机是在云端虚拟出的服务器,其核心技术是虚拟化技术,例如Xen、KVM、VMWare、HyperV等;

  云虚拟机的体系结构:全面解耦的计算存储分离!如下图所示:

云虚拟机的体系结构 

  具体包含以下几个要点:

  (1)核心的CPU与内部部分同属一台宿主机;

  (2)网络、硬盘等其他部分可脱离于宿主机之外;

  (3)在可扩展性和故障隔离方面,具有很大优势;

云端”攒机“实战要点

  (1)选择和确认虚拟机所在的区域;

  (2)虚拟机的配置确认:

    • 型号、核数、内存;
    • 操作系统镜像:流行的成熟Linux发行版 or 云厂商自有Linux版本:和云上硬件有更好的适配;
    • 系统盘:高效云盘 or 高速SSD;
    • 网络和安全组的配置:网络安全组是虚拟机之外的网络防火墙,是一个可复用的配置可以同时应用于多个虚拟机,体现了云计算软件定义网络的特点;
    • 系统配置:为实例命名,指定登录的用户名密码或密钥对;

学习小结

  (1)云虚拟机是最重要的IaaS服务之一,它基于计算存储分离的架构进行构建;

  (2)云虚拟机的创建过程由地域、机型、操作系统、存储、网络等共同构成;

  (3)云虚拟机可使用云厂商自有操作系统,与云有较好的适配;

  (4)网络安全组是保护云虚拟机的网络防火墙,可以同时应用于多个虚拟机;

3、云虚拟机知多少(二)

  我们可以从以下三个维度来建立对云虚拟机的多维认知,他们分别是类型、代别和实例大小。

云虚拟机的类型

  这里主要指具有同一类设计目的或性能特点的虚拟机类别,常见虚拟机类型有:

  (1)通用均衡性(通常比例1:4,内核与内存比例)

  (2)计算密集型(通常比例1:2)

  (3)内存优化型(通常比例1:8以上)

  (4)图形计算型(带有GPU能力)

  主流云计算平台常使用字母缩写来表达虚拟机系列,如下表所示:

主流云厂商的虚拟机类型代号一览表 

云虚拟机的“代”

  “代”主要用来标识这是该系列下第几代的机型,但即便是同一系列的机型,不同的代别之间也会有不小的区别。

  云虚拟机的换代更新可能是底层软硬件架构的整体更新和提升,而不仅仅是CPU等硬件配置;

  对我们而言,“买新不买旧”同样适用于云端虚拟机的选择!

云虚拟机的实例大小

  实例大小主要指硬件计算资源的规模,而一般主流云厂商在描述实例时常常使用以下几个字眼来命名区分:

  (1)medium

  (2)large => 标准large对应2vCPU

  (3)xlarge => 代表4vCPU

  因此,如果更高的配置nxlarge => n * 4vCPU,如8xlarge => 8 * 4vCPU = 32vCPU。

PS:一般来说,这里倾向于使用vCPU而非核数(Core)来描述,因为超线程技术的普遍存在,常常一个核心能够虚拟出两个vCPU的能力。

  此外,近年来云厂商开始为追求极致性能要求的客户提供“裸金属”(Bare Metal)服务器产品,这种产品的用户独立享有物理资源,保障性能稳定,满足数据安全和监管的超高要求。比如,金融、证券等行业对于合规性和安全性有苛刻的要求,采用裸金属服务器部署,能够确保数据隔离、可监管、可追溯。又比如,超算中心、基因测序等高性能计算场景,对计算性能、稳定性、实时性等要求很高,裸金属也是不二的选择。当然,裸金属服务器产品的费用也不低,我们可以理解为它是虚拟机的外表 + 物理机的心脏

云虚拟机的命名规则

  三个要素:类型、代别和实例大小,最具代表性的莫过于AWS的命名规则(阿里云也很类似),即 [类型名][代别][后缀].[规格],例如:r5.4xlarge => R类型的第5代内存型虚拟机,它有4*4vCPU=16vCPU,内存有16*8=128G(按照1:8的比例来算的话)。

学习小结

  (1)云虚拟机的配置规格主要取决于类型、代别、实例大小三个最重要的维度;

  (2)实例所属的类型体现了相应的硬件资源配比与专项能力,为不同场景设计;

  (3)云虚拟机的型号名称一般由类型、代别、实例大小的缩写组合而成;

4、云虚拟机知多少(三)

  我们可以通过以下几种方式来帮助降低我们在云上的虚拟机使用成本。

使用包年包月机型

  这是最常见的降低成本的方式,但它意味着需要牺牲一些资源安排上的灵活性,也带来了一个后续维护工作:续费管理。

使用竞价实例

  这是AWS首创的产品形式,其他的云厂商也在纷纷跟进。其基本原理是将数据中心上闲置的机器资源拿出来公开拍卖,价高者得。其主要限制是因为其是闲置资源可能随时会被回收,所以也是牺牲了稳定性

  鉴于此,这种方式比较适合无持久化状态、可打断的工作。

使用突发性能类型

  这种方式的成本显著小于类似配置的其他类型机器,因为此类型虚拟机的CPU性能表现采用了“积分制”:

  (1)随着时间推移累加积分;

  (2)随着算力输出消耗积分;

  (3)当积分不足或耗尽时CPU只能发挥出标称值的一部分性能,这个比例被称之为“性能基准”;

 一个突发性能虚拟机实例的积分曲线示例

  和突发性能实例相反的则是“无性能约束模式”,这是云厂商为我们提供的一个付费选项,顾名思义,就是即便突发性能实例的积分耗尽,也仍然能够发挥CPU的100%性能,不受约束限制。不过,这时超出性能基准的CPU消耗会产生额外的费用

 阿里云“打开无性能约束”选项确认提示

使用ARM实例

  近年来,使用ARM架构芯片的虚拟机实例已成为云计算IaaS层的新潮流。其主要特点在于ARM的主要特点:低功耗、高性价比,因此成本成为了它的市场法宝!据统计,输出相同性能的ARM机型可以节省30%~40%的成本

学习小结

  (1)包年包月的付费方式是最常见的降低成本的方法,它通过牺牲采购的灵活性来换取折扣;

  (2)竞价实例的机制让云端的闲置资源对外开放,基于市场竞拍的定价方式使用户获得折扣;

  (3)突发性能实例使用CPU积分制,成本相对较低,适合工作负载存在较大波动的场景;

  (4)基于ARM实例的虚拟机实例陆续走向市场,是低成本机型中具有竞争力的选择;

5、云硬盘知多少

  和传统磁盘一样,云硬盘也属于“非易失性存储”,写入的数据不会丢失。

与传统磁盘的差异

  绝大多数云硬盘都不在宿主机上而在专用的磁盘服务器阵列中,两者通过数据中心内部特有IO线路进行联接,这也是计算存储分离架构的一种体现

  此外,云厂商对云盘上的内容会帮你在存储端同步和保留至少三份副本数据,因此冗余度和可用性很高

云硬盘的性能等级

  第一个等级,基于传统HDD硬盘构建而成的:性能一般,但成本较低;适合不注重性能或个人自用的服务器场景;

  第二个等级,基于混合硬盘(HDD+SSD):综合发挥SSD的性能优势和HDD的容量优势;很多云上创建硬盘的默认选项;

  第三个等级,纯SSD硬盘:成本较高,但是IO能力非常稳定及不俗的吞吐量和较低的访问延时;适合承载生产环境中重要的关键业务应用或数据库等IO密集型应用;

  第四个等级,高性能SSD硬盘:最新的企业级闪存硬件,配合改进后的底层传输协议和优化的虚拟化技术;适合承载高性能计算、高并发OLTP数据库等应用;

 主流云厂商的云硬盘产品的命名及目标性能(IOPS)

使用云上的本地磁盘

  云上也可以选择使用带有本地磁盘的虚拟机型,启动后本地磁盘会自动被挂载。

  它主要有两种适合的应用场景:

  (1)需要支持数据本地性的计算框架应用场景;比如,在自建Hadoop集群中使用MapReduce或Spark等支持本地数据性的计算框架进行分布式计算;

  (2)对数据丢失不敏感的临时性存储应用场景;比如,操作系统的swap分区,又或数据库的硬盘缓冲区等;

  当上层(通常是指应用软件系统本身)设计了存储冗余机制时,本地磁盘的相对高性能和低成本就成为了优势。但是,其本质缺点还是易失性存储,不适合的场景还是使用更可靠的远程云硬盘。

学习小结

  (1)云硬盘是云虚拟机的主要持久化存储,与宿主机往往是分离的;

  (2)云硬盘支持动态添加和删除,使用起来灵活方便;

  (3)云硬盘一般提供多种性能等级,最终性能会受存储介质和容量大小的共同影响;

  (4)部分虚拟机型号会自带高性能的本地磁盘,在可以容忍数据丢失风险时值得考虑;

6、云上虚拟网络知多少

  计算、存储 和 网络 是IaaS的核心三要素,这一节是最后一项:网络。

虚拟私有网络VPC

  VPC就是一张属于你自己的内网,内网之间的设备可以自由通信。

  VPC有以下一些核心概念需要了解:

  (1)网段:私有网络内部IP区段,如192.168.0.0/16;

  (2)子网:一个私有网络可以划分多个子网,阿里云称之为”交换机”;

  (3)路由表:定义私有网络内流量的路由规则,决定数据包的”下一跳”;

  (4)网关:对进出私有网络的流量进行把守和分发的重要节点;

  (5)安全组:私有网络虚拟机进出流量的通行或拦截规则;

  VPC的实践建议:

  在生产环境中不要让系统自动建立VPC,而是自行先行建立VPC。这样可以让自己有一个明确的网络规划,对整个VPC的把控和理解也更强!

 在阿里云上自行创建一个VPC

虚拟网络中的交换机

  虚拟机和专有网络的连接点在于虚拟机的弹性网卡:一方面它和虚拟机本体进行绑定,另一方面则嵌入某个私有网络的子网;

  弹性网卡具有以下几个特征:

  (1)一个虚拟机可以绑定多块网卡,有主网卡和辅助网卡之分;

  (2)一块网卡隶属于一个子网,可以配置同一子网的多个私有IP;

  (3)辅助网卡可以动态解绑,还能够绑定到另一台虚拟机上;

  对于公有IP的实践建议:

  尽量不要使用和依赖自动生成的公有IP,因为它不是固定的,会变化;尽量自行创建弹性IP并绑定到虚拟机上!

虚拟网络对外“开口子”

  需要访问外网的虚拟机数量有限:直接使用弹性IP;

  需要访问外网的虚拟机数量很多:

  (1)推荐使用NAT网关,这是一种常用的用来给VPC开口的手段,它允许多台没有公网IP的虚拟机访问外网;

  (2)也可以使用VPN网关,这是一种基于互联网提供私有加密的通信,适合从任意其他私有设施安全地连接到VPC;

 阿里云NAT网关实例

多网连接的几种方式

  公有云上允许同时使用多个VPC,以便于构建更加复杂的网络架构;

  对于云端VPC和VPC互联的场景:

  (1)推荐使用对等连接(VPC Peering),简单但它不具备传递性;

  (2)也可使用专有网络设施实现互联互通,虽强大但更复杂;

  对于公有云私有网络和本地数据中心互联(即所谓的混合云架构)的场景:

  (1)先考虑使用VPN通过公网线路建立连接通道;

  (2)要保证延迟和带宽可以考虑专线连接,现在公有云都提供了很多专线服务;

  (3)一般专线还会和VPN结合使用保证高可用性;

7、云端架构最佳实践

  在云端的最佳实践:与故障同舞,与伸缩共生!

面对故障,提升冗余

  (1)宿主机级别(最常见)故障:我们要保证多个虚拟机不在同一台宿主机甚至不在同一个机架上,例如可以使用AWS的置放群组、Azure的可用性集,阿里云的部署集等;

  (2)数据中心(可用区层面)级别故障:比如火灾、雷击等意外造成的服务停摆,我们可能需要多可用区的实例部署;

  (3)区域级别(非常少见)故障:比如地震等不可抗力因素或人为过失引发,我们有两种方案:一是多区域架构相关预案,二是多云策略即同时选用多家云厂商的公有云;

  总之,面对故障的基本思路都是:化单点为多点,形成不同层面、不同粒度的冗余。故障发生时,迅速地发现和切换,平滑的过渡。

随机应变,弹性伸缩

  产品形态:虚拟机编组,例如AWS的EC2自动伸缩(Auto Scaling)、Azure的虚拟机规模集(VM Scale Set)以及阿里云的弹性伸缩服务;

  最佳拍档:负载均衡器,它可以和提供计算资源的弹性伸缩服务形成配合。

  适合场景:无状态类的计算需求。

 阿里云的弹性伸缩服务

8、云上运维知多少

  对于云上运维,正确的理解应该是:云不但没有消灭运维,反而助推了运维的发展。原因有以下几点:

  (1)云的引入让我们在更高的层面去思考和解决问题,运维工作已经从偏硬件服务器的琐碎工作转向基于软件层面的服务;

  (2)基础的底层机房/架构运维仍然会继续存在但会偏向头部云厂商,云其实是提高了运维的效率,改变了运维的形态;

云时代的运维利器

  云上的命令行工具,如AWS CLI/Azure CLI/阿里云CLI。

  资源编排类服务,如AWS CloudFormation/Azure ARM Template/阿里云ROS。

云上运维工作的组成

  (1)传统的运维工作:监控、部署、升级 及 备份(得力助手:镜像 和 快照);

  (2)迁移:传统业务逐步上云的过程中一定会面临的迁移工作,建议先对云厂商的官方支持调查清楚;

  (3)和云厂商的对接工作:熟读文档,吃透云计算的众多特性,准确地与客服沟通;

  (4)很强的管理属性:不仅仅是云上资源的管理,更要深入到流程和制度的管理层面;比如:云资源的命名、开通、清理等操作规范;各类云上安全的控制和最佳实践;所有云资源的负责人、所属资源组和权限体系;

  (5)成本管理:应当有专人对成本进行监控和分析,建议按月组织资源的使用方进行成本消耗的回顾,杜绝成本浪费;

  高明的云上运维应该是:既要足够高效地为应用开发赋能,也要有适当的管理和约束。

二、脑图分享

点此查看完整脑图

参考资料

何恺铎,极客时间《深入浅出云计算》专栏(推荐订阅学习