数人云:Serverless,这个新兴的技术正在逐步深入开发领域,它为应用提供大量基础设施,减少开发人员的部署问题,同时它还能解决敏捷开发中,交付具有预算约束的可伸缩应用的问题。
本文将概述Serverless的发展历史、基本概念、应用、框架和优点。
爷爷,啥是虚拟机?
准备好如何回答这个问题吧,没准几十年后就得在饭桌上回答儿孙们,因为未来的开发人员可能永远都不需要启动实例,也不需要去碰大型服务器。
(回忆脸)虚拟机呀,就是一切开始的地方,一旦任何人在一台独特又普通的物理机上运行多个操作系统,就如同打开了一扇新世界的大门。
又过了一段时间,如同亚马逊这些老牌公司,开启了云计算的革命,在任何地方用一张信用卡即可用它们提供的几近无限的虚拟机,啥?你娃说还不够?后来又出现一头鲸鱼,那是容器的黄金时代,最开始的几年是挺难的,因为人们得花一些时间才能真正理解这个概念,然后,然后就是Serverless了……
那些孩子们可不会听这些老掉牙的唠叨,他们都去玩虚拟现实游戏去了,独留你在那里长吁短叹不断追忆。
功能即服务
FaaS是理解Serverless的基础概念,其定义为——
代码是在事件驱动的、短暂的和无状态的环境中运行,完全由第三方托管,本文会介绍一些AWS jargons及服务以方便阅读和理解。
-
代码:虽然它还是那个代码,但仍有细微的差别,必须将所有需要的东西打包,如:External Libraries、ZIP文件,另外功能应该有一个被称之为处理程序的执行入口点。
-
事件驱动:在FaaS中,每件事都会触发某种行为,举例说明,调整上传图片的大小,不需要写代码对它进行接收、存储、重新调整大小再次存储,可以触发一些代码,每次将新文件发到S3存储库时,都会对图像进行调整。还有各种事件:数据库中插入行,观察日志流、在队列中获取新消息、甚至HTTP请求等。
-
短暂的环境:FaaS在每次调用功能时,就会构建一个全新的环境,调用处理完成后即销毁,虽然有点悲剧,但并非没有道理:第一次运行非活跃的功能是有延迟的被称之为冷启动,若过多调用功能,环境可能会进行多个执行,消除冷启动后,不会产生这个问题,另外还有成本:只按执行时间付费。
-
无状态:在功能调用之间没有任何状态,不能在本地或内存中保存信息,处理请求的所有上下关系必须保证每次执行时可用。
-
完全由第三方托管:无需管理服务器,截止目前,大多数Serverless厂商都提供了完整的维护服务,虽然无需搭建基础设施,但弊端是被厂商控制和锁定。
Serverless只需集成外部服务以及开发它们之间的接口,无需担忧服务器方面的管理,这也正是用事件驱动架构的关键,这段代码应该自己写还是交给第三方?某个部分能否被一个事件触发?功能是否具有正确执行所需的上下关系等等,这些问题必须要经过大量的思考和迭代实践。
Serverless平台
本文中,收集了一些公司、产品、工具以及Serverless典型的框架。可以看到这个行业随着时间的推移呈指数增长。所以从下图开始,将公司分为几个类别:
AWS Lambda
Lambda是AWS Serverless 推出的一个事件驱动平台,运行代码以响应事件和自动管理代码所需的计算资源。
IBM Bluemix OpenWhisk
IBM OpenWhisk是一个分布式的、事件驱动的计算服务。OpenWhisk运行应用程序逻辑,以应对事件或直接通过HTTP调用网络或移动应用。
Google Cloud Functions
Google Cloud Functions是一个轻量级的、基于事件的异步计算解决方案,允许开发人员构建小型专用功能响应云事件,不需要管理服务器或运行时的环境。
Azure Functions
Azure Functions是一项PaaS服务,用户无需为峰值用量做准备或者为传统的维护操作担忧。通过多种语言(例如 JavaScript、C# 和 F#)以及脚本选项(例如 Python、PHP、Bash、Batch 和 PowerShell)创建功能;一切都在基于 Web 的易用界面中实现。
Webtask
Webtask是简单、轻量级、安全的方式独立运行的后端代码,可有效减少后端需求。支持可扩展性,通过多租户系统的自定义代码,是安全可靠的解决方案。
Serverless开源框架
LeverOS 一个开源云平台,简化了复杂的基础设施和微服务框架,功能强大,便于开发人员后期开发。
Funktion(Fabric8 / RedHat) 为Kubernetes实现了基于事件的Lambda样式编程模型。Funktion的一个子集被称为RedHat“fabric8.io”。
Fission.io
Kubernetes Serverless框架,专注于开发者的生产力的提高。
OpenLambda
OpenLambda是Apache Serverless项目,基于Linux容器。OpenLambda的目标之一是探索Serverless计算的新方法。经过尝试发现OpenLambda还为时过早,不得不做一些修改和调整工作。
Iron.io
Iron.io开发了一个框架,用于事件驱动的计算和运行Serverless应用,近期已经开源。专注于交付调用API实现负载均衡和消息队列的灵活性,确定在何处部署现有的内部安全流程作业处理。
Kubeless (By Bitnami)
Kubernetes原生的Serverless Framework。
Openwhisk (By IBM)
IBM OpenWhisk运行应用程序逻辑,以应对事件或直接通过HTTP调用网络或移动应用。OpenWhisk是开源项目,管理(服务)版本称为IBM Bluemix。
Serverless框架/库
Serverless Inc
Serverless框架,允许部署自动伸缩,pay-per-execution、事件驱动的功能,不受限于公有云、私有云、混合云。Serverless Inc目前支持AWS Lambda,Apache OpenWhisk,微软Azure,扩展以支持其他云提供商。
Stdlib
作为FaaS库StdLib提供了一种简单的方法来创建、分发和发现Web服务。
SPARTA
SPARTA转换一个二进制文件注册lambda函数进入一组独立可寻的AWS Lambda功能。此外,SPARTA微服务作者提供一个机会来满足其他要求,比如在AWS执行自定义,额外的基础设施需求,监控和报警信息。
Stackhut (nstack)
StackHut将代码转变成云API。编写业务逻辑,而不管理服务器逻辑,Python和JavaScript在云中转化为可伸缩的API,方便任意集成。
Gestalt (Galactic Fog)
Gestalt是一组微服务框架,可以帮助公司构建面向未来的云原生应用。框架由三个主要的元数据层组成,负责跟踪和管理所有IT资源,基础架构层是一个可插入的容器和Lambda管理引擎,集成层是一套现成的微服务,旨在解决最常见的企业集成问题。
Effe
用来构建Serverless的开源架构,可运行在单个Lambda的功能上。
APEX
Apex可以轻松地构建、部署和管理AWS Lambda功能。通过节点可使用由AWS Lambda(如Golang)所不支持的语言,js shim注入到构建中,为测试功能、回滚部署、查看度量、跟踪日志、连接到构建系统以及更多的功能提供了各种工作流相关工具。
Distribyte
Distribyte的目标是引入Serverless的优势,允许应用程序在计算调用之间无缝地存储数据,并将数据添加到Mix Unlocks中,也可以在现有的Serverless的范围之外使用。
Serverless API 框架
Multicolour
REST API生成器,目标是为公司节省90%的成本和开发API的时间,连接功能非常强大,即使是Node.JS生态系统中最成熟的框架也无法匹敌。
Deployd
通过提供满足复杂应用程序需求的重要功能,使构建API变得简单。
Kong
可扩展的开源API层(API网关,或API中间件)。可以在任何RESTful API上运行,通过插件扩展,这些插件提供了核心平台之外的额外功能和服务。
TYK
一个快速、可扩展和开源API网关,提供了一个API管理平台,有API网关、API分析和API管理仪表板。
API Umbrella
位于API之前的代理,可以无缝地添加诸如API Key、速率限制和对任何API的分析等功能。
Fusio
开放源码的API管理平台,可以帮助构建和管理REST API。提供了所有工具快速构建不同数据源的API,同时可以自定义创建响应。
Kappa
命令行工具,可以让AWS Lambda更容易部署、更新和测试功能。开发Lambda功能有很多步骤,Kappa在试图解决这个问题。
Zappa
可以轻松地让所有的Python WSGI应用在AWS Lambda + API网关上构建和部署,将其看作Python应用的“Serverless”Web托管。这意味着无限扩展、零宕机、零维护、以及当前部署成本的一小部分。
Zapier
Zapier的自定义代码操作允许扩展Zapier的平台,使用Web上最常用的普遍的编程语言:Javascript做任何事情,运行代码响应Zapier支持的任何触发。
Stamplay
一个基于API的开发平台,授权Web开发人员在记录的时间内构建和发布全功能且基于云的Web应用。
Serverless 数据库
FireBase
Firebase是一个移动平台,可以帮助快速开发高质量的应用,扩大用户群,提高收益,它由互补的功能组成,方便根据需要进行混合匹配。
FaunaDB
一个分布式、多租户、多模型的数据库系统,具有强大的查询语言。
当然,还有 Amazon DynamoDB,Google Cloud Spanner,Microsoft Azure’s CosmosDB 和其它Serverless数据库。
Serverless 监控工具
IOpipe
高保真的度量和监控服务,允许在Amazon Lambda功能中,更好的查看的日常维护和开发Serverless应用程序。
Dashbird
Dashbird用来查看AWS Lambda的功能。可以清楚地看到服务器栈上发生的事件。该平台提供自动化的监控、日志和调用数据等服务。
Serverless 安全工具
Snyk
在Serverless环境中,Snyk可以帮助理解和保护依赖项,从查询、修复和监控节点中已知漏洞的工具开始。
Serverless 的优点
-
成本:目前Serverless最大的优势是可以降低成本,例如,在功能运行时,只需要支付从AWS中传输的数据,每100万次请求大约需要0.20美元,因为它是按需付费的,此外,服务器维护管理的费用也被降低到接近0的水平。
-
交付时间:在集成和低成本的支撑下,交付到市场的速度快了许多倍。
-
无限的规模:Serverless在任何时间都可以处理任何数量的请求,自动伸缩内置到架构中,无需计划和设置,不过一定要注意的是DDOS攻击。
-
打包和部署:不再有分层的Dockerfile和入口,Lambda只需要一个包含代码以及库的ZIP文件即可,部署也是如此。
总结
在将Serverless应用到生产环境之前,不能照搬方法,还需根据自身的实际情况做一些改变,同时还需要一个团队,愿意去面对快速发展的事物,用一些时间去学习钻研和实践测试。不管怎样,已知的一些大公司如:Netflix、Localytics、VidRoll和Square Enix等公司都已应用了Serverless,这是未来的发展趋势,正逐步进入到各个行业领域当中。
原文作者:Jonatas Baldin、Tal Kimhi 原文链接:https://cheesecakelabs.com/blog/what-is-serverless-all-about/?utm_source=tuicool&utm_medium=referral
欢迎加小数微信:xiaoshu062讨论更多serverless内容!
转载于:https://my.oschina.net/shurenyun/blog/1504135