各位周末好,今天先不说docker了,说说一些其余的东西。最近图表君的项目上普遍的用到了AWS Lambda。之前没以为Lambda怎么样,最近由于项目上的需求深刻的看了下,AWS Lambda多是个Big Thing。docker
好了,第一个问题来了,什么是AWS Lambda。AWS Lambda是2014年末AWS推出的一个全新的服务。用户能够简单讲本身的code部署到AWS Lambda上,那么这个Lambda能够由其余的事件来trigger。这些事件的来源能够是AWS S3上一个文件变化,能够是Dynamo Table的一个数据update,能够是一个SNS的Message。Lambda的出现让用户在使用AWS上其余云服务的时候扩展性更高。微信
好了上边的讲法有些抽象,那么Lambda到底能解决什么问题呢?OK,下边就是一个例子咱们来看看Lambda到底能解决什么问题。多线程
假定如今有这样一个场景,有一个外边的数据源,天天会定时的往S3(AWS的文件存储)放一些新的数据,而后咱们本身的Service来处理这些数据。这样的场景相信是咱们现实工做中的典型场景。那么应该怎么来设计咱们的构架呢?并发
External DataSource --> S3 <--- Our Serviceless
简单来讲,咱们可使这样来作,咱们本身写一个Service部署在一个 Instance上,这个Service不断的去监控S3当发现有数据更新的时候,将其取出来,而后作相应的处理。这样的方式是至关天然的。那么这么作有什么问题呢?运维
成本的问题。有可能咱们数据源天天的更新次数不多(假设3次),可是更新时间是不固定的。并且每一次的处理时间只有一分钟。若是全天这个instance都是启动的,那么一天内有效的工做时间只有3分钟,其余的工做时间都是浪费的。spa
维护成本。多一个Instance就多一套维护成本,系统部署,系统监控,log收集,同样也少不了。线程
代码的复杂度。上边的例子可能并不十分的合适,考虑下边一个场景。设计
SNS ---> Our Servicecode
有个SNS的消息服务,咱们的Service订阅这个消息服务,当有消息的时候,咱们的Service会相应处理。那么在实际中,咱们的Service可能会采用多线程的方式,并行处理这些消息以得到更快的处理效率。可是这样同时会带来代码上复杂度的提高。
那么有了Lambda,能带来什么呢?第一例子中的构建设计就变成了下边这样:
External DataSource --> S3 ---> Lambda --> OtherService
S3上的任何文件变化都会trigger一个Lambda,这个Lambda就能够进行相应的处理。这样使得软件构架变成了Event Trigger。那么就能很好的解决咱们一个成本问题。若是天天只有3次文件更新,那么就trigger3次Lambda处理就OK了。这样会使得成本大大下降。一样维护问题也交给了AWS来帮咱们处理。
再来看咱们的第二个例子,使用Lambda后的构建就变成了这样:
SNS ---> Lambda --> OtherService
因为Lambda 自带的Auto Scaling的特性,开发者能够基本不考虑并发的问题,当有多个message须要处理的时候,Lambda会本身来Auto Scaling来处理多个messages。
Lambda的出现让开发者可以更快的专一本身的业务场景,而且减小运维上的压力。Lambda的出现也使得Serverless的软件构建渐渐的兴起。
固然Lambda有必定局限性,图表君目前以为可能影响最大的是 Maximum execution duration per request只有5分钟,这样Lambda处理一些复杂的业务场景时候就不太合适了。固然局限也不止于此,具体你们能够参考AWS的官方文档。
Lambda的出现已经快两年了,图表君以为这可能又是一个能带来大改变的东西。最近Amazon又推出了一个硬件产品叫AWS IOT button,是AWS在物联网方案中的一个基础产品。下边这个图一看你们就明白了:
咱们能够看到Lambda是这里关键一环。
AWS Lambda will be a big thing.
原创文章,欢迎转发,但请标明出处。欢迎关注图表君的公众号,一块儿成长。在微信中搜索 “多彩数据” 或者 “Data_Visualization”