AWS笔记

EC2 (Elastic Cloud Compute)小结:

  •  了解不同EC2实例类型的区别,要知道在不同的使用场景需要使用哪一种类型的EC2
    • 按需实例(On Demand Instance)- 用多少时间付费多少,费用精确到秒,不用则可以随时关闭/终止并停止费用的产生
    • 竞价实例(Spot Instance)- 以低于按需实例的价格竞得实例,但价格高于设定得价格后会自动被终止
    • 保留实例(Reserved Instance) – 相当于买断一个实例1年/3年,期间不管实例开不开都需要付总得费用,但平均下来费用会比按需实例便宜
    • 专用主机实例(Dedicated Hosts)- 涉及到软件许可证的时候,会考虑使用专用主机实例
  • 终止一个竞价实例
    • 如果主动终止一个竞价实例,需要为当前这个完整小时付费
    • 如果因为价格上涨,AWS终止了你的竞价实例,那么这个小时的费用会被免费
  • 实例的终止保护(Termination Protection)功能是默认关闭的,有需要必须手动开启。开启后实例将无法被终止,除非先将终止保护关闭
  • 使用EBS为存储的实例,默认情况下如果该实例被终止,这个根EBS卷也会被随之删除
    • 但也可以设置为实例被终止的时候保留根EBS卷

安全组总结:

  • 如果某个流量被入方向的规则放行,那么无论它的出站规则如何,它的出方向响应流量都会被无条件放行
  • 如果从主机发出去的出站请求,无论入站规则如何,该请求的响应流量都会被无条件放行
  • 你不能使用安全组来禁止某些特定的IP地址访问主机,要达到这个效果需要使用网络访问控制列表(NACL)
  • 在安全组内只能设置允许的条目,不能设置拒绝的条目
  • 安全组的源IP地址可以选择所有IP地址(0.0.0.0/0),特定的IP地址(比如8.8.8.8/24),或者处于同一个VPC中的其他安全组
  • 一个流量只要被安全组的任何一条规则匹配,那么这个流量就会被允许放
  • 安全组会关联到EC2实例的ENI(网络接口)上

举个例子,如下图所定义的安全组规则。

  • 安全组会跟踪TCP/22的入向和出向流量,因为源IP地址定义的是具体的地址(203.0.113.1/32),而不是所有IP地址(0.0.0.0/0)
  • 安全组不会跟踪TCP/80的流量,因为其入向和出向的流量都是针对所有IP地址(0.0.0.0/0)
  • 安全组会跟踪ICMP流量,因为无论规则如何,安全组都会跟踪ICMP流量

EBS的特点:

  • 亚马逊EBS卷提供了高可用、可靠、持续性的块存储,EBS可以依附到一个正在运行的EC2实例上
  • 如果你的EC2实例需要使用数据库或者文件系统,那么建议使用EBS作为首选的存储设备
  • EBS卷的存活可以脱离EC2实例的存活状态。也就是说在终止一个实例的时候,你可以选择保留该实例所绑定的EBS卷
  • EBS卷可以依附到同一个可用区(AZ)内的任何实例上
  • EBS卷可以被加密,如果进行了加密那么它存有的所有已有数据,传输的数据,以及制造的镜像都会被加密
  • EBS卷可以通过快照(Snapshot)来进行(增量)备份,这个快照会保存在S3 (Simple Storage System)上
  • 你可以使用任何快照来创建一个基于该快照的EBS卷,并且随时将这个EBS卷应用到该区域的任何实例上
  • EBS卷创建的时候已经固定了可用区,并且只能给该可用区的实例使用。如果需要在其他可用区使用该EBS,那么可以创建快照,并且使用该快照创建一个在其他可用区的新的EBS卷
  • 快照还可以复制到其他的AWS区域
  • 一个EBS只能挂载到一个实例上

AMI和EBS快照的使用场景

有几个比较常见的场景会需要你使用AMI和EBS快照的功能。

如果你想将一个EC2实例从一个AWS区域迁移到另一个AWS区域,你需要:

  1. 创建基于这个EC2实例的AMI
  2. 将这个AMI进行复制,复制到另一个AWS区域
  3. 通过这个AMI创新创建一个EC2实例
  4. 充当数据盘的EBS也需要做EBS快照
  5. 将这个EBS快照进行复制,复制到另一个AWS区域
  6. 通过这个EBS快照创建EBS卷,并且依附到EC2实例上去
  7. AMI是区域化的,只能使用本区域的AMI来创建实例;但你可以将AMI从一个区域复制到另一个区域

启动配置(Launch Configuration)

  • 启动配置是弹性伸缩组用来启动EC2实例的时候所使用的模板
  • 启动配置包含了镜像文件(AMI),实例类型、密钥对、安全组和挂载的存储设备
  • 一个启动配置可以关联多个Auto Scaling组
  • 启动配置一经创建不能被更改,只能删除重建
  • 启动配置中可以使用CloudWatch的基础监控(Basic Monitoring)或者详细监控(Detail Monitoring)
  • Auto Scaling automatically creates a launch configuration directly from an EC2 instance.

EC2置放群组(Placement Group)

EC2 置放群组(Placement Group)逻辑性地把一些实例放置在一个组里面,在这个组里面的实例能享受低延迟高网络吞吐的网络。

特点:

  • EC2 Placement Group分为集群置放群组(Cluster Placement Group)、分布置放群组(Spread Placement Group)和分区置放群组(Partition Placement Group)
    • 集群置放群组(Cluster Placement Group)即传统的置放群组,所有的实例需要在同一个可用区内
    • 分布置放群组(Spread Placement Group)是将实例分布到不同的底层硬件,可以在不同的可用区内。你最多可以在每一个置放群组的每一个可用区内创建7个实例
    • 分区置放群组(Partition Placement Group)确保了置放群组中的每个分区具有自己的一组机架,每个机架具有自己的网络和电源
  • Placement Group提供了低延迟,高速率的网络,可提供高达10 Gbps的速度
  • EC2 Placement Group的命名需要在你的AWS账户内唯一,不能有命名重复
  • 只有特定的EC2实例类型可以放在配置Placement Group内(某些计算优化型、GPU、内存优化型和存储优化型的实例)
  • AWS建议在一个Placement Group内的所有EC2实例是一模一样的,否则会有短板效应
  • 不可以合并多个EC2 Placement Group
  • 不可以将一个正在运行的EC2实例放到一个EC2 Placement Group中;只能为这个EC2实例创建一个AMI,然后基于AMI创建一个新的实例并且加入到Placement Group内
  • Placement Group可以跨越peerd VPC,但要保证在同一个可用区内
  • 如果在Placement Group中创建实例的时候出现“capacity error”的错误,可以停止再启动组中的所有实例,再重新创建刚才的实例
    • 停止再启动组中的所有实例可以改变这些实例所在的底层物理设备,从而带来更多的性能和空间启动新的实例
  • Placement Group的创建会告诉AWS将组里的实例安置在物理上接近的AWS设备内

使用Placement Group的最佳实践

  • 组内使用一样类型的EC2实例
  • 在同一时间启动组内所有EC2实例,这样可以减少出现“capacity error”错误的概率
  • 可以通过更改最大传输单元(MTU),从默认的1500改成9001来进一步增加Placement Group内实例之间的传输速度
  • All instances must be in the same region

Bootstrap开机脚本

在你启动一个Amazon EC2实例的时候,你可以选择在实例启动的时候运行你预先设定的Bootstrap脚本。该脚本可以是一段代码、文件或者base64的编码。

创建EC2实例的时候,在配置实例详细信息里的高级详细信息可以将下面的代码配置进去。

脚本文件内容(第一行表示这是一个Bash脚本文件):

#!/bin/bash
yum update -y
yum install httpd -y
service httpd start
chkconfig httpd on
echo "Hello aws.cloudbin.com" > /var/www/html/index.html

EFS (Elastic File System)

Amazon EFS提供了可扩展的文件系统,可以用在EC2实例上。EFS使用起来非常简单,你很容易地就可以在EFS上创建和配置一个文件系统。

它是具有弹性的,会根据文件总量的大小自动伸缩,你可以在多个EC2实例上使用同样的一个EFS文件系统,以达到共享通用数据的目的。

Amazon EFS可以简单地理解为是共享盘或NAS存储。

EFS的一些特性:

  • 支持Network File System version 4 (NFSv4)协议
  • EFS是Block Base Storage,而不是Object Base Storage(例如S3)
  • 使用EFS,你只需要为你使用的存储空间付费,没有预支费用
  • 可以有高达PB级别的存储
  • 同一时间能支持上千个NFS连接
  • EFS的数据会存储在一个AWS区域的多个可用区内
  • Read After Write Consistency
  • Amazon EFS在Windows实例上不受支持

容器,镜像和注册表

要在Amazon ECS上部署应用程序,必须构建你的程序在容器中运行。如之前所说,Docker容器是一个集装箱,在集装箱里面有软件应用程序运行所需要的一切,包括了代码、运行环境、系统工具、系统函数库等等。

我们可以将标准化的代码、运行环境、系统工具等等打包成一个标准的集装箱,这个集装箱叫做Docker镜像(Docker Image)。这个Docker镜像的概念类似于EC2中的AMI (Amazon Machine Image)。

这些镜像文件通常会通过Dockerfile来构建,并且最终存放到注册表(Registry)内。这个Registry可以理解为摆放集装箱的码头,我们在需要某个类型的集装箱的时候就到码头去取。这类Registry可以是Amazon的ECR,也可以是公网上的Docker Hub,或者自己私有的Registry。

AWS笔记_第1张图片

ECS 任务定义(Task Definition)

要在Amazon ECS上运行应用程序,你需要创建任务定义。任务定义是一个JSON格式的文本文件,这个文件定义了构建应用程序的各种参数。这些参数包括了:要使用哪些容器镜像,使用哪种启动类型,打开什么端口,使用什么数据卷等等。

以下是一个简单的任务定义示例,这个示例可以用来创建一个运行NGINX服务器的单个容器。

{
"family": "webserver",
"containerDefinitions": [
{
"name": "web",
"image": "nginx",
"memory": "100",
"cpu": "99"
},
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"memory": "512",
"cpu": "256",
}

ECS任务定义有点类似AWS的CloudFormation,只是ECS任务定义是用来创建Docker容器的。

ECS调度( Scheduling)

ECS任务调度负责将任务放置到集群中,你可以定义一个服务(Service)来运行和管理一定数量的任务。

服务调度(Service Scheduler)

  • 保证了一定数量的任务持续地运行,如果任务失败了会自动进行重新调度
  • 保证了任务内会注册一个ELB给所有容器

自定义调度(Custom Scheduler)

  • 你可以根据自己的业务需求来创建自己的调度
  • 利用第三方的调度

ECS集群(Cluster)

当你使用Amazon ECS运行任务时,你的任务会放在到一个逻辑的资源池上,这个池叫做集群(Cluster)。

如果你使用Fargate启动类型,那么ECS将会管理你的集群资源,你不需要管理容器的底层基础架构。

如果你使用EC2的启动类型,那么你的集群会是一组容器实例。

在Amazon ECS上运行的容器实例实际上是运行了ECS容器代理(Container Agent)的EC2实例。

特点:

  • 集群包含了多种不同类型的容器实例
  • 集群只能在同一个区域内
  • 一个容器实例只能存在于一个集群中
  • 可以创建IAM策略来限制用户访问某个集群

AWS Lambda的特点

  • 没有服务器/无服务,或者说真实的服务器由AWS管理
  • 只需要为运行的代码付费,不需要管理服务器和操作系统
  • 持续性/自动的性能伸缩
  • 非常便宜
  • AWS只会在代码运行期间收取相应的费用,代码未运行时不产生任何费用
  • 代码的最长执行时间是15分钟,如果代码执行时间超过15分钟,则需要将1个代码细分为多个

使用AWS Lambda,你无需配置和管理任何服务器和应用程序就能运行你的代码。只需要上传代码,Lambda就会处理运行并且根据需要自动进行横向扩展。因此Lambda也被称为无服务(Serverless)函数。

AWS Elastic Beanstalk 是一项易于使用的服务,用于在熟悉的服务器(例如 Apache 、Nginx、Passenger 和 IIS )上部署和扩展使用 Java、.NET、PHP、Node.js、Python、Ruby、GO 和 Docker 开发的 Web 应用程序和服务。

您只需上传代码,Elastic Beanstalk 即可自动处理包括容量预配置、负载均衡、自动扩展和应用程序运行状况监控在内的部署工作。同时,您能够完全控制为应用程序提供支持的 AWS 资源,并可以随时访问底层资源。和Lambda不同的是,Lambda没有底层资源。

无Elastic BeanStalk的传统部署业务流程如下:

以简单web服务+ELB负载均衡的典型应用举例,需要运维和开发完成以下步骤:

  1. OPS部署一台服务器用于web服务。
  2. OPS在这台服务器内安装web服务器和其他应用软件比如php,jdk等。
  3. OPS修改配置文件,调试后将服务器完全启动。
  4. OPS建立个ELB负载均衡器,与后端web服务器联调好。
  5. OPS把业务服务器交付给DEV。
  6. DEV开始在服务器上部署代码。

采用Elastic BeanStalk的DevOps环境部署业务流程如下:

以简单web服务+ELB负载均衡的典型应用举例,需要运维和开发完成以下步骤:

  1. DevOps在Elastic BeanStalk服务种选择需要部署的服务架构后创建服务。
  2. DevOps在服务器上部署代码。

Simple Storage Service (S3)

Amazon Simple Storage Service (S3) 是互联网存储解决方案,它提供了一个简单的Web接口,让其存储的数据和文件在互联网的任何地方给任何人访问。

S3基本特性:

  • S3是对象存储,可以在S3上存储各种类型的文件,它不是块存储(EBS是块存储)
  • 文件大小可以从0 字节到5 TB
    • 使用Single Operation上传只能上传最大5 GB的文件
    • 使用分段上传(Multipart Upload)可以对文件进行分段上传,最大支持上传5 TB的文件
  • S3的总存储空间是无限大的
  • 文件存储在存储桶(Bucket)内,可以理解存储桶就是一个文件夹
  • S3的名字是需要全球唯一的,不能与任何区域的任何人拥有的S3重名
  • 存储桶创建之后会生成一个URL,命名类似于https://s3-ap-northeast-1.amazonaws.com/aws_xiaopeiqing_com
    • S3是以HTTPS的形式展现的,而非HTTP
    • ap-northeast-1表示了当前桶所在的区域
    • aws_xiaopeiqing_com表示了S3存储桶的名字,全球唯一
  • S3拥有99.99%(4个9)的可用性(Availability)
    • 可用性可以理解为系统的uptime时间,即在一个自然年内(365天)有52.56分钟系统不可用
  • S3拥有99.999999999%(11个9)的持久性(Durability)
    • 持久性可以认为是数据完整性/数据安全性,即在一千亿个存储在S3上的文件会有大概 1 个文件是不可读的
  • S3的存储桶创建的时候可以选择所在区域(Region),但不能选择可用区(AZ),AWS会负责S3的高可用、容灾问题
    • S3创建的时候可以选择某个AWS区域,一旦选择了就不能更改
    • 如果要在其他区域使用该S3的内容,可以使用跨区域复制
  • S3拥有不同的等级(Standard, Stantard-IA, Onezone-IA, RRS, Glacier)
  • 启用了版本控制(Version Control)你可以恢复S3内的文件到之前的版本
  • S3可以开启生命周期管理,对文件在不同的生命周期进行不同的操作
    • 比如,文件在创建30天后迁移到便宜的S3等级(S3-IA),再经过30天进行归档(迁移到Glacier),再过30天就进行删除
  • 要启用生命周期管理需要先启用版本控制功能
  • S3支持加密功能(后面的课程会详细讲解这一部分内容)
  • 使用访问控制列表(Access Control Lists)和桶策略(Bucket Policy)可以控制S3的访问安全
  • 在S3上成功上传了文件,你将会得到一个HTTP 200的状态反馈

数据一致性模型:

  • 对新对象的PUTs操作具有写后读一致性(Read after Write consistency)
    • 即如果向S3存储桶写入一个新的文件(PUT操作),那么S3在返回HTTP 200成功状态前会先把数据同步到AWS的多个物理位置
    • 即向S3存储桶写入一个新的数据,马上就可以读取这个新的数据
  • 对覆盖PUTs操作以及DELETES操作具有最终一致性(Eventual consistency)
    • 对于文件的更新和删除,结果不会马上显现,但最终会显现
    • 如果对一个已有的数据进行覆盖(覆盖PUTS操作)然后马上尝试读取该数据,因为数据可能还没有同步,因此有可能读取到的是旧的数据
    • 如果删除一个已有的数据(DELETES操作)然后马上尝试读取该数据,因为数据可能还没有同步,因此有可能还能读到这个数据

S3版本控制

  • 启用版本控制后S3会保存一个文件的所有版本,包括所有历史写入的版本,即使删除了的文件也会保存
  • 版本控制是很好的备份工具
  • 启用了版本控制功能之后,要恢复一个文件,只需要删除删除标记(Delete Marker)即可
  • 版本控制默认不开启,但一旦启用,就不能关闭,只能暂停
  • 版本控制一经开启,所有在这个S3桶内的对象都会受用
  • 版本控制可以和生命周期规则集成使用
  • 使用MFA (Multi-Factor Authentication,多重认证) Delete可以在删除文件的时候增加多一层安全保障,防止用户进行误删除操作
  • 因为S3版本控制保存了一个文件对象的所有版本,每一个版本都会相应进行收费,因此费用会比不启用版本控制的S3桶要高
    • 举个例子,如果一个1 MB的文件有5个历史版本,那么你将会被收取等同于5 MB的单一文件的费用

S3跨区域同步

  • 启用S3跨区域复制首先需要在源S3存储桶和目标S3存储桶都开启S3版本控制功能
  • 源S3存储桶和目标S3存储桶不能位于同一个区域
  • 在开启跨区域复制前的已存在的文件不会被自动同步
    • 开启跨区域复制之后,新增加的文件会被自动同步
  • 跨区域复制不能叠加,意味着数据不可以从A同步到B,然后再同步到C
  • 删除文件,文件的某一个版本或者删除删除标记(Delete Marker)是不会被同步的
  • 复制时间控制将在 15 分钟内复制 99.99% 的新对象,将会收取额外的每 GB 数据传输费和 CloudWatch 指标费。

VPC流日志(Flow Logs)

VPC流日志(Flow Logs)可以捕获经过你的VPC的网络流量(入向和出向),Flow Logs的日志数据保存在Amazon CloudWatch Logs中。

Flow logs可以在以下级别创建:

  • VPC级别
  • 子网级别
  • 网络接口级别

同时,VPC Flow Logs还有如下特性:

  • 对于Peer VPC不能开启Flow Logs功能,除非这个VPC也在你的账户内
  • 不能给Flow Logs打标签
  • Flow Logs创建后不能更改其配置

VPC Flow Logs并不捕获所有经过VPC的流量,以下流量将不会被捕获:

  • 实例访问Amazon DNS服务器(即.2地址)的流量
  • Windows进行Windows许可证激活的流量
  • 访问实例Metadata的流量(即去往169.254.169.254的流量)
  • DHCP流量
  • 访问VPC路由器的流量(即.1地址)

VPC终端节点(VPC Endpoints)

VPC终端节点能建立VPC和一些AWS服务之间的高速、私密的“专线”。这个专线叫做PrivateLink,使用了这个技术,你无需再使用Internet网关、NAT网关、VPN或AWS Direct Connect连接就可以访问到一些AWS资源了

VPC终端有两种类型:接口和网关

其中接口类型支持以下服务(了解即可):

  • Amazon CloudWatch Logs
  • AWS CodeBuild
  • Amazon EC2 API
  • Elastic Load Balancing API
  • AWS Key Management Service
  • Amazon Kinesis Data Streams
  • AWS Service Catalog
  • Amazon SNS
  • AWS Systems Manager
  • 其他 AWS 账户托管的终端节点服务
  • 支持的 AWS Marketplace 合作伙伴服务

网关类型支持以下服务(需要记住):

  • Amazon S3
  • DynamoDB

VPC对等连接(VPC Peering)

VPC对等连接(VPC Peering)是两个VPC之间的连接,通过VPC Peering,你可以使用私有地址让两个VPC之间相互通信,就像它们在同一个VPC内一样。

你可以在自己的两个VPC之间建立对等连接,也可以在自己的VPC与其他AWS账号的VPC之间建立对等连接,还可以在位于不同区域的VPC之间建立对等连接(在2017年11月之前VPC Peering还不支持跨区域的连接呢)。

  • 如果两个VPC出现了地址覆盖/重复,那么这两个VPC不能做Peering
    • 例如10.0.0.0/16的VPC与10.0.0.0/24的VPC是不能做对等连接的
  • 参与VPC Peering的两个VPC可以来自不同的区域(这个功能以前是没有的)
  • VPC Peering不支持Transitive Peering
    • 即如果VPC A与VPC B进行了对等连接
    • VPC B与VPC C进行了对等连接
    • VPC A是不能与VPC C进行直接通信的,必须再建立VPC A和VPC C的对等连接才可以
  • 两个VPC通过VPC peering打通,那么两个VPC中所有的子网都互相路由打通了,而且地址还不能重叠。
  • 如果只需要精确控制两个vpc中的两个子网联通怎么办?借用NACL/路由表?

Route53简介

Amazon Route 53是一种高可用、高扩展性的云DNS服务。它为开发人员和企业提供一种非常可靠和经济的方法,把对用户友好的、易读的域名(比如aws.xiaopeiqing.com)转换为IP地址(例如120.79.65.207)。目前Amazon Route53已经支持IPv6。

什么是DNS

DNS的全称是Domain Name System,它的作用就是将一个域名最终解析成一个IP地址。就像一个电话本,我们找到张三,就知道他的电话号码是1234;我们找到李四,就知道他的电话号码是2345。

Amazon Route 53 如何为您的域路由流量

AWS笔记_第2张图片

 


在您将 Amazon Route 53 配置为将 Internet 流量路由到您的资源(比如 Web 服务器或 Amazon S3 存储桶)之后,当有人请求 www.example.com 的内容时,将在短短几毫秒内发生以下情况:

其他知识点

  • 弹性负载均衡器(ELB)没有固定的IPv4地址,在使用ELB的时候永远使用它的DNS名字。很多场景下我们需要绑定DNS记录到ELB的endpoint地址,而不绑定任何IP
  • 需要熟记Alias记录和CNAME的区别,也可以参考一下在别名和非别名记录之间做出选择
  • 考试中,如果出现选择Alias记录和CNAME记录的选择,95%的情况都要选择Alias记录

Route53总结

  • 弹性负载均衡器(ELB)没有固定的IPv4地址,在使用ELB的时候永远使用它的DNS名字。很多场景下我们需要绑定DNS记录到ELB的endpoint地址,而不绑定任何IP
  • 需要熟记Alias记录和CNAME的区别,也可以参考一下在别名和非别名记录之间做出选择

在AWS Route53中有多种不同的路由策略(Routing Policy),我们可以根据自己的不同需求将我们的DNS解析到不同的目标上去。

  • 简单路由策略(Simple Routing Policy):提供单一资源的策略类型,即一个DNS域名指向一个单一目标
  • 加权路由策略(Weighted Rouing Policy):按照不同的权值比例将流量分配到不同的目标上去
  • 延迟路由策略(Latency Routing Policy):根据网络延迟的不同,将与用户延迟最小的结果应答给最终用户
  • 地理位置路由策略(Geolocation Routing Policy):根据用户所在的地理位置,将不同的目标结果应答给用户
  • 故障转移路由策略(Failover Routing Policy):配置主动/被动(Active/Passive)的故障转移策略,保证DNS解析的容灾

SQS 消息处理(Simple Queue Service)简介

在前端和后端之间实现逻辑隔离,将前端的请求异步传输给后端处理,提供了缓冲的时间  最大256kb

SQS有两种不同类型的队列,它们分别是:

  • 标准队列(Standard Queue)
  • FIFO队列(先进先出队列)

标准队列(不保证顺序,但是可以多次调用处理)

标准队列拥有无限的吞吐量,所有消息都会至少传递一次,并且它会尽最大努力进行排序。

标准队列是默认的队列类型。

AWS笔记_第3张图片

FIFO队列(保证顺序处理,处理一次)

FIFO (First-in-first-out)队列在不使用批处理的情况下,最多支持300TPS(每秒300个发送、接受或删除操作)。

在队列中的消息都只会不多不少地被处理一次

FIFO队列严格保持消息的发送和接收顺序

SNS 消息处理(Simple Notification Service)简介

SNS (Simple Notification Service) 是一种完全托管的发布/订阅消息收发和移动通知服务,用于协调向订阅终端节点和客户端的消息分发。

SQS (Simple Queue Service)一样,SNS也可以轻松分离和扩展微服务,分布式系统和无服务应用程序,对程序进行解耦

我们可以使用SNS将消息推送到SQS消息队列中、AWS Lambda函数或者HTTP终端节点上。

SNS通知还可以发送推送通知到IOS,安卓,Windows和基于百度的设备,也可以通过电子邮箱或者SMS短信的形式发送到各种不同类型的设备上。

SNS的一些特点

  • SNS是实时的推送服务(Push),有别于SQS的拉取服务(Pull/Poll)
  • 拥有简单的API,可以和其他应用程序兼容
  • 可以通过多种不同的传输协议进行集成
  • 便宜、用多少付费多少的服务模型
  • 在AWS管理控制台上就可以进行简单的操作
  • 一对多的推送服务

SNS能推送的目标

  • HTTP
  • HTTPS
  • Email
  • Email-JSON
  • SQS
  • Application
  • Lambda

基本的SWF概念

  • SWF发起者(Starter)
    • 可以激活一个工作流的应用程序,可能是电商网站上下单的行为,或者是在手机APP上点击某个按钮
  • SWF决策者( Decider)
    • SWF Decider决定了任务之间的协调,处理的顺序,并发性和任务的逻辑控制
  • SWF参与者(Worker)
    • SWF Worker可以在SWF中获取新的任务,处理任务,并且返回结果
  • SWF域(Domains)
    • 域包含了工作流的所有组成部分,比如工作流类型和活动类型

SWF决策者和参与者可以是运行在AWS上的EC2实例或者其他计算资源,SWF只是保存不同的任务,把这些任务分配给worker,并且监控他们的任务处理进展。

SWF和SQS的区别

  • SWF是面向任务的;SQS是面向消息的;
  • SWF保证了每一个任务都只执行一次而不会重复;标准的SQS消息可能会被处理多次
  • SWF保证了程序内所有任务都正常被处理,并且追踪工作流;而SQS只能在应用程序的层面追踪工作流
  • SWF内的任务最长可以保存1年;SQS内的消息最长只能保存14天

API Gateway简介

Amazon API Gateway可以让开发人员创建、发布、维护、监控和保护任何规模的API。你可以创建能够访问 AWS、其他 Web 服务以及存储在 AWS 云中的数据的API。

  • 理解什么是API Gateway,它能用来做什么
  • API Gateway可以缓存内容,从而更快地将一些常用内容发送给用户
  • API Gateway是一种低成本的无服务(serverless)方案,而且它可以自动弹性伸缩(类似ELB,NAT网关)
  • 可以对API Gateway进行节流,以防止恶意攻击
  • 可以将API Gateway的日志放到CloudWatch中
  • 如果你使用JavaScript/AJAX来跨域访问资源,那么你需要保证在API Gateway上已经开启了CORS (Corss-Origin Resource Sharing)功能
    • 如果没有开启CORS功能,在使用API Gateway做跨域访问的时候,可能会出现错误 “Origin policy cannot be read at the remote resource?”

Elastic Transcoder简介

Amazon Elastic Transcoder是一种在线媒体转码的工具,使用它我们可以很容易地将我们的视频从源格式转换到其他的格式和分辨率,以便在手机、平板、PC等设备上播放。

一般来说,我们会将需要转码的媒体文件放在AWS S3的存储桶上,创建相应的管道和任务将文件转码为特定的格式,最后将文件输出到另一个S3的存储桶上面去。

我们也可以使用一些预设的模板来转换我们的媒体格式。

另外,我们也可以配合Lambda函数,在有新的文件上传到S3后触发函数代码,执行Elastic Transcoder并自动进行媒体文件的转码。

Kinesis简介

Amazon Kinesis可以让你轻松收集、处理和分析实时流数据。利用Amazon Kinesis,你可以在收到数据的同时对数据进行处理和分析,无需等到数据全部收集完成才进行处理。

Amazon Storage Gateway简介

提供本地数据上传到云端进行交互的服务

你可能感兴趣的:(aws,笔记,网络)