亚马逊AWS无服务器架构部署:如何利用AWS Lambda创建具有弹性的网络应用

   06/04/2016 11:25 am   大 中 小 简体 繁體 字体:
1 颗星2 颗星3 颗星4 颗星5 颗星 (点击来评价哦~_~)
    394人参与

AWS Lambda是AWS推出的无服务器计算服务,它可以自动运行代码以响应多个事件并为用户自动管理底层计算资源,而不需要用户去搭建系统。随着AWS诸多服务开始支持Lambda,无服务器架构(Serverless Architecture)则渐渐成为了热门话题和网络应用开发中所使用的技术,其在低成本、可扩展、易使用、人性化上的优势非常明显。

张侠,毕业于北京大学并获得学士学位,之后还获得了美国莱斯大学硕士和博士学位,以及韦恩大学工程管理硕士学位。现担任亚马逊AWS中国首席云计算企业顾问,帮助企业利用云计算技术进行业务创新和数字化转型。拥有逾二十年在北美和中国从事信息技术研发、业务拓展和企业信息架构和IT管理的经验,致力于结合商务和技术创造商业价值,在云计算、大数据、移动互联网、社交网络媒体等方面具有丰富的经验。2012-2014年任北京御风云科技有限公司总裁;2006-2012年任SAP思爱普软件系统有限公司大中华区首席技术官CTO;2002-2005年任中国银行个人金融部和银行卡中心的技术总监CTO;于1993-2002年在美国福特汽车公司工作,其中2000-2002年任福特直销FordDirect的首席信息官CIO。

提问:Lambda代码是不是也需要服务器,可以弹性拓展吗?

张侠:Lambda代码肯定是部署在服务器计算能力之上的,但因为是托管的服务,用户不需要管理服务器,所以从用户角度来看就可以理解为是没有服务器的。

提问:无服务器架构与SaaS的区别是什么?

张侠:Lambda 和SaaS在表面上看是有一些相同的地方,很多做SaaS的人都认为自己做的是无服务器架构,但是需要强调的是无服务器架构的用户仍然掌握着各种基本工具,可自行搭建服务和软件,而传统意义上的Saas则是是软件及服务,只是把软件在云平台上提供给用户使用。另外也有人提到PaaS与无服务期架构的区别,从某种角度来说,Lambda为用户提供了一些工具以便搭建类似PaaS 的平台,但是这两个概念不完全对等,而AWS实际上早已不再使用简单的SaaS、PaaS、IaaS的方法来做云服务的划分了,因为这种划分方法存在一定的局限性。

提问:Lambda背后是如何触发的?

张侠:Lambda最基本的触发方式是按照事件来进行触发的,比如说S3得到了一个文件,这就是一个事件。另一种触发方式是schedule,也就是定时触发,按照提前设置好的时间来进行触发。

提问:在实际使用中,Lambda执行了一个Redshift的copy command,发现Redshift处理的时间和Lambda被响应完成的时间有分钟级别的差距,这是为什么?

张侠:需要首先区分开两个事情,一个是Lambda这段代码本身的运行时间,而另一个是一个功能比如Redshift topic或是Transcoder代码转换器转换代码所用的时间,这是两个不同的概念,不能等同理解。尽管用户在使用Lambda的时候都不希望代码执行耗费太长时间,但是Transcoder或其他的某个功能运行所消耗的时间跟Lambda实际是不相关的,因此这种情况下在写Lambda函数的时候就一定不要写成Transcoder在一边运行着而Lambda就一直等着Transcoder运行完再做什么事情,正确的方法是该写成两个不同的函数,每一个的运行时间比如说是千分之一或是十分之一秒,然后触发相应的功能进行工作,之后再继续执行相应的操作。至于Redshift的问题,因为不知道细节所以不能给出完整的答案,比如Redshift copy不知道当时是否有一些查询,数据仓库表格是如何建的,Redshift是怎样进行分片的等等。再加上Redshift本身运行也需要一些时间,因此在完全响应上有一些时间的差别并不奇怪。而从构建上来说,这个时间差应该是不会让程序出现问题的,这是架构上的考虑。

提问:Lambda会不会对Python里面的LIB库进行更多的支持?

张侠:目前Lambda主要支持三种语言,也就是Node.js、Java以及Python,之后对函数库的支持会随着时间而不断增加,可以参考相关的文件。从Lambda本身来说,可能还是适合把功能做得相对简单一些。

提问:中国区什么时候开通Lambda?

张侠:AWS开通新服务一定会参考这项服务需求的情况,而AWS对Lambda还是比较重视的,计划在年底左右开通这项服务。但是我们现在没有办法能够确保这个时间一定能开通,因为可能会有其他更新更好的服务用户需求更高。AWS会争取早一些在中国区开通Lambda,满足大家现有的这些需求。

提问:Lambda和SQS的区别是什么?

张侠:SQS是一个队列的服务,从功能上说它是一些简单的Lambda的功能,但是Lambda的功能显然更强大一些,因为Lambda可以自己写函数扩展出更多的内容,而SQS只是对特定的一些请求进行队列服务,然后触发一些事件。SQS可以理解是特定情况下的Lambda原来的一些功能的子集,Lambda肯定是要比SQS强大一些。

提问:Lambda是否能够支持资源的自动调配?

张侠:Lambda做的是完全托管的服务,它确实是自动来进行资源调配的。

提问:Serverless和CI/CD 要怎么集成在一起?在生产环境和测试环境下如何部署Serverless的服务和应用?

张侠:基于Serverless的Lambda应用,在不同的生产环境和测试环境下的部署是非常容易的。这两者完全可以做出同样的部署,然后在生产环境和测试环境下进行同样测试,如果合适就上线,如果需要更改,只需要做好相应的同步就可以了。因为松耦合式的架构,包括在不使用的时候不收费的这些特点,实际上在这些方面是比较容易做的,只要管理好这些版本,管理好推出这些内容,毕竟这不是完全连续的一个功能,而CI/CD这些事情相对来说还是更加容易做的。

提问:并行处理不同数据流的Lambda微服务具体在哪里执行代码?处理后的结果还会调用Lambda做后续处理吗?

张侠:Lambda微服务都是在托管的服务器上也就是在云上产生的,它看起来没有服务器但实际上提供了计算处理功能,而并行的话不过就是需要更多的云资源来进行事件代码的函数运算。如果需要做后续处理的话,只要把结果或是特定的函数写在特定的地方,可以把几个事件结合在一起做后续处理。

提问:转码耗时比较长,Lambda只是调用转码的程序吗?

张侠:是的,Lambda作为一个触发点,比如MP3或者MP4文件放在S3里面需要进行转码,然后触发让Transcoder开始运行,运行完之后再执行其他操作。不是说整个事件就跑5分钟,用Lambda在一起可能每一个跑5分钟,但你可以写比如整个跑一百天或者更长时间的程序,这是没有任何问题的。

提问:可以把用户注册登录验证部署到Serverless上吗?

张侠:应该是可以的,这其实也是一个很好的建议。将用户注册登录作为事件进行触发,然后进行相应的核对验证。比如说发送一个验证码到注册用户的手机上,用户将验证码输入,这可以作为一个事件,再进行后续触发。

提问:Lambda适合将S3数据导入到Redshift吗?

张侠:非常适合做这些事情,目前支持编译Node.js、Java和Python这三种语言,暂时还不支持其他语言。

关键词: , , , , , , 

最多人阅读内容