AWS 的一些服务

AWS 算是 A 家的神器之一了,咱对 infrastructure 是怎么 build 的不是太清楚,只能简单的讨论一些上面的服务,供大家参考。

计算资源

最简单的计算资源莫过于通过虚拟机构建的“计算机”,虚拟机可以设置配置的内存、硬盘等参数,并通过安装一些 OS 镜像以及维护对应的升级提供基本的“主机”,这就是 EC2 的基本概念,一批物理主机上通过部署 EC2 主机,将其运行开销 charge 客户。当然这层简单的抽象好处在于减少客户对实际主机进行运维的成本,但是应用层之上的一切仍然需要客户自己来动手。

另一种抽象可以纯粹从计算资源上来处理,客户提交的是计算任务,通过集群的任务规划在给定约束条件下完成,这样客户甚至不必关心 OS,而仅仅关注于任务本身。听说 Google 家有一个很牛 x 的 scheduler 可以将 MapReduce 任务、MPI 等分别部署到合适的主机上执行。A 家现在仅仅基于 hadoop 平台提供了 EMR,其输入输出和 AWS 的存储技术一体。

这些资源还需要一些支撑性的技术才能为客户带来使用的便捷性,比如 Direct Connect 就是通过假设高速连接,使得企业可以将自己的 intranet 和依托 AWS 建立的 prod network 连接起来,方便管理和部署自己的任务;route 53 是为虚拟机网络构建的 DNS 服务;VPC 是为了特定用户(认为数据需要物理上隔绝)提供的孤立的集群服务。

存储与内容分发

说到存储,本质上就是类似一个“云端”的文件系统,但是实际上这个问题可以做得更加“复杂”更加符合应用的需求。AWS 最早的存储服务大概是 S3,这是一个存储文件的服务,用户可以在上面创建 bucket(对应一个 URL 前缀),每个 bucket 里面就是 key/value pair(通过 URL 后面的 key 获得存储的文件),这个简单的服务其实可以为很多网络服务提供支撑,比如 Dropbox、coursera 上教学视频,等等。

当然如果这些内容存在“过期”的要求,一个廉价的解决方案就是将其移动到 AWS 的 Glacier 里面,这是一个 archiving 性质的服务,可以想象其价格会比 S3 更为低廉,通常不能通过 URL 访问其内容,但可以要求其将部分数据 restore 到 S3。

这部分的附加服务包括 CloudFront,起作用在于通过 AWS 的云存储构架实现快速的内容分发,我们知道如果内容仅仅存储在一个物理位置,世界各地的访问速度将会有快有慢,慢的程度取决于到服务器的路由。大公司诸如 Google 或者 Amazon 都必须通过建立多个不同物理位置的数据中心(甚至每个地区存在多个 availability zone),降低“偏远”地区访问其数据的 latency,那么利用这套网络,内容发布商就能降低其用户获得内容的延迟,这也就是 CloudFront 的作用;storage gateway 可以将传统的 on-premises software 集成到云存储服务中。

数据库

其实数据库也可以认为是存储的一种延伸,通过自己的 EC2 主机安装并部署数据库当然是一种解决方案,AWS 的 RDS 提供了另一个思路,这是一个 managed database,只需要简单的配置就能够获得一个数据库(对应有 replication 等提高 availability 的方案),客户可以省略其维护成本,可惜这种服务仅仅支持三个数据库(MySQL、Oracle 需要自己的 license、SQL Server),如果要玩 MongoDb 之类的 NoSQL 可以考虑 DynomaDB,这是一个 distributed key-value store(同时也提供了一些别的功能,如 distributed lock),因为没有了 relational DB 的一些运算上的功能(如 join 需要在 application level 实现),DynamoDB 的价格比 RDS 更为低廉,并提供了更好的 write throughput(关系型数据库通过增加 replica 可以提高 read throughput)。

数据库应用往往需要一个 cache 层减少磁盘 IO 的开销,ElasticCache 提供了一个 distributed cache 的解决方案,通常这层 cache 可以减少对 RDS 的开销;数据库另一个应用是 ETL(extract、transform 和 load),这通常是数据库之间数据进行的操作,AWS 提供了 redshift 解决 Petabyte 量级的 ETL 数据仓库。实际上hadoop 对很多企业来说并不是用来做计算而是做廉价的 ETL 系统。

应用层

有了数据库,在 AWS 的生态系统里面实现分布式服务还是有一些困难的,AWS 应用层的服务就是将其中通用的解决方案抽象出来作为服务提供给客户降低分布式应用的开发难度。

  • SES 通过 email 对客户进行通知
  • SQS 提供了分布式的 queue,其中的 message 可以被别的程序 consume,服务保证 message 仅被一台主机处理,如果处理主机宕机会将消息分发给其他 polling 的客户端
  • SNS 提供了 push notification 的功能,通常与 SQS 联合使用
  • SWF 提供了分布式任务处理,通过 future 将任务串联起来,在多台主机上执行

除此以外 AWS 提供了 CloudSearch 和 Elastic Transcoder,前者提供了搜索服务,后者提供了多媒体格式转换。

部署与管理

当然除了以上为构建分布式应用提供的服务以外,AWS 也提供了部署与管理的一些东西,比如 IAM 进行账户管理(一个 AWS 账户可以通过创建多个子账户将不同服务使用不同的账户来使用);CloudWatch 提供了对系统的监控;等等。

算法方面的研究

分布式系统一些基本的问题,很多时候还是需要比较强的算法了解,如 paxos 和 gossip。后面需要一个一个的了解一下。

——————
And Laban had two daughters: the name of the elder was Leah, and the name of the younger was Rachel.

Advertisements
AWS 的一些服务

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s