开发者工具
Serverless开发者工具通通常情况下包括命令行工具,编辑器插件以及其他工具。
命令行工具一般情况下有厂商一方工具,和开源建设的三方工具两种,例如AWS Lambda的SAM CLI,阿里云函数计算的Funcruft等就是典型的一方工具。这类工具的特点是和厂商、产品的匹配成都会非常高,一些特性能力的支持会比较迅速,缺点是有的时候比较保守;例如Serverless Devs、Serverless Framework就是典型的三方工具,这两个工具都是支持AWS Lambda,阿里云函数计算,腾讯云云函数等多个云厂商的FaaS产品。在客户端表现上来看,这两个开源项目都是Serverless的开发者工具,都是组件化的命令行工具,也都是支持多云;在形态上来看,Serverless Framework更注重部署与运维方向,Serverless Devs更注重Serverless应用的全生命周期,同时Serverless Devs相对Serverless Framework而言,增加了可视化的界面:
通过界面可以快速的部署应用:
也可以快速的管理云上Serverless相关资源:
除了命令行工具之外,为了更好地帮助用户编写代码和在线调试、部署函数,很多厂商都基于不同的编辑器开发了插件。例如AWS提供Visual Studio Code、Eclipse插件:
同样提供函数服务的Azure也提供了Visual Studio Code插件。Visual Studio 中的 Azure Functions 项目模板创建一个项目,该项目可发布到 Azure 中的函数应用。可使用函数应用将函数分组为一个逻辑单元,以用于管理、部署和共享资源:
对于国内厂商而言,腾讯云云函数也提供Tencent Serverless Tookit相关的插件:
阿里云在开发者工具层面,同样提供了VSCode插件:
同时阿里云函数计算还提供了Cloud Toolkit工具,实现了本地Jet Brains IDE中运行、下载云端函数,创建、上传本地函数, 以IntelliJ IDEA为例,其函数管理界面如下::
除了上述的命令行工具,编辑器插件之外,其实Serverless的开发者工具还有很多其他形式,例如典型的IaC产品Pulumi也是支持多云Serverless操作的,以Google Cloud Functions为例创建一个Slack bot:
// secure config tokens to use to validate incoming messages as well as authenticate ourself to slack
const config = new pulumi.Config("mentionbot");
const slackToken = config.get("slackToken");
const verificationToken = config.get("verificationToken");
// A topic that we can enqueue slack events to so they can be processed in batch later on
const messageTopic = new gcp.pubsub.Topic("messages");
// Create an http endpoint that slack will use to push events to us.
const endpoint = new gcp.cloudfunctions.HttpCallbackFunction("bot", {
callbackFactory: () => {
const app = express();
app.use(bodyParser.json());
app.post("/events", (req, res) => {
// Importantly: This is the code that will run in your serverless GCP cloud function!
const body = req.body;
// Process the body as appropriate. If it's something we need to respond to immediately
// (like a verification request), then do so. Otherwise, add the message to our pubsub
// topic to be processed later:
const pubSub = new PubSub();
const topic = pubSub.topic(messageTopic.name.get());
topic.publish(Buffer.from(JSON.stringify(body)));
// Quickly respond with success so that slack doesn't retry.
res.status(200).end();
});
return app;
}
});
messageTopic.onMessagePublished("processTopicMessage", async (data) => {
// Actually handle the 'data' in the pubsub message.
// Importantly: This is the code that will run in your serverless GCP cloud function!
});
// Give this url to slack to let them know where to post their events to.
export const url = endpoint.httpsTriggerUrl;
另外Stackery等产品,也为Serverless赋能,让用户可以像玩scratch一样开发Serverless应用,进一步将Low-Code与Serverless打通:
Serverless Workflow
Serverless工作流(Serverless Workflow)是一个用来协调多个分布式任务执行的全托管云服务。
在Serverless工作流中,用户可以用顺序、分支、并行等方式来编排分布式任务,Serverless工作流会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。Serverless工作流通过提供日志记录和审计来监视工作流的执行,方便轻松地诊断和调试应用。 Serverless工作流简化了开发和运行业务流程所需要的任务协调、状态管理以及错误处理等繁琐工作,让用户聚焦业务逻辑开发。
Serverless工作流可以协调分布式组件Serverless工作流能够编排不同基础架构、不同网络、不同语言编写的应用,抹平混合云、专有云过渡到公共云或者从单体架构演进到微服务架构的落差;减少流程代码量Serverless工作流提供了丰富的控制逻辑,例如顺序、选择、并行等,让用户以更少的代码实现复杂的业务逻辑;提高应用容错性Serverless工作流为用户管理流程状态,内置检查点和回放能力,以确保用户的应用程序按照预期逐步执行。错误重试和捕获可以让您灵活的处理错误;ServerlessServerless工作流根据实际执行步骤转换个数收费,执行结束不再收费。Serverless工作流自动扩展让用户免于管理硬件预算和扩展。
Serverless工作流具有以下能力和特性:
- 服务编排能力: Serverless工作流可以帮助用户将流程逻辑与任务执行分开,节省编写编排代码的时间。例如图片经过人脸识别函数后,根据人脸位置剪裁图像,最后发送消息通知用户,Serverless工作流提供了一个Serverless的解决方案,降低了用户的编排运维成本。
- 协调分布式组件: Serverless工作流能够协调在不同基础架构上、不同网络内,以不同语言编写的应用。应用不管是从私有云/专有云平滑过渡到混合云或公共云,或者从单体架构演进到微服务架构,Serverless工作流都能发挥协调作用。
- 内置错误处理: 通过内置错误重试和捕获能力,用户可以自动重试失败或超时的任务,对不同类型错误做出不同响应,并定义回退逻辑。
- 可视化监控Serverless工作流提供可视化界面来定义工作流和查看执行状态。状态包括输入和输出等。方便用户快速识别故障位置,并快速排除故障问题。
- 支持长时间运行流程: Serverless工作流可以跟踪整个流程,持续长时间执行确保流程执行完成。有些流程可能要执行几个小时、几天、甚至几个月。例如运维相关的Pipeline和邮件推广流程。
- 流程状态管理: Serverless工作流会管理流程执行中的所有状态,包括跟踪它所处的执行步骤,以及存储在步骤之间的数据传递。用户无需自己管理流程状态,也不必将复杂的状态管理构建到任务中。
可观测性
Serverless应用的可观测性是被很多用户所关注的。可观测性是通过外部表现判断系统内部状态的衡量方式,在应用开发中,可观测性帮助我们判断系统内部的健康状况。在系统出现问题时,帮助我们定位问题、排查问题、分析问题;在系统平稳运行时,帮助我们评估风险,预测可能出现的问题。在Serverless应用开发中,如果观察到函数的并发度持续升高,很可能是业务推广团队的努力工作导致业务规模迅速扩张,为了避免达到并发度限制触发流控,开发者就需要提前提升并发度,以阿里云函数计算为例,阿里云函数计算在可观测行层面提供了多种纬度,包括Logging、Metrics以及Tracing等内容。
在控制台监控中心,可以查看到整体的Metrics,服务级Metrics以及每个函数的Metrics:
除此之外,还可以看到当前函数的请求记录:
根据不同的请求记录,可以查看到函数的详细信息:
除了在控制台的监控中心处可以查看到函数的日志等信息,在函数详情页面,也可以看到函数的详细日志信息:
以及Tracing相关信息