最常用的 AWS 服务以及我们的使用方式
本文最初发表在我的博客上。
我在一家初创公司担任高级软件开发人员。我们主要提供 API,将语音和短信服务集成到应用程序中。因此,我们的整个基础设施自然都部署在云服务提供商上,而我们这里指的是 AWS。
对于从未管理过云基础设施的人来说,理解构建可扩展应用程序所涉及的不同组件可能非常困难。就我个人而言,在加入 AWS 之前,我对 AWS 的概念一无所知。在过去的两年半里,我学到了很多关于 AWS 的知识,并且深知学习这些概念的重要性,因此我决定为想要开始使用 AWS 或其他云服务提供商的人们撰写一系列文章。这是该系列的第一篇。
AWS 是市场领导者之一,提供云计算服务并为 Facebook、Netflix、LinkedIn、NASA 等公司的应用程序提供支持。
作为软件开发者,了解构建分布式、高度可扩展应用程序所需的各种云计算服务至关重要。如果您尚未接触过基础设施,那么在您的开发生涯中,未来某个时候您肯定会接触到它。在本文中,我将介绍我们使用的一些重要的 AWS 服务。
AWS 提供许多服务,但以下是常用的服务:
- 弹性计算云(EC2)
- 关系数据库服务 (RDS)
- 弹性容器服务 (ECS)
- ElastiCache
- 简单存储服务(S3)
- 简单队列服务(SQS)
- 负载均衡器
- 53号公路
- AWS Lambda
- 亚马逊虚拟私有云 (VPC)
1.弹性计算云(EC2):
EC2 实例基本上是带有操作系统的服务器,可用于在互联网上运行您的应用程序,就像您在开发期间在笔记本电脑上运行应用程序一样。
EC2 机器的 CPU、内存、RAM 等配置各不相同。它们根据计算能力、内存优化、存储优化等进行分类。例如,所有内存优化实例都属于m系列。所有计算优化实例都属于c系列,等等。
您可以使用这些实例来运行后端服务器、后台脚本、数据库服务器、前端应用程序等。
由于我们有许多微服务来支持我们的 API,因此我们将这些实例与 Elastic Container Service(容器编排服务)一起使用来部署我们的 Docker 容器。我们甚至使用独立的 EC2 实例作为 Jumpbox 主机来运行任何临时脚本,以执行诸如回填数据、连接私有数据库、Redis 缓存等任务。
2.关系数据库服务(RDS):
RDS是一种分布式关系数据库服务。
Amazon RDS 适用于多种数据库实例类型 - 针对内存、性能或 I/O 进行了优化 - 并提供六种熟悉的数据库引擎供选择,包括 Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle Database 和 SQL Server。
Amazon RDS 允许您在同一区域或不同区域创建只读副本。您可以为给定的源数据库实例创建一个或多个副本,并通过多个数据副本处理大量应用程序读取流量,从而提高总读取吞吐量。您还可以根据需要将只读副本提升为独立的数据库实例。
我们所有主数据库都使用 PostgreSQL,并使用 RedShift 保存分析和报告所需的数据。一个中央数据库用于存储通用数据,而其他独立的数据库则分别用于存储各个团队负责的不同产品的相关数据。
3.弹性容器服务(ECS):
AWS ECS 是一种完全托管的容器编排服务。
ECS 一直是 Amazon 主要服务的基础支柱,它可以与 Amazon Route 53、Secrets Manager、AWS Identity and Access Management (IAM) 和 Amazon CloudWatch 等其他服务原生集成,为您提供部署和扩展容器的熟悉体验。
您可以为 ECS 集群添加自动扩展功能,根据流量需求增加或减少实例和任务的数量。当服务流量较高时,您可以增加集群实例和服务任务的数量。同样,当流量较低时,您可以减少它们的数量。例如,您可以为特定服务保留 4 个容器的期望数量。使用自动扩展功能,您可以设置规则,例如,如果 CPU 百分比超过 80%,则添加 2 个容器;如果 CPU 百分比低于 40%,则删除 2 个容器。
在我们的组织内,每个团队都有自己的 ECS 集群,每个集群都包含各自拥有的微服务容器。我们根据流量独立扩展各个服务。
4.ElastiCache:
Amazon ElastiCache 是一种高吞吐量、低延迟的内存数据存储和缓存,可支持需要亚毫秒级响应时间的最苛刻的应用程序。
Amazon ElastiCache 是缓存、会话存储、游戏、地理空间服务、实时分析和排队等实时用例的热门选择。
Amazon ElastiCache 为需要亚毫秒级响应时间的最苛刻的应用程序提供完全托管的 Redis 和 Memcached。
与 EC2 实例类型类似,有多个实例系列和类型可用,如 t3、r5、m5 等。您可以根据计算要求和预算限制使用所需的实例系列和类型。
在我们的组织中,我们有一个服务,每秒大约有 6000 个请求,我们需要它提供较低的 API 响应时间。因此,我们决定使用 ElastiCache 作为这项微服务的主要数据源。该服务能够以个位数毫秒的响应时间处理请求,没有任何问题。
除此之外,我们还在许多其他关键服务中使用 Redis 作为写通、写回缓存,以及存储一些可以快速访问的数据。
5.简单存储服务(S3):
顾名思义,S3 提供低成本的对象存储服务,具有高可扩展性、数据可用性、安全性和性能。
S3 可用于存储许多用例的文件,如网站、移动应用程序、企业应用程序、备份和恢复等。
Amazon S3 的设计耐用性达到 99.999999999%(11 个 9),并为全球各地的公司存储数百万个应用程序的数据。
我们在各种用例中使用 S3,例如存储通话记录、发票 pdf 文件、付款收据、备份旧服务日志、使用 Amazon Athena 查询存储在 S3 中的数据进行分析等。我们甚至将它用于 lambda 触发事件。
6.简单队列服务(SQS):
SQS 是一项完全托管的消息队列服务,可让您独立地解耦和扩展微服务。使用 SQS,您可以在不同组件之间以任意规模发送、存储和接收消息。这有助于您构建高度可扩展的分布式应用程序。
SQS 提供两种类型的消息队列:
-
标准队列:当您对最大吞吐量有要求、不需要排序并且至少需要传递一次消息时,应该使用标准 SQS。
-
FIFO 队列:当消息的顺序很重要并且应该按照发送的顺序只处理一次时,应该使用 FIFO SQS。
SQS 队列的两个重要属性是消息保留期和默认可见性超时。
消息保留期:指推送到队列的任何消息的保留时间。例如,如果此值为 3 天,则消息将在 3 天后从队列中删除。
默认可见性超时:一旦任何工作人员/应用程序拾取了一条消息,默认可见性超时就是该消息再次可见以供其他工作人员拾取和处理的时间。
7.负载均衡器:
负载均衡器是任何分布式系统的关键组件,它位于客户端和服务器之间,接受传入的请求,并将它们路由到服务器集群以处理负载。
它跟踪所有已连接服务器的健康状况。如果某个服务器不健康,它就不会向该服务器发送传入请求。
负载均衡器的好处:
- 更快的用户体验
- 更少的停机时间和更高的吞吐量。如果某个服务器宕机,LB 会负责将流量路由到其他正常运行的服务器。
- 减少单个服务器的负载并防止任何一个应用服务器成为单点故障。
- 缩短响应时间
- 提高整体系统可用性
使用的路由算法:
- 最小连接法
- 最短响应时间法
- 最小带宽法
- 循环法
- 加权循环法
- IP哈希方法
我们在服务中同时使用面向互联网和内部的负载均衡器,具体取决于它是面向客户的应用程序还是内部微服务。
还有许多其他概念与负载均衡器紧密相关,例如:
- 目标群体
- 监听器规则
这些不在本文的讨论范围内。但我强烈建议您阅读一下。
8.53号公路:
Route53 是 AWS 推出的一款高可用、可扩展的 DNS 服务。如果您不知道 DNS 服务是什么,它本质上是一种将域名(例如www.example.com)转换为计算机用于相互连接的数字 IP 地址(例如 192.0.2.1)来路由最终用户到互联网应用程序的服务。
Route53 允许我们通过多种路由类型来路由流量,例如简单路由、加权循环、延迟路由、故障转移路由、多答案路由、地理定位等。通过这些路由的不同组合,我们可以构建高度可用的容错系统。
根据您希望如何根据 DNS 查询进行路由,有不同类型的 DNS 记录可用:
- 记录类型
- AAAA 记录类型
- CAA 记录类型
- CNAME 记录类型
- MX 记录类型
- NAPTR 记录类型
- NS 记录类型
- PTR 记录类型
- SOA 记录类型
- SPF 记录类型
- SRV 记录类型
- TXT记录类型
我们在组织内的各种用例中使用 route53 来:
- 使用 CNAME 记录将流量从主机端点路由到内部负载均衡器
- 使用故障转移 A 类型记录将流量从主机端点路由到多区域服务
- 根据权重将流量路由到不同的负载均衡器。例如:过去,我们在 Opsworks 上部署了微服务。当我们迁移到新的基于容器的架构时,我们必须使用基于权重的路由,将流量缓慢地从旧服务迁移到新服务。
- 使用 A 类型记录来创建别名等。
9.AWS Lambda:
AWS Lambda 允许您在无需配置或管理服务器的情况下运行服务。您只需为使用的计算时间付费,而在 24/7 全天候运行的 EC2 实例中,您需要为这些服务器运行的整个时间付费。
通过提供按需计算,Lambda 允许您仅在需要时运行应用程序。您只需上传代码,Lambda 会负责运行应用程序所需的一切,并实现高可用性的扩展。
使用 Lambda 的好处:
- 无需管理服务器
- 持续扩展
- 亚秒级计量
- 始终如一的表现
我们在组织内使用 lambda 来生成付款收据、发票、数据核对、回退机制、分析等用例。
Lambdas 可以根据触发器进行调用,例如数据变化、系统状态变化、文件上传到 S3、用户操作等。
10.亚马逊虚拟私有云(VPC):
AWS VPC 是 AWS 的核心组件之一,它与其他多个组件协同工作以保护应用程序,逻辑隔离 AWS 云的各个部分,您可以在虚拟网络内启动资源。
您可以通过安全组、子网、路由表等完全控制您的虚拟网络环境。例如,您可以创建一个包含公共子网的面向公众的负载均衡器。这些公共负载均衡器背后的应用程序可以通过互联网访问。同样,您也可以使用只能在 VPC 内访问的私有子网来创建私有服务、数据库、缓存等。
在实际应用中,我们有时会遇到需要从一个 VPC 访问另一个 VPC 中的资源的情况。在这种情况下,我们需要创建VPC 对等连接来允许这种访问。
如前所述,VPC 本身包含大量概念,如果您想更好地理解 VPC,我强烈建议您阅读以下概念:
- 安全组
- 子网
- 路由表
- VPC 对等连接
- 我是
- 互联网网关
- NAT 网关
除了上面提到的组件之外,还有许多其他关键组件超出了本文的讨论范围:
- OpsWorks
- 红移
- 运动
- DynamoDB
- 社交网络
- CloudFront 等
如前所述,本文是本系列的第一篇,旨在介绍 AWS 中各种常用的组件。在后续文章中,我将详细介绍具体的用例、我们面临的问题以及如何使用 AWS 解决这些问题。
订阅我的博客以了解这些文章的最新动态!
如果您是云计算的初学者并想学习 AWS 概念,这里有一门很棒的课程,由在亚马逊 AWS 团队工作了 10 多年的 Daniel Vassallo 讲授。
如果您认为文档太多,我强烈建议您购买本课程。
在Twitter上与我联系,我通常会在那里分享有关 AWS 概念、构建 SaaS 产品以及成为更好的开发人员的知识。
鏂囩珷鏉ユ簮锛�https://dev.to/sunilc_/most-commonly-used-aws-services-and-how-we-are-using-them-238n