因为最近我所供职的公司正在在从传统软体公司转型成为SaaS类型的公司。 越发的感觉到经济学中所说的细致分工乃是必然的结果,serverless将会是绝大部分中小公司的最后出路,一是因为成本低廉,二来确实对运营的效率提升有很大的帮助,而我因为职位的关系,不可避免的接触到了北美地区云计算的霸主,亚马逊的各种云服务, 其中包括了大名鼎鼎的EC2和S3,后来因为项目的不断推进,上层决定推荐我进行进一步的培训以便适应更快节奏的serverless的开发工作,我决定开一个系列介绍亚马逊云服务的常用和主要的几个产品。方便大家可以更快更清楚了解每个service的用处,目的是当你看完这一个系列之后应该可以自己在很短的时间内搭建起一个serverless的APP后端。这一系列的定位是入门和介绍,并且有简单的入门实际例子,我参考的难度水平是AWS Training certificate的中等难度,所以说如果你决定要使用aws或者是仅仅有兴趣想要了解,你都可以在一个系列中找到你想要的内容!之后我会邀请在亚马逊和谷歌微软供职的朋友撰写相应的他们了解的强项,尽量给大家带来一手的资讯。

这篇文章的主要内容就是大致的给大家介绍亚马逊云服务:AWS,amazon web services 的主要和常用的几个服务,我们会在后面的每一篇文章中再单独介绍这些服务的具体用法和使用场景。

本章摘要:

  • EC2
  • S3
  • DynamoDB
  • Lambda function
  • SQS/SNS
  • API gateway
  • Cloudfront
  • Elastic load balancing
  • EBS
  • Cloudwatch
  • CloudTrail
  • Config as code: troposphere/cloudformation/teraform

1EC2

EC2是我在日常工作中所接触到的最多的一个服务,当然也是我们整个云服务中cost最多的一个部件,我工作中很大一部分的努力就是尽量的减少EC2的用量。

官方介绍:

Amazon Elastic Compute Cloud (Amazon EC2) 是一种 Web 服务,可以在云中提供安全并且可调整大小的计算容量。该服务旨在让开发人员能够更轻松地进行 Web 规模的云计算。

我理解的重点:

说白了就是public cloud,但是你交给亚马逊帮你托管,每一个ec2都可以选择不同的location,可以在全世界各地选择。Amazon的Image成为AMI:Amazon machine image

你可以在spin up agent 的时候选择你想要使用的AMI,亚马逊的官方提供了一些标准的AMI,但是每个公司基本上都有自己的pipeline去produce 高度customize的AMI供EC2使用,每一个instance都可以随时terminate,而且同时spin up起来的agent/instance的数量并没有限制,这种灵活性和传统的on-prem的系统形成了鲜明的对比,因为不是所有的service都会二十四小时的运转,所以灵活的terminate或者shut down就位省钱铺平了道路。

使用情况:

美国上千家的各行业龙头公司都在使用,普及程度相当广泛。

2. S3 和DynamoDB

官方介绍:

Amazon Simple Storage Service 是互联网存储解决方案。该服务旨在降低开发人员进行网路规模级计算的难度。

Amazon S3 提供了一个简单 Web 服务介面,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。此服务让所有开发人员都能访问同一个具备高扩展性、可靠性、安全性和快速价廉的数据存储基础设施, Amazon 用它来运行其全球的网站网路。此服务旨在为开发人员带来最大化的规模效益。

那么什么是DynamoDB呢

Amazon DynamoDB 是一种完全托管的 NoSQL 资料库服务,提供快速且可预测的性能,同时还能够实现无缝扩展。使用 DynamoDB,您可以免除操作和扩展分散式资料库的管理工作负担,因而无需担心硬体预置、设置和配置、复制、软体修补或集群扩展等问题。此外,DynamoDB 提供了加密静态,这可以消除在保护敏感数据时涉及的操作负担和复杂性。有关更多信息,请参阅Amazon DynamoDB 静态加密。

使用 DynamoDB,您可以创建资料库表来存储和检索任意量级的数据,并提供任意级别的请求流量。您可以扩展或缩减您的表的吞吐容量,而不会导致停机或性能下降,还可以使用 AWS 管理控制台来监控资源使用情况和各种性能指标。

Amazon DynamoDB 提供了按需备份功能。它允许您创建表的完整备份以进行长期保留和存档,从而满足监管合规性需求。有关更多信息,请参阅 DynamoDB 的按需备份和还原。

您可以为 Amazon DynamoDB 表创建按需备份以及启用时间点恢复。时间点恢复有助于保护 Amazon DynamoDB 表免遭意外写入或删除操作。使用时间点恢复,您可以使该表还原到最近 35 天中的任何时间点。有关更多信息,请参阅时间点恢复:工作原理。

我理解的重点

很多aws的新手在入门的时候,经常没办法搞明白S3和DynamoDB之间的区别和联系

S3本质上是一种File storage 然而Dynamo是一种nosql database,其中s3比较适合于你去存储un-structured data,里面的文件系统并没有文件夹的组成形式,所有的存储对象都会变成object,其中所有的组织形式都是flat organization 的container 被称之为Buckets,作者之前任职于EMC时所参与开发的ECS,elastic cloud storage 也是同类产品。每一个object有一个独特的key用于retrive对应的object,每一个object的最大容量为5TB。这就使得s3更适用于存储大的文件。

对于dynamo来说,作为一种nosql database它的出现就是为了高的throughput还有很低的latency,dynamo会非常的适合当开发者需要处理semi structure的数据的时候。比较特殊的是dynamo支持两种primary key一种是Partition key另外一种是partition key和sort key。

同时,dynamo还提供二级的index,LSI和GSI允许开发者query和scan table。同时数据的replication也是可以在dynamo中实现的,每一个value的存储大小被限制在了400k之内,这使得dynamo最合适的应用场景是小的数据的存储。

总的对比下来,s3和dynamo之间在use case,数据的大小,以及价格之间都有很大的区别,在开发的时候谨慎选择,对之后的开发效率和经济上面的影响都很大。

3 lambda function

官方介绍:

AWS Lambda 是一项计算服务,可使您无需预配置或管理伺服器即可运行代码。AWS Lambda 只在需要时执行您的代码并自动缩放,从每天几个请求到每秒数千个请求。您只需按消耗的计算时间付费 – 代码未运行时不产生费用。借助 AWS Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,并且不必进行任何管理。AWS Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括伺服器和操作系统维护、容量预置和自动扩展、代码监控和记录。您只需要以 AWS Lambda 支持的一种语言 (目前为 Node.js、Java、C#、Go 和 Python) 提供您的代码。

您可以使用 AWS Lambda 运行代码以响应事件,例如更改 Amazon S3 存储桶或 Amazon DynamoDB 表中的数据;以及使用 Amazon API Gateway 运行代码以响应 HTTP 请求;或者使用通过 AWS SDK 完成的 API 调用来调用您的代码。借助这些功能,您可以使用 Lambda 轻松地为 Amazon S3 和 Amazon DynamoDB 等 AWS 服务构建数据处理触发程序,处理 Kinesis 中存储的流数据,或创建您自己的按 AWS 规模、性能和安全性运行的后端。

您也可以构建由事件触发的函数组成的无伺服器应用程序,并使用 CodePipeline 和 AWS CodeBuild 自动部署这些应用程序。有关更多信息,请参阅AWS Lambda 应用程序。

有关 AWS Lambda 执行环境的更多信息,请参阅 Lambda 执行环境和可用库。有关 AWS Lambda 如何确定执行您的代码所需的计算资源的信息,请参阅基本 AWS Lambda 函数配置。

我的理解:

lambda function可以说是在serverless的过程中标志性的一环,不仅仅是提供了一个可以后端处理的工具,其重要性其实很大,开发者不需要自己管理计算资源,不需要执行计算资源,没有管理的成本,简直就是serverless的典型代表,不仅仅开发的效率会有质的提升,整个应用的开发成本也会下降很多。

4 SQS 和SNS

官方介绍:

Amazon Simple Queue Service (Amazon SQS) 提供安全、持久且可用的托管队列,可让您集成和分离分散式软体系统和组件。Amazon SQS 提供常见的构造,例如死信队列和成本分配标签。它提供了一个通用 Web 服务 API,并且可通过 AWS 开发工具包支持的任何编程语言访问。

Amazon SQS 支持标准队列和 FIFO 队列。有关更多信息,请参阅 我需要哪种类型的队列?。

主要的特性有哪些?

  • 安全性 – 您可以控制谁能向 Amazon SQS 队列发送消息以及谁能从队列接收消息。利用 伺服器端加密 (SSE),可以使用 AWS Key Management Service (AWS KMS) 中托管的密钥保护队列中消息的内容,从而通过此方式传输敏感数据。
  • 持久性 – 为确保消息的安全,Amazon SQS 将消息存储在多个伺服器上。标准队列支持至少一次消息传送,而 FIFO 队列支持仅一次消息处理。
  • 可用性 – Amazon SQS 使用冗余基础设施为生成和使用消息提供高度并发的消息访问和高可用性。
  • 可扩展性 – Amazon SQS 可独立处理各个缓冲的请求,并可透明扩展以处理任何负载增加或峰值,无需任何预配置指令。
  • 可靠性 – Amazon SQS 在处理期间锁定消息,以便多个生成者可同时发送消息,多个使用者可同时接收消息。
  • 自定义 – 您的队列不必完全相同—例如,您可以设置队列的默认延迟。可以使用 Amazon Simple Storage Service (Amazon S3) 或 Amazon DynamoDB 存储大于 256 KB 的消息的内容,Amazon SQS 保留指向 Amazon S3 对象的指针,您也可以将一个大消息拆分为几个小消息。

我的理解:

作为message queue的一种具体产品,在aws的生态中,sqs起到了至关重要的作用,不仅仅弥补了从lambda function或者api gateway之间的裂缝和短板,同时还起到了一个信息延迟和传输的作用。

那么sqs和sns的区别是什么呢?

简单的概括起来,sns是broadcasting称为发布,订阅的消息收发范式,而相对应的sqs则是单通道的传输。

5API Gateway

官方介绍:

mazon API Gateway 是一项 AWS 服务,能让您创建、发布、维护、监控和保护您自己的任何规模的REST和WebSocketAPI。您可以创建可靠、安全且可扩展的 API,用以访问 AWS、其他 Web 服务以及存储在AWS 云中的数据。您可以创建 API 以在您自己的客户端应用程序(应用)中使用。或者,您可以将您的 API 提供给第三方应用程序开发人员。

API Gateway 的优势

Amazon API Gateway 具备下列优点:

  • 支持有状态 (WebSocket) 和无状态 (REST) API
  • 与 AWS 服务(如 AWS Lambda、Amazon Kinesis 和 Amazon DynamoDB)集成
  • 能够使用 IAM 角色和策略、AWS Lambda 授权方或 Amazon Cognito 用户池来授权对您的 API 的访问
  • 用于将 API 作为 SaaS 销售的使用计划和 API 密钥
  • 用以安全地推出更改的金丝雀版本部署
  • API 使用情况和 API 更改的 CloudTrail 日志记录和监控
  • CloudWatch 访问日志记录和执行日志记录,包括设置警报的能力
  • 能够使用 AWS CloudFormation 模板以支持创建 API
  • 支持自定义域名

我的理解:

当我第一次接触到API gateway的时候,我感到了前所未有的喜悦,以为之前自己在做web开发的时候,写api都是一个非常枯燥无谓的过程,总是感觉到自己的时间浪费了不少,但是自从开始在aws上面开发自己的网站,直接使用现成的api gateway确实能够让开发的效率提升不少,并且因为其本身和lambda以及s3等服务的紧密结合,使得在aws里面使用起来非常的方便。

我们会在下一章开始介绍剩余的一些重要服务:

  • Cloudfront
  • Elastic load balancing
  • EBS
  • Cloudwatch
  • CloudTrail
  • Config as code: troposphere/cloudformation/teraform

欢迎关注和期待。


推荐阅读:
相关文章