《AWS云端企业实战圣经——亚马逊如何构造云端计算》是由中国台湾资深AWS操作专家林允溥(豆瓣)写的一本书,知名度较高。上研以来,因为导师的关系接触了比较多的云计算概念比较多,对云计算行业巨擘Google、Amazon、VMware等公司听得比较多,但对他们的云计算产品/解决方案的认识却仅停留在粗浅的了解层次上。近期在图书馆偶遇这本书,故想认真一览,希望能窥得AWS的一些更本源的东西。(目前云计算知识还不成体系,时间匆促,故仅记录本书中令我眼光一亮的内容,想了解更多请翻阅此书)
第一章:谁应该使用云计算
这是打开当今对云计算各种偏颇认识的钥匙,云计算不是万能的,但没有云计算确实万万不能的。正如作者所言“云端是一种工具,它适合在特定环境解决特定问题”。
1. 首先得意识到如今网络已经平民化、普及化,其次要认识到云计算诞生的需求来自多方面(web产生数据量、用户访问量、pay for the peak...);
2. 几个负面的云计算定义例子(当然不止这些):“云计算=使用VM”、“云计算=分布式计算”、“使用云计算=应用程序有高可扩展性” 、“所有系统都适合云计算”;
3. 云计算的定义非常多,这一方面是由于定义者出发的角度(用户、服务器提供者、设备商)以及企业的利益诉求不一,另一方面则是因为学术界因研究需求造出的定义。本书给出的定义“依用户所需,以因特网为基础,来提供大量的运算能力,分享资源和服务”,这跟作者的身份相符,从使用者/管理者的角度来定义,比较公允。
4. 云计算三个层次:(比较清晰)
IaaS(Amazon、Rackspace):"通过因特网,以服务的形式提供运算能力、存储设备、网络及其他基础设施。" 核心技术虚拟化,对用户”pay as you go”,单位image/VM;
PaaS(Google、MS、Salesforce.com):概念基本同IaaS,但需要特定的执行环境。单位为应用程序,一般提供SDK、IDE及基础管理操作;
SaaS(Google):“完成的应用程序,通过因特网以服务的形式提供给用户”,用户只需要Browser,无需安装软件。
5. 注意云计算与传统计算架构如虚拟主机、专属服务器和主机托管的区别(这些传统架构现在摇身一变,贴上了云计算的标签)。关键词:可伸缩性(Elasticity)
6. 云计算的优势(成本、可用性、持久性)和风险参半;
7. 适合云计算的场景(精彩),可从优点出发找各种应用场景的契合点。如Startup companies(成本、快速迭代...)、高可扩展性网络应用、大量运算需求、备份和容灾、开发与测试(环境快速搭建)。
第二章:云计算领导者AWS
作者认为Amazon web service(AWS)是目前最好的云计算服务,这并非盲目推崇,AWS是学习云计算精髓的标本。
1. AWS的组合式服务概念:类似堆积木,提供多种服务满足特定需求且各种服务可组合使用。涉及运算、存储、数据库、网络、消息、监控、付款等;
2. AWS服务提供WS接口,包括SOAP、REST和Query API(类REST)。支持多种开发语言,SDK和IDE;
3. AWS的两个重要概念:Region(地理上分离的大区域,同地区的AWS服务中EC2与这些服务通信不受网络传输费)和Availability Zone(地区里面数据中心的代号),一个Region含多个Availability zone;
4. 发现AWS使用了各种凭证和识别码,看不懂,不关心,直接跳过。
第三章:AWS上手必备工具
AWS的服务都提供了SOAP和REST两种接口,几乎所有程序语言都可与其沟通。官方加第三方工具很多很多。
1. 各种服务的区别
[1]. S3 vs EBS:S3是完全独立的“对象存储服务”,通过WS访问,具有高持久性的永久存储。EBS完全依赖于EC2的存储服务,是SAN的概念,可对EBS Volume简历快照;
[2]. EBS vs Instance storage:持久存储 vs 本机EC2暂时存储;
[3]. S3 vs CloudFront:S3是持久性的长期存储,后者是暂时性缓存(类似CDN概念,数据主要来自S3);
[4]. SimpleDB vs RDS:前者为Document store数据库,后者是关系型数据库(MySql)
[5]. EC2 vs GAE:前者是低级的IaaS,后者是高级的PaaS。
2. AWS传输收费节约:尽量把EC2的VM放在同一Availability zone,并避免不同AZ和Region的EC2 vm之间过多数据传输,尽量使用内部IP地址;
3. AWS计算signature时加入timestamp,须调整好AWS联机时间,建议使用NTP(Network Time protocol)自动校正;
4. 分级收费(很多服务都采用这种收费规则,类似Google gmail);
5. 访问控制工具:IAM(Identify and Access Management)和APL(Access Policy Language),正在完善,这部分工作比较难;
6. AWS主要的图形接口工具:AWS Management Console(web app形式,支持服务受限)、AWS Toolkit for Eclipse(Java开发,资源多,需要访问密钥)等;
7. AWS AP/CLI:EC2 API Tools(通过访问EC2的SOAP interface操作EC2的所有功能)、EC2 AMI Tools(包装AMI);
8. AWS SDK(作者推荐开发使用):Java/.Net/PHP/Android/iOS, AWS Developer Cente;
9. 其它资源主要是AWS网站的Tutorial,Article&Blog。
第四章:AWS基础:S3与云端存储服务
多数人对云计算的理解为“把数据放在网络上”,存储功能是云计算的基础服务。
1. AWS存储功能主要包括S3、SimpleDB和RDS;
2. S3存储文件,解决动态数据存储问题(可扩展),满足系统存储无限量文件需求。常规解决数据快速动态增长的方法:数据库表(简单but大量IO)、数据以文件存储到大容量存储设备(SAN)并将metaData写入DB(文件可直接读取,但开发复杂、数据一致性难以保持、ACL弱)、使用独立存储服务(如S3,简单但架构复杂,依赖S3的可用性);
3. 增加CloudFront类CDN服务,可部分解决S3失效造成的数据无法读写问题;
4. S3的simplicity源自REST接口/SOAP接口提供,注重HA;
5. 收费指标:存储容量、操作次数、网络传输量;
6. S3的两个组成层次:Bucket(名字唯一,一般一个应用/服务开一个容器就够了,作为提供服务的端点)、Object(存储在bucket中真正的文件,包含其metadata,可通过对象命名实现层次化);
7. S3是全AWS有效而非Region-specific(理解其名字的唯一性)。EC2则不是这样。
8. S3对象存储级别分标准(durability11个9)和低备份(RRS,4个9);
9. S3的容器可设置为记录对象版本(更新、删除都会保留原始版本,除非指定版本号);
10. S3无查询功能,可通过key listing及peek object来实现,或将索引存到MySQL/SimpleDB,查到再读S3
11. 多部分上传(分成小文件,multipart upload),类似TCP中的MTU;
12. NoSql潮流兴起原因:RDBMS可扩展性问题特别难解决(一般通过把数据分割存储多台数据库,让多台数据库同时查写,而在应用程序中处理分割的数据,这样数据库变成了单纯的数据写入/读取)。非关系型数据库产品兴起(Hbase、MongoDB…),它们具有的共性:
1> Free schema(对应关系数据库的固定)
2> Denormalization(这个概念一直不太理解):NoSQL不提供join功能,建议把相关的属性存储在一起,否则要经过多次查询并在应用层进行join;
3> 数据水平分割(利于高可用,高可扩展);
4> Eventually consistent:关系型数据库强调ACID,非关系型数据库强调BASE;
13. CAP理论:Consistency、Availablity、Partition Tolerance在分布式系统中二选一;
14. SimpleDB:NoSQL数据库服务,使用简单、有弹性、高可扩展和高可用性。缺点是存储容量受限、无数据类型(均以String存储,这样增加了应用层的数据处理工作);
15. SimpleDB收费指标:机器利用率、存储空间使用量、网络传输量;
16. SimpleDB名词:Domains(=Tables)、Items(=Rows)、Attributes(=Columns)、Values(=values)、Item name(=primary key);
17. SimpleDB提供最终一致性读取和一致性读取(牺牲延迟和性能)
18. MySQL针对数据量和读写频率的增加,一般采用MySQL replication或MySQL NDB cluster来应对(维护难度大),AWS推出的Oracle Database 11g的RDS服务helpful
19. NoSQL目前存在的挑战(相对于传统关系数据库):关系数据库产品选择多(NoSQL产品不够成熟)、大量数据需求较少(大型网络程序才需要)、无查询语言标准(移植性不足)等;