大狗哥学堂:Serverless的入门与思考
Posted 开普勒鑫球
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大狗哥学堂:Serverless的入门与思考相关的知识,希望对你有一定的参考价值。
Serverless由来已久,可以追溯到2012年,云基础设施服务提供商Iron.io的副总裁Ken Fromm在文章中讨论了Why The Future of Software And Apps Is Serverless?那个时候,云计算的世界中依然围绕“服务器”这个概念,云用户需要考虑服务器的数量、价格等问题。紧接着,亚马逊、Google、IBM 、国内阿里云、腾讯云等大厂也推出serverless服务,看起来来势汹汹。
但是对于大部分的IT开发者来说,似乎serverless只是个不知名的“网红”,连熟悉都谈不上,更谈不上实际应用了。
不知道大家有没有考虑过下面的这些问题:
云计算厂商们如此重视的Serverless是怎样的
它适用于怎样的业务场景
会多大程度给开发用户们带来便利
又会带来怎样的影响和冲击
我们应该如何看待这种正在被炒作的技术
本文让我们一起去了解下serverless的前世今生,对它有一个基本的、全面的认识。
一、无服务器
(Serverless)
是什么
“无服务器”目前还没有特别清晰直观的定义,简单来说,Serverless主要用来描述两个互相有重叠的概念:
Serverless最早用于描述那些大部分或者完全依赖于第三方(云端)应用或服务来管理服务器端逻辑和状态的应用,这些应用通常是富客户端应用(单页应用或者移动端 App),他们建立在云端服务生态之上,包括数据库(Parse、Firebase)、账号系统(Auth0、AWS Cognito)等。这些服务最早被称为 “(Mobile) Backend as a Service”,简称为 “BaaS”,包括各种云化的产品和服务,云存储、云数据库、云监控、云告警等。
Serverless也可以指部分服务器端逻辑依然由应用程序开发者来编写的应用程序,但与传统架构的不同之处在于,这些逻辑运行在完全由第三方管理,由事件触发的无状态(Stateless)暂存(可能只存在于一次调用的过程中)计算容器内。这种做法可以看作“函数即服务/FaaS”。AWS Lambda是目前最流行的FaaS实现之一,是云化的函数,把函数放到云端,通过云进行函数级别的调度、弹性等。
虽然无服务器还没有明确的定义,但是无服务器架构却已经有了比较清晰的定义:
大量依赖第三方服务(也叫做后端即服务,即“BaaS”),或暂存容器中运行的自定义代码(函数即服务,即“FaaS”)的应用程序。
通过采用这样的方式并将大部分行为移至前端,这种架构使得应用程序内部不再需要具备传统的“始终运行”的服务器系统。取决于具体情况,尽管对供应商依赖增加了,并且(目前)配套服务还不成熟,但此类系统依然可以大幅降低运维成本和复杂度。
说了这么多,感觉还是很抽象,没有什么直观的概念啊。做为一名合格的程序猿,这个时候,必须祭出UML图,甚至直接上代码,才能解决问题了。下面我们通过一个典型的应用场景,来具体分析下在无服务器架构思路下,应用系统架构会产生哪些变化。
二、举例说明
我们考虑要实现一个常见的包含服务器端业务逻辑,通过客户端、浏览器、App访问的应用。
从传统的架构来考虑,可以简单描述如下:
各位大神看起来,第一眼是不是觉得这个架构很清晰、简单,很亲切呢。但是再仔细考虑考虑,基于该架构,服务器端应用要考虑/实现包括身份验证、页面导航、搜索、事务等大量和业务无关的逻辑。
如果使用无服务器架构,看起来差不多是这样:
我们来逐一分析下上述架构中的变化:
1.不再需要自己实现身份验证逻辑的代码/组件,通过使用第三方BaaS服务来实现
2.让客户端直接访问产品数据库,该数据库完全由第三方承载(比如使用AWS的Dynamo)
3.一些原有的服务器端的功能,我们继续保留在服务器上,但是无需“持续运行”的服务器。比如搜索功能,可以通过一个API网关来响应http请求的FaaS函数来实现。用户无需关心/管理运行搜索服务的服务器的状态,这些都由FaaS服务提供商来负责。
三、理解“函数即服务”
通过上述的例子,最直观的的理解就是,通过BaaS和FaaS这2中方式来改造传统应用的架构,实现无服务器架构新应用。相对来说,BaaS的概念比较好理解,可以直观的理解为运行在“云端”的第三方服务;
那么FaaS这个新概念该如何理解呢?
FaaS可以理解为开发者无需管理服务器、无需管理服务器应用程序,即可直接运行的后端代码。
FaaS产品不要求必须使用特定框架或库进行开发。在语言和环境方面,FaaS函数就是常规的应用程序。
由于无须运行任何服务器应用程序,相比传统系统,部署方法会有较大变化--将代码上传至FaaS供应商,其他事情均可由供应商完成。
开发者在开发完相应的FaaS后,不需要关心、也不知道该段Function会在哪里被执行,也不需要关心相应的服务器维护、扩容等等问题。横向伸缩过程完全自动化且有弹性。
虽然FaaS有这么多好处,但是目前它在架构上还存在一些局限,最主要的是以下3点:
状态:FaaS函数目前是无状态调用的,也就是说,要假设在FaaS调用过程中的进程内状态、主机状态、内存状态等均无法被任何后续调用所使用。这点其实不难理解,因为FaaS的调用完全是随时创建、执行、销毁的,也可能被随机调度到某台具体的服务器上执行,所以FaaS函数是无状态的。
执行时间:FaaS函数对每次调用的执行时间有限制。比如AWS Lambda函数只能运行不超过5分钟,如果一次调用执行时间超过5分钟,会被强行终止。
启动延迟:一般来说RPC、http等方式的调用,可以认为经过网络传输延时后,在请求到达服务提供端时,服务端立即开始执行相应的逻辑并响应请求。但是FaaS函数在收到请求后,具体的开始处理时间在10毫秒到2分钟之间。。。。
四、为什么要用
Serverless
这个世界上,没有无缘无故的爱,也没有无缘无故的恨。程序猿也不会仅仅因为一个技术比较新、看起来比较牛逼就选择使用(其实程序猿喜欢这样,往往会被老板拍死)。做为“网红”一员,Serverless到底有什么好处,值得我们去学习并使用呢?(出来混,主要目标就是少做事,多赚钱嘛)
1、减低运维成本
前面提到,不管是编写FaaS,还是使用BaaS,都可以理解为使用一定程度的外包(方案、产品、基础服务等)。一方面,对于使用者来说,降低了集成架构和人员成本;另一方面,由于规模效应,一个供应商在同时给大量用户提供服务时,每个用户的平均费用自然会更低。从本质来说,这部分的成本降低,和使用各种云服务是一致的。
2、FaaS能够降低伸缩成本
目前的各种云,可以自定义不能能力的主机,但是大体上来说,还是基于服务器运行时间来进行收费的。考虑到虚拟机/容器启动的时间最好也就能做到秒级,不太可能随着访问量的变化,非常细粒度的控制服务器启动的台数,总会有不少的计算资源被浪费。
但是FaaS函数,目前是按照计算运行时间来收费的。FaaS的运行方式是有请求来,动态创建FaaS函数的一个执行实例处理请求,处理完成后立刻销毁。同时,FaaS的横向伸缩完全由服务提供商维护,有SLA来确保质量。这样,使用FaaS后,只需要为请求的真正处理能力付费。
3、降低部署难度
相比自己把应用部署到服务器上,部署FaaS的过程非常方便。只需要将FaaS函数代码编译,打包后直接上传即可。
五、Serverless的不足之处
任何事物都有两面性,我们要辩证地去看待问题。所以下面我们来简单的了解下Serverless的不足之处:
1、第三方意外
和现在云服务可能存在的问题一样,你对系统的某些控制权完全交给了第三方供应商,可能出现的意外包括系统停机、非预期的限制、成本变动等等。
2、多租户的问题
考虑到FaaS/BaaS的运行方式,服务商不可能做到一台硬件只为你一个人服务,必然是上面会执行多个用户的多个软件实例,这样才能将效益最大化。但是这样可能带来多用户之间数据安全的问题,多用户不同FaaS对系统健壮性可能造成的问题,性能问题等等。
3、供应商锁定
目前FaaS虽然开发上可以使用多种语言,但不幸的是,在不同提供商之间,无法做到零成本的切换。简单来说,你在AWS上的FaaS,没法直接一直到Google的Cloud Function上。
4、集成测试
目前FaaS函数提供商,基本没有提供本地版本,所以在用户系统和FaaS集成测试上,难度较大,只能使用远程部署、执行。
5、监控、调试
由于FaaS函数特殊的执行方式,无法使用第三方工具对其进行监控。只能使用供应商提供的工具完成监控、调试工作。
六、常用Serverless框架
目前市面上常用的Serverless框架包括以下几款,大家有兴趣可以尝试一下:
1.2014年11月14日,AWS发布了AWS Lambda,是市面上最早的Serverless框架。该服务支持java,python,Node.js作为开发语言。
2.Google Cloud Functions 是Google的无服务器计算解决方案,可用于开发由事件驱动的应用。
3.在2016年2月,IBM Bluemix OpenWhisk 作为试验性服务在Bluemix上推出,它可以在运行时容器中通过可扩展地执行代码来响应各种可配置的事件,而无需管理相关的基础架构。
4.Azure WebJobs是Azure 应用服务的一项功能,可以在与 Web 应用、API 应用或移动应用相同的上下文中运行程序或脚本。 使用 Web 作业无需支付额外的费用。
七、课代表总结
上面简单的介绍了Serverless相关的基本知识,分析了优缺点。
虽然说“人类一思考,上帝就发笑”,但是如果不思考,程序猿和咸鱼有什么分别呢?
随着技术的发展,各种云的兴起,计算作为资源而不是服务器的理念应该已经深入人心了。那么Serverless这种新兴的开发模式和理念,可以说在IaaS,PaaS,SaaS之外,找到了另外一条道路。至于这是一条死路,还是一条独木桥,亦或是一条阳光大道,还要靠各位看官自己去探索。
作者|bigdog,资深深测试工程师,行走的表情包
编辑|开普勒鑫球-大玲
推荐阅读:
1、
2、
3、
4、
5、
6、
以上是关于大狗哥学堂:Serverless的入门与思考的主要内容,如果未能解决你的问题,请参考以下文章
酷家乐私有化 Serverless Application 的探索与思考