Serverless computing 正在改变传统的软件开发. 这些开放源码平台将帮助您入门.
最近, serverless 一词在越来越多的对话中出现. 让我们先弄明白这个概念以及与之相关的一些东西, 例如无服务器计算和无服务器平台.
Serverless 经常被当做 FAAS(函数既服务).serverless 不是说没有服务器. 事实上, 服务器有很多, 甚至性能还很强劲, 这是为公共云提供商提供了部署, 运行和管理应用程序的服务器.
Serverless computing 是一个新兴的技术, 改变了开发人员构建和交付软件的方式. 它将基础设施和代码分离来简化开发过程, 降低成本并提升效率. 我相信, Serverless computing 和 FaaS 将在帮助定义企业 IT 的下一个时代, 云本地服务和混合云方面发挥重要作用.
Serverless 平台提供 API, 允许用户运行代码函数 (也称为操作) 并返回每个函数的结果. 无服务器平台还提供 HTTPS 终端, 允许开发人员检索函数结果. 这些终端可以用作其他函数的输入, 从而提供相关函数的触发事件(或链接).
在大多数 serverless 平台上, 用户在执行函数之前部署 (或创建) 函数. serverless 平台拥有所有必要的代码, 以便在需要的时候执行这些函数. serverless 函数的执行可以由用户通过命令手动调用, 也可以由事件源触发, 该事件源配置为在响应 cron 作业告警, 文件上传或其他事件时激活函数.
以下 7 个开源平台提供了 serverless computing
• Apache OpenWhisk 是一个无服务器的开源云平台, 允许您在任何规模的事件响应中执行代码. 它是用 Scala 语言编写的. 框架响应类似 HTTP 请求这样的触发事件, 然后运行 JavaScript 或 Swift 代码片段.
• Fission 是一个 serverless computing 框架, 使开发人员能够使用 Kubernetes 构建函数. 它允许程序员用任何编程语言编写函数, 并将其与任何事件触发器 (如 HTTP 请求) 进行映射.
• IronFunctions 是一个通过集成它现有的服务和 Docker 来提供了微服务的 serverless computing 框架. 他要求开发人员使用 Go 语言编写函数.
• Fn Project 是一个开源的容器本地化服务器平台, 您可以在任何地方, 任何云上或在本地运行. 它易于使用, 支持每一种编程语言, 具有高扩展性和高性能.
• OpenLambda 是一个 apache 授权的基于 Linux 容器, 使用 Go 编写 serverless computing 项目. OpenLambda 的主要目标是探索新的 serverless computing 方法.
• Kubeless 是一个 kubernets 原生的 serverless 框架, 允许您部署细粒度的代码, 而不必担心底层基础设施. 它利用 Kubernetes 资源提供自动缩放, API 路由, 监控, 故障恢复等功能.
• OpenFaas 是一个使用 Docker 和 Kubernetes 构建 serverless 功能的框架, 它为 metrics 提供了一流的支持. 任何程序都可以打包为函数, 使您能够使用一系列 web 事件, 而无需重复编写样板代码.
Kubernetes 是管理 serverless 和微服务的最流行的平台, 它使用细粒度的部署模型来更快更轻松地处理工作负载. 使用 Knative 服务, 您可以在 Kubernetes 上构建和部署无服务器的应用程序和函数, 并使用 Istio 扩展和支持高级场景, 例如:
• 快速部署无服务器容器
• 自动扩容或者缩容至零
• Istio 组件的路由和网络编程
• 代码和配置的实时快照
Knative 元件焦距在解決如何更好的在本地云上构建, 运行应用程序上. 例如将运行行服务绑定到事件生态系统上, 在部署期间的路由和流量管理, 按需自动扩展及调整工作负载的大小. Istio 是一个开放的平台, 能有效连接并保护微服务, 并且设计考虑多个角色交互的框架, 包括开发商, 运营商和平台提供商.
例如, 您可以使用 Knative 服务在本地 Minishift 平台上部署一个 JavaScript 无服务器负载, 代码片段如下:
- ## Dockerfile
- FROM bucharestgold/centos7-s2i-Node.JS: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
- Build your Node.JS serverless application and deploy the service on local Kubernetes platform. Install Knative, Istio, Knative Serving on Kubernetes (or Minishift) as prerequisites.
在本地 Kubernetes 平台构建你的 Node.JS serverless 应用程序并部署服务前需要提前在安装 Knative,Istio,Knative 组件.
1. 使用以下命令连接到 Docker 守护进程:
(minishift docker-env) && eval(minishift oc-env)
2. 使用 Jib 命令构建一个 serverless 应用程序容器映像:
./mvnw -DskipTests clean compile jib:dockerBuild
3. 把 serverless 服务如 Minishift 部署到您的 Kubernetes 集群:
kubectl apply -f service.YAML
结语
上面的示例展示了在何处以及如何开始使用本地云平台 (如 Kubernetes,Knative service 和 Istio) 开发无服务器应用程序.
来源: http://server.51cto.com/sOS-587229.htm