功能即服务(FaaS)介绍

简介: 本文讲的是功能即服务(FaaS)介绍【编者的话】本文直接介绍无服务器计算,然后介绍在之前500次commit里FaaS的3大特性,最后展望未来。
本文讲的是功能即服务(FaaS)介绍【编者的话】本文直接介绍无服务器计算,然后介绍在之前500次commit里FaaS的3大特性,最后展望未来。

【烧脑式Kubernetes实战训练营】本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理、Kubernetes DNS与服务发现、基于Kubernetes和Jenkins的持续部署方案 、Kubernetes网络部署实践、监控、日志、Kubernetes与云原生应用、在CentOS中部署Kubernetes集群、Kubernetes中的容器设计模式、开发Kubernetes原生应用步骤介绍等。

功能即服务 是在容器之上构建无服务器功能的框架。我在去年10月份开始这个项目,用来理念论证,理解是否可以在Docker Swarm上运行Alexa skills或者Lambda功能。在一开始的 一些成功 之后,我在12月份将第一个版本的Go代码发布到 GitHub上

本文直接介绍无服务器计算,然后介绍在之前500次commit里FaaS的3大特性,最后展望未来。
prom-stars.png

从第一次commit开始,FaaS持续推进,在GitHub上获得了2500多个star,同时还出现了一个 开发者和黑客的小型社区 ,我们会在聚会中发表演讲,编写自己的很cool的功能,并且贡献代码。我自己的一大收获是在4月份Austin举办的Dockercon上获得了 Moby‘s Cool Hacks keynote分会场 的一个席位。大家想要将Docker设计用来完成的事情的边界进一步扩展。
02.jpg

无服务器是什么?

架构还在演进

“无服务器”这个词并不是很恰当——我们实际讨论的是事件驱动系统的一种全新架构模式。基于此,无服务器功能常常被用来作为服务间的连接,或者用在事件驱动的架构里。在过去,我们称之为服务总线。
03.png

无服务器功能

无服务器是一段小型的,无关联的,并且可重用的代码:
  • 它是短暂的
  • 它不是daemon(长期运行的)
  • 它不发布TCP服务
  • 它没有状态
  • 利用已有服务或者第三方资源
  • 几秒内完成执行(基于AWS的Lambda)

我们还需要区分开无服务器产品和IaaS供应商以及开源软件项目。

一方面,IaaS供应商提供无服务器产品,比如Lambda,Google Cloud Functions以及Azure Functions。另一方面,有FaaS这样的框架,让编排平台,比如Docker Swarm或者Kubernetes做重量的事情。
04.png

IaaS供应商提供的无服务器产品是完全受控的,因此它提供了高度的便捷性和基于秒/分钟的计费方案。另一面是,用户需要跟踪供应商的发布和支持周期。开源的FaaS想要提供一些多样性以供大家选择。

FaaS的差异化在哪里?

FaaS基于业界标准的Cloud Native技术构建:
05.jpeg

FaaS项目的差异化在于,任意流程都可以通过 watchdog 组件和Docker容器成为无服务器的功能。这意味着如下三点:
  • 用户可以运行任意语言编写的代码
  • 可以运行任意时间
  • 可以在任何地方运行

转向无服务器化并不意味着用另一种编程语言重写代码。只需继续使用业务和团队需要的东西即可。
示例:比如, cat 或者 sha512sum 可以作为一种不需要变更的功能,通过stdin/stdout通信。Windows功能也可以通过Docker CE支持。

这是FaaS和其他开源无服务器框架的主要区别,它们依赖于每种所支持的语言的特定运行时。
下面介绍DockerCon之后的三大主要特性,包括 CLI 和功能模板,Kubernetes支持以及异步处理。

1. 全新的CLI

易于部署

我给FaaS项目添加了 CLI ,让部署功能更为简易和脚本化。在这之前,用户可以使用API Gateway的UI或者 curl 。CLI让大家可以在YAML文件里定义功能,随后部署到API Gateway上。

Finnian Anderson在 Practical Dev/dev.to上 写了一篇介绍FaaS CLI的很好的文章。

Utility脚本和Brew

有安装脚本可以用,John McCabe在 brew 上维护了项目的recipe。
$ brew install faas-cli

或者
$ curl -sL https://cli.get-faas.com/ | sudo sh

模板

CLI的模板是你唯一需要用所选的编程语言编写handler的地方,CLI会使用模板将其打包成Docker容器——FaaS会处理所需的步骤。

提供了Python和Node.js的模板,但是你可以轻松创建自己的。
CLI支持三种操作:
  • -action build:从模板在本地创建Docker镜像
  • -action push:将模板推送到指定的registry或者Hub上
  • -action deploy: 部署FaaS功能。

如果有一个单节点的集群,那么不需要推送镜像就可以部署。
YAML格式的CLI配置配置示例:
provider:  
name: faas
gateway: http://localhost:8080
functions:  
url_ping:
lang: python
handler: ./sample/url_ping
image: alexellis2/faas-urlping

Python功能的最简洁的handler:
def handle(req):  
print(req)

通过HTTP pings URL获得返回代码的示例:
import requests
def print_url(url):  
try:
    r =  requests.get(url,timeout = 1)
    print(url +" => " + str(r.status_code))
except:
    print("Timed out trying to reach URL.")
def handle(req):  
print_url(req)

如果需要添加额外的 pip 模块,那么除了提供handler.py文件之外还需要提供 requirements.txt 文件。
$ faas-cli -action build -f ./sample.yml

之后可以找到一个称为alexellis2/faas-urlping的Docker镜像,可以使用 -action push 将其推送到DockerHub上,使用 -action deploy 将其部署。

2. Kubernetes支持

作为一名 Docker Captain ,我主要关注与学习和宣传 Docker Swarm ,但是我需要持续关注Kubernetes。我从在Linux和Mac上搭建 Kubernetes 开始,并且写了 三篇介绍性文章 ,在社区也造成了一定的影响。

架构Kubernetes的支持

当我理解了如何将Docker Swarm的理念映射到Kubernetes之后,我就在几天之内实现了技术原型。我选择了创建一个新的微服务daemon和Kubernetes交互,而不是给主要的FaaS代码及引入额外的依赖条件。

FaaS通过标准的RESTful接口将调用路由到新的daemon上,完成各种操作,比如:Deploy,List,Delete,Invoke和Scale。

这样的方案意味着UI,CLI和自动扩展都不需要改动就可以使用。新的微服务在一个新的GitHub repository,名为 FaaS-netes 的项目里维护。你可以在60秒内在你的集群里使用起来。

Kubernetes支持的演示

在这个演示里,我将FaaS部署到一个空集群里,然后介绍如何使用UI, Prometheus 并且触发自动扩展。

视频

但是等一下……其他三种框架在Kubernetes上可以用么?

Kubernetes的无服务器框架大概分为两大类——一种对于每种所支持的编程语言都需要依赖于特定的运行时,一种像FaaS一样,可以让任意容器成为功能。

FaaS绑定到Docker Swarm和Kubernetes的原生API上,意味着它使用你已经使用的第一级对象来管理Deployment和Service。也就是说,这里没什么代码去理解你的新应用程序的逻辑。

选择框架时的一个考虑是是否想要贡献特性或者fix。比如,OpenWhisk,是用Scala编写的,大部分其他框架使用Golang写的。

3. 异步处理

无服务器功能的一大特征是小而快,通常在几秒之内就异步完成了。想要异步处理功能的几点理由是:
  • 它是一个事件并且调用者不需要结果
  • 它需要很长时间执行或者初始化——比如,TensorFlow/机器学习
  • 在批量job里消费大量请求
  • 想要限制速度

我通过分布式队列做了个异步处理的原型。实现使用的是 NATS Streaming 项目,但是无法扩展使用Kafka或者其他看上去像队列的抽象方式。
06.png

尝试异步代码的Gist:

未来展望

07.png

感谢 Packet.net 帮忙设计的新logo,网站也即将上线。

Packet正在自动化互联网,提供了很好的云上纯物理基础架构。

演讲

我将在 九月份的北美LinuxCon上演讲无服务器和FaaS 。到那里见见面吧,如果不能到现场,请关注我的 Twitter

原文链接:Introducing Functions as a Service (FaaS)(翻译:崔婧雯)

原文发布时间为:2017-09-02

本文作者:崔婧雯

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:功能即服务(FaaS)介绍

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
12520 5
|
10月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1561 10
借助 serverless 将 MCP 服务部署到云端
|
12月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
弹性计算 人工智能 自然语言处理
魔搭社区与函数计算:高效部署开源大模型的文本生成服务体验
在数字化时代,人工智能技术迅速发展,开源大模型成为重要成果。魔搭社区(ModelScope)作为开源大模型的聚集地,结合阿里云函数计算,提供了一种高效、便捷的部署方式。通过按需付费和弹性伸缩,开发者可以快速部署和使用大模型,享受云计算的便利。本文介绍了魔搭社区与函数计算的结合使用体验,包括环境准备、部署应用、体验使用和资源清理等步骤,并提出了改进建议。
|
机器学习/深度学习 监控 物联网
函数即服务(FaaS)
函数即服务(FaaS)
843 6
|
消息中间件 关系型数据库 Serverless
【阿里云】一键部署创建函数计算服务以处理多媒体文件
通过阿里云的一键部署功能,轻松创建函数计算服务以处理多媒体文件。首先选择地域并配置资源栈名称及其他必要参数,如登录凭证、实例类型及数据库配置。过程中可能需开通相关服务如消息服务MNS,并确保账户有足够的余额。完成配置后,系统自动创建资源栈。当状态显示“创建成功”即部署完毕。最后,通过提供的URL及凭据访问应用,上传PPTX文件进行处理,并下载处理后的结果。
259 5
|
存储 运维 安全
函数计算产品使用问题之如何获取到访问其他阿里云服务所需的AccessKey、SecretKey或STS Token
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
Kubernetes 安全 Serverless
Kubernetes 的架构问题之Serverless Container中提供对外服务如何解决
Kubernetes 的架构问题之Serverless Container中提供对外服务如何解决
198 6
|
消息中间件 运维 Serverless
Serverless 支撑赛事转播问题之利用函数计算处理视频直播截帧服务如何解决
Serverless 支撑赛事转播问题之利用函数计算处理视频直播截帧服务如何解决

热门文章

最新文章