费良宏: 这是一个普遍的现象,就是随着松耦合的架构的普及和应用,那模块之间,层次之间的通讯的开销势必是这个架构带来的一个负面的,或者是一个反面代价。但是我们要相信一点,就是目前这个架构尽管是有通讯成本和延迟上升的这样的开销,但是相比较来,紧耦合带来的不可扩展,或者说这个复杂的维护成本来说,松耦合目前可以相信它是一个发展的趋势,所以这些问题都可以通过一些新的技术,通过新的架构实践可以解决,我们目前看到在国外的很多成熟的大规模应用的案例当中呢,已经有过很多好的方法去解决这个问题。
如果大家感兴趣,我推荐大家去搜索一下,那在今年年初的时候呢,Netflix 前任的CTO,他曾经跟我分享过一个案例,在那个分享当中,他就谈到了 Netflix 如何应用这个松耦合架构,利用一些成熟的技术来去解决了这些问题。
费良宏: Kinesis 简单来说是一个数据流的服务,它经常被用于比如说作为数据的汇集,作为实时数据的采集,作为这个日志的采集处理等等这样的一个场所里面,它可以提供数据产生压力非常强大的,请求过大的环境下的数据的处理和管理的能力,所以对大型的实时数据分析,或者是数据汇集这样场景,它是非常有价值的。所以在很多场景里面Kinesis也经常会和类似像数据仓库产品 Redshift 以及 S3 这样的产品结合在一起,构建一个完整的数据分析的这样的一个平台。
费良宏: 那 AWS Lambda 是一个比较新的产品,就是在今年年初的时候新发布的一个产品,那这款产品它非常有意思,它的设计简单来说就是一个基于事件驱动的这样一个平台,简单解释一下,就是我们可以设定一些Triger,这个Triger可能是在这个S3当中保存的某一个文件,或者是某一个特定条件满足了之后,就去自动执行的某一段代码,这段代码可以 是JavaScript ,也可以是 Java 去开发的一块代码块,那我简单跟大家介绍一个场景可以让大家更好的理解如何去使用 Lambda,比如说有的客户呢,他在S3当中保存了一幅照片,但是他想去生成,自动的去生成一个缩略图,所以他就设定了一个规则,在S3当中如果出现了一个新的文件图片的时候呢,就会自动去触发一段代码,这段代码就会基于S3当中的原始文件生成一个缩略图,并且自动的保存在S3当中去,那这个过程是完全自动化的过程,是基于事件出发的,那这个平台就是Lambda平台,希望大家对这样的一个场景的理解可以帮助我们更好的了解Lambda的产品。
费良宏: DynamoDB 是一个非常成熟的NoSQL的产品,同时在市场当中,目前我们看到了大量的各种不同名称的,各种不同应用场景的NoSQL的产品,这个产品各有其优缺点,这个我就不逐一点评了,但是我希望吸引大家注意的是,DynamoDB
它是一个非常成熟的产品,它商用化的使用的时间已经蛮久,而且 DynamoDB 最早一次被大家知道是2003年当时基于 DynamoDB 这篇论文当中,正是那篇论文出现引发了整个数据库行业的重新洗牌,很多的产品就是基于那篇论文才不断的创立出来,所以 DynamoDB 对整个NoSQL推动有一个毋庸置疑的一个巨大的影响力,而且从今天的实践来看,DynamoDB 在全球范围内,在众多的大型的应用架构里面都发挥了非常重要的作用,这方面大家可以再参考一下在亚马逊官方网站上面的一些用户案例里面,可以找到大量的使用DynamoDB 的一些案例。
费良宏: Cognito和IAM之间呢,是面向不同的场景提供的服务,IAM大家知道,它是面向一个身份的管理,面向用户访问权限策略管理,用户决策管理这样的一个基本的功能,那 IAM 它针对场景是面向移动应用,那面向移动应用用户管理呢,它提供了这样几个特定的场景,一个是对于第三方用户身份验证的服务商的集成,比如说Googleglass、Facebook、Twitter、ARM总,或者是自定义的这些身份认证的提供者的集成,第二类功能呢,就是它的数据同步的能力,所以简单来说,Cognito跟IAM是应用场景不大一样,IAM 是面向移动应用的用户身份验证以及数据同步,而IAM是面向整个AWS云计算架构的基础的用户身份管理的这样一个平台,所以这两个有很大的差别,然后在使用当中呢,英文Cognito有大量的去依赖于 IAM去创建的用户脚色,创建的规则,以及STS服务等等,去实现我们细力度的用户资源访问的这样的一个限制。
费良宏: 这个AWS目前在中国已经提供了一些预览服务,所以如果大家感兴趣的话,可以联系AWS的销售,或者相关的人员,会有销售会帮助大家去完成有线预览的用户的注册。
费良宏: 榨取它更多的性能,我非常推荐大家呢,去在网上搜索一篇文章,非常抱歉,我现在不太方便给大家找到那个链接,应该是搜索一下可以看到,在去年年底AWS在美国拉斯维加斯举办的 2014年 AWS re:Invent 大会上,专门有一个话题就是请到了 Netflix 的工作人员去分享了一个 AWS EC2 实力优化的一介绍,这个介绍呢,在互联网上能够看到它的PDF的版本,甚至有视频可以被大家分享到,那篇文档当中,以及视频当中包含了非常细节的,非常好的,如何对于 Linux kernel及其相关参数进行优化,也有榨取EC2实力的性能的分享,我觉得那篇文章,以及相关内容呢,可以回答大家的问题了。
费良宏: Kinesis 其实并不做分析工作的,如果跟CDN的日志结合起来是这样一个场景,简单来描述起来就是,CDN的日志然后通过相关的程序,或者一些其他的开源的项目等,比如说Kinesis 等等,将这些日志呢,汇入到英文里面,那英文本身呢,它会有长达最多有24小时的一个缓存的这样的机制,那这些数据呢,通过 Kinesis 会被保存起来缓存起来形成一个数据流,然后呢,我们会将这些数据流呢,比如说指向到我们的英文 Kinesis 里面,英文就是AWS的另外一个数据仓库产品,也可以将这些数据呢,直接存储到EMR,就是AWS的一个Hadoop机群里面,然后利用这个Hadoop机群,或者是 Kinesis 处理能力来对这个事进行处理,所以呢,Kinesis 并不是直接用于日志分析,它可以跟其他的日志分析的工具软件集成在一起,形成一个自动化的,高吞吐量的时时的这样的一个日志,或者数据处理的一个架构。
费良宏: OpenStack 其实更多的是应用在混合云,或者说私有云的环境里面,它跟AWS提供的服务定位有很大的差异,而且 OpenStack 它实际上是很多不同的服务、产品、项目的集成的这样的一个平台,那 AWS 是由亚马逊公司来去开发、运营、管理、维护的这样的一个公有云的平台,所以这两者之间有很大的差异性,但是我相信随着云计算的不断发展和普及呢,技术之间是互相参考和借鉴,所以任何一些好的经验都会在未来的不同的产品上都会有所体现,所以我期待着在 OpenStack,或者AWS在未来的产品技术发展当中了,能有更好的产品不断的推出来。
费良宏: 关于这个问题是这样,就是中国地区的AWS,它的帐户是独立的帐户,在中国之外是一个Global 帐户,而中国区域有自己的帐户,这是一个很大的不同,那另外呢,在中国区域目前所上线的服务的数量呢,只是全球一个服务的子集,当然这个随着时间的发展,有不断多的AWS的服务逐渐的会在中国的这个可用区里面去部署,因为我们已经看到了在今年以来已经有很多新的服务成功上线了,那我相信在接下来的时间里面有更多的服务和产品,也会逐步面向中国市场提供服务。
费良宏: 实际上AWS提供的数据库的服务,大家知道它的名称叫做RDS服务,就是关系数据库服务,这些关系数据库的服务实际上是由若干个不同的数据库服务器产品的一个集合,这里面包括了 SQLServer,Oracle,MySQL,Postgresql 等等,以及ARM总自己开发的英文的新型的关系数据库平台,那这些产品除了英文之外,英文目前还是一个预览的版本,那其他产品都是一个商业化的使用的一个状况了,那些产品它的数据库优化完全是基于我们目前所使用的标准的产品的优化策略,或者优化引擎,所以这个在AWS上面基于数据库的SQL的引擎来说,并没有和其他产品有特别特殊的地方。
费良宏: 其实在AWS的很多服务里面都会有相关的日志处理,但是不同的资源服务,他们的日志是不大一样的,所以一种方法呢,可以考虑直接将不同的服务的日志汇集起来来进行统一的管理,一个常见的方法是可以将这些日志存储到S3里面,或者是存储到 Redshift 里面,另外呢,也有人使用让日志保存到 Elasticsearch 里面进行全文检索,甚至呢,可以将日志放入EMR当中做一些汇总,加工,做一些处理,那除了这些之外,除了传统的这些操作系统,或者是这个服务的日志之外,也可以通过 AWS CloudWatch,CloudWatch 是AWS一个托管的监管的服务,CloudWatch 本身也会产生很多日志,这个可以按照我们的定义,然后这些日志也可以按照刚才谈的思路保存到S3里面,保存到 Redshift 里面,这里面有很多具体的实现的策略技巧等等,这些方面在网上也有一些文章,包括在AWS的官方文档里面也有一些这样的介绍,所以大家可以参考。
费良宏: 这三种服务,它都是一种面向消息也好,面向事件的一种服务,但是他们的用场景有很多的不同,但是在具体功能实现当中呢,大家可能会感觉在某一些场景下,使用到这个SNS也好,SQS也好,或者是Lambda 都可以达到同样的一个效果,这里面会有些细微的差别,简单来说SQS是一个消息队列,它跟我们其他的常见的消息队列都非常的类似,那SNS它更多的是一种通知服务,比如说在移动应用里面的,我们应常会用到的,消息推送,它是那样一种场景,当然在SNS提供的并不仅仅是面向移动的通知服务,它甚至可以去远程的去触发一个 HTTP 的一个URL,所以它可以做得更灵活一些,Lambda 它是设计之初,它的目标主要就是针对一个事件驱动的平台,所以有人将它用在很多不同的领域里面,甚至有人将Lambda 一些数据的采集LT的应用结合在一起,一般来讲,这些应用场景并没有一些固定的,或者是固化的用法,完全取决于真实的需求,以及实现起来这种成本,或者是性能上具体的考虑,所以这方面,我不建议大家是太多的局限,而是更多的是做一些尝试,或者更好的评估来选择最适合你的产品。
费良宏: 我不太清楚你说的数据集是指哪一种,因为在AWS的面向数据的产品有很多,管理上也有很多的差别,比如说 RDS 这个服务,就是与我们现在大比较熟悉的,这些关系数据库的管理是完全一致的,但是像S3也好,DynamoDB 也好,那他们又有一套完全不同的管理的方式和方法,所以这方面的差别是非常大的,首先我觉得你要是考虑这种管理的组件呢,首先就要明确好你的应用场景,以及选用的具体的服务,然后再结合使用的具体的服务呢,去看一看,那目前这些服务所提供的数据库级别的权限管理能不能满足你的需要。
费良宏: 我们看到的大量例子里面,都是使用到S3,S3是作为一个海量文件存储的一个非常好的一个载体。
费良宏: 其实这个并没有一个标准答案,因为我们这个成长的发展的速度并不太一致,这里面就要考虑到你的成本,还有你的复杂性,所以我觉得我看到的很多这个优秀的系统,或者架构,他们的发展轨迹都是这样,在开始之初呢,他就会考虑到未来发展的一种可能性,所以它的架构里面预留了很多发展的空间,甚至在一些设计的原则上面,比如说松耦合,分层,分模块的想法上面就有了足够多的一个余量,那随着业务的不断发展,压力的不断提升,甚至覆盖的范围不断的扩展,那他们结合了这样大量的实践经验之后,就实现了很好的多AZ,多地区Region,甚至全球架构这样的部署的实现,那我的建议是这样,就是从开始之初,你就要考虑到未来的一种可能性,所以你的架构设计为未来留出足够的余量,那随着业务的发展,然后逐步的去增加新的组件新的模块,以及引入新的服务,这样才能够很好的在成本和功能之间做到一个完美的平衡。
费良宏: Nginx 大家用作为服务反向代理,这个服务已经用很久了,而且Nginx 的口碑也非常好,在很多项目当中得到应用,但是毕竟它是一个开源项目,它并不是一个托管的服务,而ELB是一个非常成熟的,由亚马逊托管的服务,所以在选择上,或者对比上就有很大的一个差异,如果对一个开发者,或者一个架构师,或者是一个项目的规划人员来讲,如果你需要一个成熟的应用,你需要简单可靠的去将你的应用部署上来,实现负载均衡,那么推荐大家使用ELB,如果你对成本会非常的计较,你觉得自己的管理,动手能力也非常强的话,你不妨使用Nginx 的反向代理的功能去实现这种负载均衡,当然这种选择也非常多,甚至你可以考虑别的开源的项目等等,有很多的经验都给大家去借鉴。
问:不同云服务商之间的迁移如何规划呢?在云应用架构设计里是否需要有所保留,少使用云,服务商个性化服务功能呢?
费良宏: 这点我有不同的看法在于说,那云计算本身代表了一个趋势,所以我们尽早的去拥抱云计算,会给你带来很多这个有前瞻性的辅助的功效,但是对于云计算来说,如果你过多的考虑了在云计算厂商之间的迁移,而放弃了云计算平台所带来的那些卓越的,成熟的,更好的特点,那我觉得等于某种意义上,就放弃了或者主动的拒绝掉了那些最有优势的地方,而且你将回归到那种你需要大量的自行维护管理建设的那样的工作。所以我感觉这种思路呢是跟云计算背道而驰的,但究竟在选择道路上如何去平衡,哪些使用云计算的服务,哪些使用自行搭建的服务,这些并没有一定之规,更多的是结合我们自己的需求,但是从长远来看,我感觉在整体的市场,对于云计算厂商所提供的那种非常有特色的服务的任何程度是慢慢越来越高的。
费良宏: ELB 是个负载均衡,简单的来解释,它是基于我们所指定的端口来进行一种转发,所以它不仅仅局是局限于这个HTTP协议,当然从实际应用场景来说呢,我们看到很多的应用场景都是基于HTTP协议的,但是也有一些场景里面是基于其他的一些协议,针对其他的一些端口,所以只要是针对HTTP端口这种应用场景里面都可以使用ELB来进行这个负载均衡。
费良宏: 其实这个问题我不太理解你的场景,为什么要把 Web Server 是放到私有子网里面?那它并不是面向公众客户提供服务吗?还是说你有特定的一个服务应用需要部署到私有子网里面?我们把一个EC2上的一个Web Server放到私有之网里面,或者公有子网里面,这个并没有特别的局限,你完全可以规划一个 VPC,然后把它设定为是私有,或者公有的,是不是对外暴露,或者是隐藏在内网里面,然后在 VPC 里面去部署你的实例就可以达到这个效果,这个其实问题我不是特别理解你的问题在哪里。
关于本次在线课堂的视频录播和 PPT 资料,请点击这里。
感谢Raymond对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 )。