作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
张敏豪的头像

Minhao Zhang

Minhao在Linux上使用PHP和c++开发服务器端应用程序方面有10多年的经验. 他是AWS的忠实用户和云专家.

Previously At

Nokia
Share

在过去的几年里,每个人嘴边最热门的词就是“生产力”.“在快速发展的互联网世界里,快速完成某件事总是会得到好评. 尽管需要快速准确地实现真正的业务逻辑,但作为一个 经验丰富的PHP开发人员 我还花了几百个小时在其他任务上,比如 设置数据库 或者缓存、部署项目、监视在线统计信息等等. 许多开发人员多年来一直在与这些所谓的杂项任务作斗争, 浪费时间而不是专注于项目逻辑.

四年前,当一个朋友提到亚马逊网络服务(AWS)时,我的生活发生了变化. 它打开了一扇新的大门,极大地提高了生产力和项目质量. 对于没有使用过AWS的用户, 请阅读这篇文章, 我相信你会觉得值得花时间的.

提高工作效率

亚马逊网络服务(AWS)可以在几分钟内提高你的工作效率.

AWS Background

亚马逊网络服务于2006年正式推出. 很多人可能听说过它,但可能不知道它能提供什么. 所以,第一个问题是:什么是AWS?

亚马逊网络服务(AWS), 是云计算服务的集合吗, 也称为web服务, 组成了亚马逊提供的云计算平台.com.

Wikipedia

根据这个定义, 我们知道两件事:AWS是基于云的, AWS是一系列服务的集合, 而不是单一的服务. 由于这并没有告诉你太多,在我看来,初学者最好将AWS理解为:

  • 正如其定义所说,AWS是云服务的集合.
  • AWS在线提供快速计算资源(例如, 你需要10分钟来设置一个Linux服务器).
  • AWS提供可承受的费用.
  • AWS提供易于使用的开箱即用服务, 哪一种方法可以节省大量手动设置数据库的时间, cache, storage, 网络和其他基础设施服务.
  • AWS始终可用,并且具有高度可扩展性.

There are, of course, 使用AWS有更多的优势, so, 让我们快速了解一下它是如何提高你的工作效率的.

免费创建一个AWS账户

要开始使用任何服务,您需要有一个帐户. 为AWS创建一个帐户应该不超过5分钟. 确保你手头有以下资料:

  • 电子邮件地址,用于接收确认邮件.
  • 一张信用卡,因为安装过程总是免费的,所以不会收费.
  • 一个电话号码,该号码将接收自动系统呼叫以识别用户

That’s it. 一旦你有上面列出的信息准备好,访问 AWS web page,并按照简单易懂的说明创建一个帐户.

Note the following:

  • 大多数AWS服务每月都提供大量的免费资源. 也就是说,测试AWS通常只需要很少的成本,甚至不需要任何成本.
  • 根据我的经验,电话号码和其他个人信息没有被滥用

获得第一个EC2服务器设置

云服务的好处之一是能够按需获得共享资源. 亚马逊为用户提供了四层服务来访问其服务, 按难易程度排序:

  • Management Console,
  • Command-Line-Tool,
  • SDK,
  • RESTful API.

在本文中,我们将使用Management Console. So, after you 登录控制台,您将看到如下所示的屏幕:

在AWS中设置第一个EC2服务器

有两个方面需要注意:

  • 在右上角,您将找到区域选择器. AWS在全球11个不同地区提供服务,而且还在不断增长. 选择一个区域作为你的选择,或者把它留给美国东部(N). 弗吉尼亚)作为默认. 不同地区的价格可能不同,随着使用量的增长,您应该记住这一点.
  • 屏幕的大部分都是服务列表. 我们将在本节中介绍EC2. 让我们快速了解一下AWS提供了什么. 如果它们没有意义,也不用担心,所有的服务都会自己工作. 但是,通过组合使用它们,您将获得更高的生产力.

云资源最基本的需求是虚拟服务器. EC2,即弹性计算云,是Amazon为其虚拟服务器服务选择的名称. 让我们看看让Linux服务器联机是多么容易.

  • 在EC2管理控制台中,启动启动过程,如下所示:

在AWS中设置第一个EC2服务器

  • 选择一个机器映像(简称AMI)开始. 这是运行您的机器的操作系统. 选择你喜欢的任何系统. 我建议您从Amazon Linux开始,它使用 yum to manage packages:

在AWS中设置第一个EC2服务器

  • 接下来,选择一个实例类型. 您可以将其理解为虚拟服务器的硬件规范. You can start with t2.micro,因为在第一年,您每个月将获得750小时的免费使用. Note this is valid only the first year 从你注册之日起 only for the t2.micro instance. 如果您只是想体验一下AWS,这是一笔不错的交易.

在AWS中设置第一个EC2服务器

  • 有了更详细地配置服务器的能力,就可以启动服务器了. 第一次使用EC2时,您将看到一个类似于下面的屏幕. 关于安全的警告告诉我们亚马逊有多强调安全方面. 但是,在访问关于托管服务的部分之前,我们可以忽略此警告.

在AWS中设置第一个EC2服务器

  • 最后,要访问远程服务器,我们需要一个身份. AWS将提示我们选择SSH密钥对,如下图所示. 下载私钥文件并单击启动按钮. And yes, we are done; a new virtual server is being configured and will be ready in a few minutes.

在AWS中设置第一个EC2服务器

  • 一旦实例准备好,您就可以作为默认用户登录到系统 ec2-user,用你的私钥. ec2-user AWS默认也有sudo功能吗. 虽然不能更改默认用户名, 您可以创建任何用户,并根据您的偏好分配适当的权限. 您的服务器地址可以在这里找到:

在AWS中设置第一个EC2服务器

上述过程不超过5分钟, 这就是我们如何轻松地建立和运行一个虚拟服务器. 在下一节中,我们将了解AWS如何帮助我们管理刚刚创建的实例.

On-demand billing

大多数AWS资源按小时计费,这提供了良好的灵活性. For example, 以我们刚刚创建的EC2实例为例, 有两种方法可以使它停止服务:停止和终止. 这两个操作都将停止计费. 不同之处在于,通过停止一个实例,我们可以稍后重新启动它,同时保存所有的工作. In contrast, 通过终止实例, 我们将实例返回给AWS进行回收,但没有办法恢复信息. 终止实例的需求源于AWS在默认情况下为每个区域每个帐户设置了20个实例的限制, 停止的实例在终止之前仍然计数.

我们可以通过以下方式快速停止实例:

在AWS中设置第一个EC2服务器

当您停止EC2实例时,您的账单也停止增长. 它在以下场景中特别有用:

  • 当你想尝试新事物的时候, 如果你只需要支付几个小时的费用,这是更划算的, 对于某些服务,你可能不会超过免费级别.
  • 当您的计算需求在生产环境中扩展时. For example, in the past, 我需要预留的计算资源通常比峰值使用量多30- 50%. 使用AWS,我可以以更灵活的方式提供资源:

在AWS中设置第一个EC2服务器

AWS的定价信息可在线获取. 在做了一些计算之后,您可能会提出这样的问题:AWS实际上更便宜吗? 通过乘以一个月的小时费率,看起来它根本没有竞争力. 答案是肯定的和否定的.

如果您简单地计算按需资源在一个月内的小时费率,AWS并不便宜. 但是,我们仍然有如下所示的保留实例计费选择:

在AWS中设置第一个EC2服务器

对于最小的资源需求, 我们可以使用保留实例获得30%到70%的折扣, 以及作为按需实例计费的其他不同资源. In practice, 这将比一年的承诺便宜30%到40%, 使用保留实例的三年承诺甚至更多. 这就是我对上述问题投赞成票的原因. 如果算上安全性和监控方面的好处,AWS甚至会更便宜.

Managed services

AWS的目标之一是尽可能地减少运营成本. Traditionally, 我们需要一个庞大的系统工程师团队来维护我们基础设施的安全和健康, 无论是在线还是现场. 有经验的团队将编写和部署他们的自动化工具来简化这个过程. 然而,管理服务在实践中也变成了一个复杂的项目. AWS在帮助我们管理资源方面起到了救星的作用. 下面,我列出了一些最常用的AWS服务:

  • AWS Security Group,
  • 身份访问管理;
  • CloudWatch,
  • 以及自动部署服务的列表,例如 OpsWorks (本文将不涉及这一点).

AWS Security Group

AWS如何在两个独立的层中处理服务的访问控制. 在网络级别,它是通过使用称为“安全组”的思想来实现的.“所有AWS服务都在安全组中. 安全小组决定谁可以通过. 以我们的EC2实例为例,AWS自动为我们创建了一个安全组:

在AWS中设置第一个EC2服务器

我们可以通过配置入站/出站规则来决定哪些可以进来,哪些可以出去. EC2服务支持TCP、UDP和ICMP规则. 安全组的作用类似于外部硬件级防火墙, 我们永远不需要去修补它.

使用安全组的另一个优点是它是可重用的. 一个安全组可以在许多资源之间共享. In practice, 它消除了为每个资源逐个设置安全策略的麻烦,从而大大提高了维护效率. Also, 安全组的可共享特性使我们能够在一个地方对其进行配置, 并将该安全策略应用于任何其他资源, 没有手动设置的麻烦, 每个资源一个接一个.

身份和访问管理

AWS提供了另一种处理访问控制的方法 IAM. 当您需要访问RESTful接口时,这是一个应用程序级别的安全控制. 每个REST请求都必须签名,以便AWS知道谁在访问服务. Also, 通过检查预先配置的策略列表, AWS将决定该操作是应该被拒绝还是允许通过.

我们不会在本文中详细介绍IAM. However, 请注意,AWS在安全性方面做了很多考虑,因此您可以确保没有未经授权的访问者可以访问您的机密数据.

CloudWatch

CloudWatch AWS是否提供了一项服务,用于从您的AWS资源中收集和跟踪各种指标. 它更强大是因为它有能力对某些事件(或警报)做出反应。. 在CloudWatch的帮助下,我们可以监视新创建的EC2实例的运行状况.

  • 我们可以快速地向EC2实例添加警报:

在AWS中设置第一个EC2服务器

  • 可以通过为许多不同的目的指定标准来创建警报:

在AWS中设置第一个EC2服务器

NOTESNS是AWS提供的一种基于主题的通知发送服务. 通知可以通过电子邮件、短信、iOS/Android推送通知和许多其他格式发送.

从监控到通知,CloudWatch试图在几次点击中自动化监控需求. 各种AWS服务预定义了大量的指标. 对于高级用户,您甚至可以为您的应用程序创建自定义指标.

Regarding cost, CloudWatch提供的免费服务通常对初创项目来说已经足够了. However, 即使你的公司在成长, 增加的成本通常不到服务成本的1%. Check detailed pricing 欲知更多资料. 考虑到使用CloudWatch建立监控系统是多么容易, 它已成为最常用的监控工具.

无麻烦的应用服务

作为开发人员,我们可能经历过以下场景:

  • 我们的应用程序需要一个数据库组件,这意味着我们必须:
    • 为数据库获取服务器.
    • 安装数据库软件.
    • 为服务器和数据库配置监视器.
    • Plan backup schemes.
    • 根据需要给软件打补丁.
    • 还有很多没有在这里列出的.
  • 我们的应用程序需要分布式文件存储,这意味着我们必须:
    • 查找分布式文件存储的现有开源(或商业)解决方案.
    • 准备所需的服务器.
    • 安装和配置所选的解决方案,这通常并不简单.
    • 为服务器和数据库配置监视器
    • 还有很多没有在这里列出的
  • 我们的应用程序需要缓存.
  • 我们的应用程序需要一个消息队列.
  • 还有很多其他问题需要解决,另外,我们需要做前期配置和后期监控工作.

而且,正如您可能已经猜到的那样,这是AWS可以提供帮助的另一个重要领域. 有很多应用程序级别的服务可用,因此您不需要考虑其他任何东西.

让我们来介绍其中的一些,给你一个快速的了解.

RDS,数据库为您管理,但不是由您管理

关系数据库(RDBMS)已经被许多应用程序广泛采用. 在生产环境中,在使用 RDBMS, 从如何设置和配置数据库开始, 然后是何时以及如何创建和恢复备份.

In our team, 我们的数据库管理员(DBA)过去至少花费30%的时间编写设置和维护脚本. 随着 AWS RDS, 我们的DBA有更多的时间进行SQL性能调优, DBA最喜欢投资哪个领域.

那么,RDS能为你提供什么呢? In short:

  • RDS为大多数流行的数据库引擎提供支持, including MySQL, SQLServer, PostgreSQL.
  • 只需单击几下即可创建一个数据库,无论是节点还是集群.
  • RDS为共享数据库参数提供内置支持, 在名为“参数组”的服务下.
  • RDS在Security Group的帮助下为访问管理提供内置支持 , 这与我们在EC2中讨论的非常相似.
  • RDS通过一次单击启用Multi-AZ提供额外的服务. 所有监视、备用和故障转移切换都是自动完成的.
  • RDS的维护和备份是自动化的.

To conclude, 在设置和维护数据库服务时,RDS节省了大量时间. 作为交换,您将比相应的EC2服务器多支付大约40%的费用. 因此,是选择RDS还是自己部署相应的服务器是一个业务决策. However, 它确实允许您将更多的时间投入到与实际业务相关的工作中,而不是基础设施的稳定性和可伸缩性. 另外,您很快就会注意到这是AWS倡导的业务方式.

Dynamo DB,一个键值存储扩展到数十亿条记录

近年来,NoSQL已经成为一个热门话题. 因为许多现实生活中的项目并不需要各种关系DBMS的支持, 一系列NoSQL数据库已经被引入市场. 亚马逊在这方面并没有落后. DynamoDB (http://aws.amazon.com/dynamodb)是亚马逊在2012年宣布的键值存储, 这项服务的核心贡献者是Werner Vogels, CTO of Amazon, 超可扩展系统领域的世界顶级专家之一.

众所周知,亚马逊处理着巨大的流量. DynamoDB派生自Dynamo, 它一直是亚马逊许多业务的内部存储引擎, 包括它的购物车服务,每年圣诞节都会处理数十亿个请求. DynamoDB在扩展方面没有限制.

Further, 与其他NoSQL解决方案相比, 例如Cassandra或MongoDB, there is an enormous economic advantage to DynamoDB; it is billed in the unit of reserved throughput (how many write/read per second is allowed), 哪些可以实时增加或减少. 下面是DynamoDB和其他独立NoSQL解决方案的成本比较表:

Business NeedDynamoDB serviceDynamoDB cost使用其他服务使用其他服务时的成本
Small Business
(小于1000 DAU, 16GB数据)
10 write unit
10 read unit
$9.07/month • t1.micro ••
16GB EBS •••
$14.64/month
Medium Business
(小于100k DAU, 160GB数据)
100 write unit
100 read unit
$101.62/month m4.xlarge
160GB EBS
$190.95/month
Large Business
(高达100万DAU, 1TB数据)
1000 write unit
1000 read unit
$852.58/month Clustered c4.4xlarge • 512GB EBS • $1329.24/month

•公平起见,价格是根据美国东部地区的按需定价计算的
••选择AWS EC2实例来托管其他NoSQL服务
•••EBS是AWS提供的持久化存储服务

我们可以从表中读出, DynamoDB提供开箱即用的服务, 而且与构建自己的键值存储相比,通常成本更低. 这是因为除非您达到MongoDB/Cassandra集群的最大容量, 你在为你从未使用过的东西支付更多的钱.

亚马逊以完全托管的方式提供服务. 这意味着您不必担心如何设置, scale or monitor your DynamoDB; they are all done by AWS. In fact, DynamoDB项目的读写总是以恒定的时间复杂度来衡量, 不管被操作的数据有多大. 因此,一些应用程序在切换到DynamoDB后选择放弃缓存层. Amazing, indeed.

分布式队列服务

当处理大量数据时,我们经常将计算分配给许多计算节点. 在全球开展业务时, 我们经常需要一个管道来处理从地理分布广泛的节点收集的数据. 为了帮助满足此类事件的需求,AWS引入了SQS,即简单队列服务. 像许多已确认队列服务一样, SQS提供了一种在不同逻辑组件之间传递消息/作业的方法, 以持久的方式.

顾名思义,SQS是在AWS开始时提供的基本服务. However, 亚马逊一直在稳步发展SQS, 根据需要, SQS可能像您需要的那样简单或强大,具有许多可定制的参数. SQS的一些高级功能包括:

  • 保留消息长达14天.
  • 在故障事件中避免消息丢失的可见性机制.
  • 每条消息的传递延迟.
  • 重新驱动策略来处理失败的消息(所谓的死信).

队列服务不应该太复杂. 您可能想知道为什么值得用一整节来介绍SQS. Perhaps you have already guessed the reason; like other AWS service, SQS是一个完全托管的服务, which means:

  • The queue is highly scalable; it can be tens of messages you are passing through or millions per second, 所以SQS的规模在不断扩大.
  • 队列是持久的和分布式的, 这意味着除非过期,否则关键数据不会丢失.
  • 您不需要设置服务器来部署队列软件. 当然,您也不需要为服务设置复杂的监视

S3,一个文件存储,但不仅仅是一个文件存储

S3代表简单存储服务,就像Dropbox一样,是为最终用户提供的服务, 但这是应用程序. 根据定义,S3是具有简单web界面的基于对象的存储.

S3对用户来说很简单,但也附带了许多高级特性. S3已经成为行业标准,特别是对于使用其他AWS服务的应用程序. 这主要是因为S3非常容易集成,因此它已成为大多数AWS服务的热门外部存储目的地. 此外,许多服务(如DynamoDB、SQS等)在内部大量使用S3.

理解S3可以增强使用其他AWS托管服务的好处. 这是因为大多数服务将备份存储在S3上. Also, S3是服务的常用导出/导入目的地,包括, but not limited to, DynamoDB, RDS, and Redshift.

Finally, S3 is like other AWS services; it’s fully managed so we can simply start using the service without setting up any server or failover mechanisms. 在经济方面,S3也是一种按使用付费的服务,因此,您可以随时试用它,而无需花费太多成本.

更高级的服务和SDK

还有许多其他AWS服务也值得注意. 由于篇幅有限,我们在这里只列出一些有趣的:

  • Redshift:一种基于列的数据库,可用于处理 trillions of data in a very fast manner. 如果你是负责的,你一定要试试 ETL 大量的数据.
  • Data Pipeline:支持在AWS服务之间快速传输数据, 并进一步实现在较小的分片中周期性地处理数据.
  • ElastiCache:托管Memcache服务器,简单但工作完美.
  • Lambda:下一代云计算. Lambda以事件驱动的方式运行一段上传的代码,这为设计分布式应用程序打开了一扇新的大门.
  • Route53: Powerful DNS solution 在加权响应的支持下, 在其他工业标准DNS解决方案之上的基于地理位置的响应.
  • SNS:易于使用的通知服务,采用订阅者/发布者模式设计.
  • Many more.

我认为,每当向应用程序引入一些新组件时,检查AWS是一个好习惯. 大多数情况下,AWS会给您一个惊喜,因为它提供了一个现成的SaaS替代方案.

Furthermore, 使访问RESTful接口变得更容易, Amazon已经为几乎所有流行的编程语言提供了sdk. 你应该不难找到你最喜欢的 SDK.

Summary

在本文中,我们介绍了一些使用最广泛的AWS服务. 当然,在某些领域,AWS可以帮助您的业务. 您可以选择将现有服务组件迁移到其AWS等效组件, 如MySQL数据库到RDS, for instance. 您可能会问我的软件的这个组件是否有任何AWS服务? 因此,立即获得AWS帐户,并在几分钟内提高您的工作效率.

就这一主题咨询作者或专家.
Schedule a call
张敏豪的头像
Minhao Zhang

Located in Beijing, China

Member since December 15, 2015

About the author

Minhao在Linux上使用PHP和c++开发服务器端应用程序方面有10多年的经验. 他是AWS的忠实用户和云专家.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Previously At

Nokia

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.