术语 无服务器 最近在越来越多的对话中被提及。让我们澄清一下这个概念,以及与其相关的概念,例如无服务器计算和无服务器平台。
无服务器 通常与术语 FaaS (函数即服务) 交替使用。但无服务器并不意味着没有服务器。事实上,有很多服务器——有服务器——因为公共云提供商提供了部署、运行和管理你的应用程序的服务器。
无服务器计算 是一个新兴的类别,代表着开发者构建和交付软件系统方式的转变。将应用程序基础设施从代码中抽象出来可以大大简化开发过程,同时引入新的成本和效率优势。我相信无服务器计算和 FaaS 将在定义企业 IT 的下一个时代中发挥重要作用,与云原生服务和 混合云 一起。
无服务器平台 提供 API,允许用户运行代码函数(也称为操作)并返回每个函数的结果。无服务器平台还提供 HTTPS 端点,允许开发者检索函数结果。这些端点可以用作其他函数的输入,从而提供相关函数的序列(或链式调用)。
在大多数无服务器平台上,用户在执行函数之前部署(或创建)函数。然后,无服务器平台拥有执行函数所需的所有代码,以便在收到指令时执行函数。无服务器函数的执行可以由用户通过命令手动调用,也可以由事件源触发,事件源配置为响应事件(例如定时任务警报、文件上传等)来激活函数。
7 个开源平台助你入门无服务器计算
-
Apache OpenWhisk 是一个无服务器开源云平台,允许你响应任何规模的事件来执行代码。它使用 Scala 语言编写。该框架处理来自 HTTP 请求等触发器的输入,然后在 JavaScript 或 Swift 上触发代码片段。
-
Fission 是一个无服务器计算框架,使开发者能够使用 Kubernetes 构建函数。它允许程序员使用任何编程语言编写生命周期短暂的函数,并将它们与任何事件触发器(例如 HTTP 请求)映射。
-
IronFunctions 是一个无服务器计算框架,通过集成其现有服务并拥抱 Docker,提供了一个有凝聚力的微服务平台。开发者使用 Go 语言编写函数。
-
Fn Project 是一个开源的容器原生无服务器平台,你可以在任何地方运行——在任何云或本地部署环境中。它易于使用,支持所有编程语言,并且具有可扩展性和高性能。
-
OpenLambda 是一个 Apache 许可的无服务器计算项目,使用 Go 语言编写,并基于 Linux 容器。OpenLambda 的主要目标是探索无服务器计算的新方法。
-
Kubeless 是一个 Kubernetes 原生的无服务器框架,让你能够部署小段代码,而无需担心底层基础设施。它利用 Kubernetes 资源来提供自动伸缩、API 路由、监控、故障排除等功能。
-
OpenFaas 是一个使用 Docker 和 Kubernetes 构建无服务器函数的框架,它为指标提供一流的支持。任何进程都可以打包成函数,使你能够使用各种 Web 事件,而无需重复编写样板代码。
Kubernetes 是管理无服务器工作负载和微服务应用容器的最流行平台,它使用精细的部署模型来更快更轻松地处理工作负载。借助 Knative Serving,你可以在 Kubernetes 上构建和部署无服务器应用程序和函数,并使用 Istio 进行扩展并支持高级场景,例如
-
快速部署无服务器容器
-
自动向上和向下扩展至零
-
Istio 组件的路由和网络编程
-
已部署代码和配置的时间点快照
Knative 专注于在云原生平台上构建和运行应用程序的常见任务,用于编排从源代码到容器的构建、将服务绑定到事件生态系统、在部署期间路由和管理流量以及自动伸缩工作负载。Istio 是一个开放平台,用于连接和保护微服务(实际上是 Envoy 代理 的服务网格控制平面),并且在设计时考虑了与框架交互的多种角色,包括开发者、运维人员和平台提供商。
例如,你可以使用以下代码片段在本地 Minishift 平台上使用 Knative Serving 部署 JavaScript 无服务器工作负载
## Dockerfile
FROM bucharestgold/centos7-s2i-nodejs:10.x
WORKDIR /opt/app-root/src
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080 3000
CMD ["npm", "start"]
## package.json
{
"name": "greeter",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "~4.16.0"
}
}
## app.js
var express = require("express");
var app = express();
var msg = (process.env.MESSAGE_PREFIX || "") + "NodeJs::Knative on OpenShift";
app.get("/", function(req, res, next) {
res.status(200).send(msg);
});
app.listen(8080, function() {
console.log("App started in port 8080");
});
## service.yaml
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
name: greeter
spec:
configuration:
revisionTemplate:
spec:
container:
image: dev.local/greeter:0.0.1-SNAPSHOT
构建你的 Node.js 无服务器应用程序,并在本地 Kubernetes 平台上部署该服务。安装 Knative、Istio、Kubernetes 上的 Knative Serving (或 Minishift) 作为先决条件。
1. 使用以下命令连接到 Docker 守护进程
(minishift docker-env) && eval(minishift oc-env)
2. 使用以下命令和 Jib 构建无服务器应用程序容器镜像
./mvnw -DskipTests clean compile jib:dockerBuild
3. 将无服务器服务(例如 Minishift)部署到你的 Kubernetes 集群
kubectl apply -f service.yaml
结论
上面的示例展示了如何以及在哪里开始使用云原生平台(例如 Kubernetes、Knative Serving 和 Istio)开发无服务器应用程序。
1 条评论