{{ selected_gold.title }}

  • ¥ {{ selected_gold.original_price }}
  • ¥ {{ selected_gold.price }}
  • {{ selected_gold.number_of_order }} 人订阅
  • {{ selected_gold.total_likers_count }}
    由 {{ selected_gold.creator_name }} 编辑

    {{ title }}

    请登录购买({{ selected_gold.price }}元),即可解锁剩余教程
    点击购买

    • Air
    • 2019年8月21日

    AWS云服务产品简介

    AWS云服务的产品非常丰富(如下图所示),你不可能对每种产品都了如指掌,而是在解决某个具体的问题时会了解相关的产品。因此,你最起码要知道几个大的分类(比如计算类、存储类、工具类等等),了解每个分类都有哪些产品,以及产品的特点和适用范围,才能开始使用云计算技术。下图只是简单地列出了常用的AWS服务,实际上AWS提供的服务多达150多种,因此,一个较为明智的做法是学习常用的服务,而对于那些不常用的服务(比如远程桌面服务、语音服务等等)需要用的时候再去了解。

    下面这张图将一些常用的服务结合在一起解决某个问题,这种方式能够进一步帮助你记住这些常用的服务,因为它们之间是有关系的,比如下图用到了存储服务、缓存服务、数据库服务来存取数据;用到了计算服务来运行程序;用到了网络服务来隔离外界威胁;用到了负载均衡服务来分配负载。每种服务的功能非常单一,往往需要结合具有其它能力的服务,才能构成一个完整的解决方案,比如计算服务运行的程序需要持久化存储数据,此时,计算服务会调用存储服务所提供的存储能力。

    本文将按照以下几个部分来介绍云计算入门知识,如果你阅读完本文,想进一步加深对云计算的认识,那么这个系列的文章将不容错过。

    • 区域(Region)和可用区(Available Zone)
    • 虚拟机服务-EC2
    • 存储服务-S3、EBS和EFS
    • 关系型数据库服务-RDS和Aurora
    • 缓存服务-ElasticCache
    • 内容分发服务-Cloudfront
    • 路由服务-Route 53
    • 私有网络服务-VPC
    • 负载均衡服务-Elastic Load Balance

    区域(Region)和可用区(Available Zone)

    在介绍常用的AWS服务之前,需要说明一点的是:AWS服务分布在全球多个位置。这些位置由地区和可用区构成。每个地区是一个单独的地理区域(Region),每个区域由多个相互隔离的可用区(Available Zone)构成。有的服务在某些Region是不提供的,而且Region之间是完全隔离的,它们之间通过高速光缆连接,不过Region之间传输数据是需要收费的。AWS目前所提供的区域如下图所示:

    比如美国东部有2个区,它们分别是:US East(N. Virginia)和US East(Ohio)。每一个区都有对应的区域代码,比如US East(N. Virginia)的区域代码是:us-east-1,可用区由区域代码后跟一个字母标识符表示;例如,us-east-1a,其含义是指区域US East(N. Virginia)中的可用区是a。如果你使用EC2服务,那么会用到可用区。

    虚拟机服务-EC2

    EC2(Elastic Compute Cloud)是AWS非常基础的服务,它的主要功能是提供计算能力。比如,你可以通过AWS Console创建一个EC2资源,它是一台虚拟机,上面运行着OS。在创建之前,你可以选择运行哪种OS,以及为它分配一定大小的EBS,它就像是一台真实的物理机,可以运行程序,拥有虚拟的CPU和内存,同时也可以为它分配IP地址,让它和其它计算机通信。你可以根据具体的需求来创建多个EC2资源,它们可能运行在一台物理机器上也可能分布在多台物理机器上。

    EC2服务是AWS的基础服务,AWS的其它服务都是以EC2服务为基础,因此,你可以想象到AWS内部实际上是由大量计算机联网而成,并将这些硬件虚拟化,最终生成了上百万台虚拟机,其中,一部分虚拟机直接用于构建AWS的其它服务,而其余的虚拟机则提供给企业或个人,他们不再需要这些虚拟机时,便将其释放,让其他人使用。

    存储服务-S3、EBS和EFS

    直到今天,几乎所有的线上服务都需要存储数据,这些数据包括用户信息、图片、歌曲、视频等等。为了能够有效地存储和读写数据,那么需要编写一些程序专门用于解决存储问题,因此AWS专门提供了S3(对象存储)、EBS(块存储)和EFS(文件存储)存储服务,专门用来存储不同类型的数据。每种服务都有不同的用途、计费方式以及存储方案,以下是每一种存储服务的区别:

    Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,它是基于Key-Value的方式来存取数据。你可以为数据分配一个key,然后把它存储到S3里,也可以通过这个Key从S3中获得该数据。S3里存取数据的单元是对象,每个对象除了数据本身,还包括描述该数据的元数据(比如该文件的大小、创建时间等等)。假设你向S3中存储了大小为23KB的文件,那么S3中将有一个对象,包含了元数据和文件本身的内容。

    S3经常用来存放一些静态资源文件,比如CSS、Javascript、图片,视频等等。大家经常看到B站上的视频,其实也是可以存到S3上的,而且S3是具备无限存储能力的。除此之外,互联网公民也可以直接访问到S3上的数据。

    Amazon Elastic Block Store(Amazon EBS)是块存储服务,这种块存储服务一般会挂接到EC2实例上使用,有点类似于硬盘,但是会占用网络带宽。它具有持久化和快速读写的存储能力,其存储的单元是基于块的,如上图中间的(Block Storage)。它无法直接被互联网访问,其常常用于存储经常要用到的文件,比如系统的驱动程序。

    Amazon Elastic File System(Amazon EFS)是文件存储服务,这种存储服务可以同时挂载到多个EC2实例上,当数据量变多(变少)时,它会自动增加(缩减)存储空间,以便容纳更多(更少)的数据。EFS非常适合内容管理系统(CMS),比如WordPress上的内容可以存储在EBS上,然后由多个EC2实例读取。管理员只需要更新或添加新的内容到EFS上,那么所有的EC2实例将会得到同一份内容,这一点在EBS上是做不到的,因为每一个EBS同时只能挂接到一个EC2实例上。

    关系型数据库服务-RDS和Aurora

    RDS是关系型数据库服务,你可以使用该服务创建关系型数据库实例,并直接使用它来存取结构化数据。RDS支持多种数据库系统,比如常见的有MySQL、SQL Server、Oracle、PostgreSQL等。使用RDS的一个好处是,AWS会帮你安装、维护、升级和备份数据库实例,你只需要往里填充数据即可。

    Amazon Aurora是AWS自己研发的关系型数据库系统,它兼容MySQL和PostgreSQL,它与RDS相比有以下优点:

    • 可伸缩地读取数据: Aurora具有一个主数据库读写数据,最多有15个影子数据库用于读取数据。这些影子数据库专门只支持读操作,为主数据库分担了读取数据的压力,而且这些影子数据库与主数据库共享存储单元。
    • 具有持续备份和定点恢复的能力: Aurora能够在不为人知的情况下持续将redo log streams存储到S3上,通过存储在S3上的redo log streams你能够指定数据库恢复的时间点。
    • 快速克隆: Aurora能够快速实现深度拷贝

    总之,Aurora提供了工业级数据库的服务,这个服务能够自由地根据使用者的要求进行伸缩扩容,增强数据库的容错能力,将数据灾害降到最低。可以参考这篇论文进一步了解Aurora。

    缓存服务-ElasticCache

    ElasticCache是AWS提供的具有弹性的缓存服务,它支持Redis和Memcached缓存系统。用户可以基于它来打造数据密集型应用或者提高数据吞吐性能,因为它是基于内存操作的。它经常用于缓存用户经常使用的数据,由于这些数据是存在内存的,因此存取数据的时间非常短,这进一步降低了用户访问延时,也减轻了数据源的压力。

    内容分发服务-CloudFront

    CloudFront是内容分发服务,也就是业内常说的CDN。它分布在欧洲、亚洲、北美、澳洲、南美、美国等多个主要大城市,由107 个网络边际服务点构成并提供服务。

    它可以缓存信息源,让互联网公民从最近的边缘节点获取信息,从而降低延时。除此之外,它能为你的服务分担一些压力。你可以让它把你的内容分发到全球,也能限制在某一个区域。它容易使用,能够与其它AWS服务集成在一起。

    Route 53

    "Route 53",中文可以翻译为53号公路,跟美国历史上有名的"66号公路(如下图)"(Route 66)遥相呼应。利用Route 53服务,AWS的用户就可以让终端用户访问众多的互联网服务了。所以"Route 53"就像一条虚拟的公路一样,把终端用户带领到目的地。Route 53的服务器分布在全世界各地,也是亚马逊唯一保证100%可用性的服务。DNS协议是基于TCP/UDP协议的,DNS服务监听的端口是53。所以名字里带53,暗含了DNS服务监听的端口。

    就像66号公路横穿美国一样,Route 53的作用在于它能够快速地将终端用户带到其想要访问的互联网服务,缩短了终端用户与互联网服务的延迟。

    VPC和NAT

    VPC是AWS提供的一种虚拟网络服务,一些AWS资源可以放在这个虚拟网络里,最终构成一个整体,向外界提供服务。当你使用VPC服务时,需要为它创建Gateways、Route tables、 Network access control lists (ACL)、Subnets以及Security groups等,它们一起控制着这个虚拟网络。

    关于VPC,以下几点是注意的:

    • VPC可以包含多个不同可用区的资源,也就是说VPC是跨可用区的
    • VPC中的子网(subnet)只能属于某一个可用区
    • VPC之间不具有传递性,也就是说你不要指望通过VPC 1来访问VPC 2,如果要访问VPC 2,那么只能直接访问VPC 2

    为什么使用VPC?当你在公有云上运行一些服务时,世界上任何一个人都能够访问这些服务,因此这些服务非常容易受到攻击。为了保护这些资源,你需要VPC来切断它们与外部的连接,通过VPC来限制外部连接的类型,IP地址以及哪些人能够访问。通过限制外部范围,你便可以阻止不速之客的访问,也避免了DDOS攻击。由于大部分服务是不需要与外部连接,因此你可以把这部分资源安全地放在VPC里与外部隔绝,而只需要把那些需要与外部互联的资源暴露出去。

    有时,你想让VPC中的某些资源暴露给外界,因为它们是外界访问VPC资源的唯一入口。而有时,你希望外界不允许直接访问某些资源,但这些资源可以访问外界(比如你想升级程序,下载补丁之类),此时,你需要使用NAT Gateways服务。

    NAT Gateways用于解决VPC内的私有资源访问外界的问题。它在VPC的一个公有子网中创建,这个子网是公开的,但是数据流向由内往外,因此一旦你允许私有资源访问NAT Gateways,那么该资源就能够访问外网,由于NAT Gateways不支持外网向内网访问,因此外部网络是无法访问该私有资源的。

    ELB和Auto Scaling

    AWS Elastic Load Balancing(ELB)是负载均衡服务。它可以把负载均匀地分发给多个不同的EC2实例,从而使得处理负载的能力能够横向扩展。它的整个过程如下所示:

    1. 用户在浏览器里输入www.digolds.cn并按下回车键
    2. 访问该页面的请求通过互联网最终到达ELB
    3. ELB将这个请求转发给任务量少的EC2实例
    4. EC2实例处理该请求,并将生成的页面放回给ELB
    5. 浏览器接收到ELB返回的页面

    分配策略有很多种,比如常见的有轮询、基于IP地址、HASH、随机分配等等,每种策略均有一些局限性,因此需要结合实际的场景来选择。

    AWS Auto Scaling是监控服务,它能根据一些条件来增加或减少EC2实例,从而获得弹性能力。比如,你有2个EC2实例,它们正在接收并处理请求,在某一段时间,请求突然变多,它们的处理速度变慢了(原因在于任务量多了!),此时,Auto Scaling会监测到速度慢的问题,因此,它自动地启动新的EC2实例来处理请求。同理,当请求的数量变少了,Auto Scaling会自动销毁多余的EC2实例。这种特点经常被称为Elastic(弹性),AWS提供的一些云服务会自带这种能力,比如S3,Aurora等均具备弹性存储的能力,而ELB具有弹性负载均衡的能力。

    AWS CloudFormation

    CloudFormation是一种Infrastructure as Code服务,它允许研发人员以脚本化的方式创建云计算资源,最终实现自动化部署。几乎所有AWS服务都可以通过CloudFormation来驱动,但是你必须学习它的语法,然后编写脚本,最后提交到CloudFormation。你提交的脚本有点类似于在餐厅的菜单,而CloudFormation类似于厨房,服务员帮你把菜单提交给厨房,经过一段时间后,你要的饭菜出炉,服务员再将其端到你面前。关于CloudFormation的具体细节,你可以参考这篇文章

    然而CloudFormation似乎做得并不友好,在业内也不受欢迎,开发者们更喜欢使用Terraform工具。为了让开发者们能够高效地使用CloudFormation服务,AWS也发布了另外一个工具CDK。这个工具的好处是让开发者使用熟悉的编程语言来编写基础设施代码,然后再将其转化成CloudFormation脚本。除此之外,AWS专门为Serverless资源提供了另外一个工具SAM,开发者可以使用它来创建Serverless资源,但需要提供对应的脚本。实际上,这些脚本最终会转成CloudFormation脚本,并交给CloudFormation服务。

    使用云计算技术的最佳实践之一是以Infrastructure as Code方式来创建云计算资源。这种方式能带来的好处是可以实现版本控制和自动化部署,你会经常使用Python、Shell、Terraform、Docker以及K8S等工具来创建各种云计算资源,它们均支持和提倡Infrastructure as Code。

    结论

    前面,我列举了一些常用的AWS服务,并介绍了一些云计算概念、每个服务的用途以及最佳实践。在这些服务当中,EC2是必须要掌握的,因为它是所有服务的基础。除此之外,几乎所有云计算服务提供商均有类似的服务-统称为虚拟机服务,因此你学会了EC2服务,就能熟练使用其它云服务提供商提供的类似服务。

    你还需注意,AWS根据地理位置划分了几个区域,比如在美国有2个区,中国也有2个区等。有的云服务是受区域限制的,比如EC2服务是有区域概念的,当你创建EC2资源,它们会运行于某个区。如果你需要为日本的互联网公民提供服务,那么你应该选择东京区域来创建云计算资源,因为在东京区域的资源离东京网民更近,因此能提供更好的性能。

    Infrastructure as Code是使用云计算技术的最佳实践之一。你应该在第一天就要有这种概念,并学会适应它。你可以使用Terraform工具来创建云计算资源,一旦你学会了如何使用Terraform,就会对它爱不释手。

    最后,本文所介绍的内容非常基础,并无法让你正确使用每一种服务,原因在于每个服务均有对应的细节和最佳实践,你需要对每一个服务用上一段时间,才能更好地使用它们。参考部分的链接是我精心挑选的,能够帮助你进一步了解和学习云计算技术,它们绝对不会让你失望!

    参考

    1. EC2
    2. S3
    3. DynamoDB
    4. SQS
    5. Lambda