Funtainer:容器即函数之美
来源:互联网 发布:mooc字幕组知乎 编辑:程序博客网 时间:2024/04/27 18:05
常言道:“Serverless并非没有服务器,而是不再需要关注服务器。”
在最近的Serverless会议[1]上,我们看到了Serverless使用率的上升,并且这种上升令人印象深刻。
我很荣幸能够成为会议的一名主讲人。我所演讲的内容是开发者及DevOps世界中的剧烈变化,从容器管理和微服务部署到函数和Serverless。
回首过去20年,上图向我们展示了演化历程。我们快速地从物理服务器管理迁移到虚拟机管理,而现在我们正在从容器运行转移到函数运行。
Docker的面世,使得Linux容器变得如此好用,以至于其迅速成为了主流。它们真正成为了帮助开发者构建、迁移和运行(应用)的有效工具。我们开始以一种舒服的方式开发微服务,并且认识到部署不再艰难。
2014年,AWS Lambda面世,这是一种允许用户运行代码而无需管理和关心服务器的服务。Lambda暗示着“遗忘容器,开始构建函数”。但如何联系两个概念是一个很大的问题。这两种技术变迁是否存在冲突,或者说能否以一种神奇的方式整合它们?
自古改变非易事。为了使用函数,我们需要从极小的构建开始,它甚至比微服务更小,本质上是微微服务(micro-microservice)。显然,我们将需要开发更多服务了。
2. 使用不同的接口
如果我们想要使用Spotinst Functions[2],Lambda[3]或者Azure Functions[4],我们需要遵循特定的模板或签名。如下是我所说的一个例子:
3. 改变部署方式及其后的思想
我们已经习惯了VM、容器,蓝绿部署和健康检查或者按步就班地部署新版本的方式。函数需要我们处理一个些许不同的现实。再次,改变非易事。
4. 第三方依赖
在容器或者虚拟机上运行代码时,我们知道其所有的依赖将会在代码所运行的服务器上被找到。在Serverless中,我们需要将代码与其依赖一起打包到ZIP中,这样Serverless供应者才能够运行函数。此外,ZIP的大小被限制到50MB(包括依赖!),这使得在一个函数中运行复杂代码变得更加困难。
函数确实带来了一大堆优点,但它们被一些难以轻易踢开的绊脚石所阻碍。倘若我们能够将容器的优势应用到函数中,一切又会变得如何?
为了回答这个问题,让我们对AWS Lambda背后的技术稍作深挖,一起来看看所谓的"Serverless计算"魔术是如何工作的?
其实一切都很简单:
上传代码(包括依赖)
Function供应者(例如Lambda)拿到我们的代码,并将其注入到容器中
容器在服务器上运行函数,Lambda返回结果
如果我们跳过第2步,让函数的输入即为容器,而函数供应商拿到容器后直接运行会怎样?
我们将这种“容器运行即函数”的处理称为“Funtainer”。这让我们能够同时享受运行容器和运行函数带来的好处,例如高可用性,无需运维,以及Serverless计算,所有的一切运行在近些年来我们所悉知的容器之上。
Funtainer,或者说容器即函数,正在以惊人的速度发展,3个大项目在这种大环境下获益匪浅:
IBM OpenWhisk[5]
我们自己的Spotinst Functions
OpenFaas[6]
上述平台带来了难以置信的好处:
不像其他FaaS产品,没有编程语言的限制
无需担心依赖或者ZIP文件(所有的东西都被打包到容器)
不再是供应商锁定,随时随地运行Funtainer
无需关心不同的FaaS代码接口
所以,它是如何工作的?
编写代码
打包到容器
编写Dockerfile,包含容器运行所需的依赖
上传容器到Hub
创建函数,将输入代码修改为DockerHub/ContainerName
运行函数
换句话说,无论我们是否喜欢,剧变正在发生。真正的问题是,函数何时才会成为大多数公司运行代码的方式。
相关链接:
http://blog.spotinst.com/2017/05/01/spotinsts-ceo-takeouts-serverlessconf-2017/
https://spotinst.com/products/spotinst-functions/
https://aws.amazon.com/lambda/
https://azure.microsoft.com/en-us/services/functions/
https://openwhisk.incubator.apache.org/
https://github.com/openfaas/faas
原文链接:https://thenewstack.io/funtainers-beauty-running-containers-functions/
基于Kubernetes的DevOps实践培训
本次培训内容包含:Kubernetes架构、安装、深入了解Kubernetes、Kubernetes高阶——设计与实现、Kubernetes落地实践、微服务、Cloud Native等,点击识别下方二维码加微信好友了解具体培训内容。
- Funtainer:容器即函数之美
- JavaScript函数之美
- 简单即美
- 函数式编程之美
- map容器即关联容器
- C++ 之 拷贝构造函数(即复制构造函数)
- 《编程之美》- 3.3 - 计算字符串相似度 即 最小编辑距离问题
- 腾讯云的AI即服务,也有Google的“无聊”之美
- 数学之美:sqrt函数的探究
- [函数式编程]之美--开篇
- ReLU激活函数:简单之美
- ReLU激活函数:简单之美
- go-kit 上手之example stringsvc1 函数即服务
- 闲谈STL容器之size()成员函数
- STL中各容器之函数总结
- STL之list容器函数用法详解
- lavarel之容器Application构造函数分析
- STL容器之size()函数的实现
- 前端小知识
- ftp安装部署
- PHPstudy + phpstorm 配置xdebug
- 培训:基于Kubernetes的DevOps实践
- JAVA中循环删除list中元素的方法总结
- Funtainer:容器即函数之美
- PDF在线显示插件
- struts2配置
- 使用 Docker 搭建代码质量检测平台 SonarQube
- Content-Type引发的服务端收不到HTTP请求参数的问题
- Cordova插件之跳转第三方app
- 使用facebook infer 进行代码审查
- Java进阶之多级联下拉列表知识点总结
- 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1900”