收藏 分销(赏)

功能即服务(FaaS)平台介绍.doc

上传人:pc****0 文档编号:7861613 上传时间:2025-01-23 格式:DOC 页数:15 大小:341.74KB 下载积分:10 金币
下载 相关 举报
功能即服务(FaaS)平台介绍.doc_第1页
第1页 / 共15页
功能即服务(FaaS)平台介绍.doc_第2页
第2页 / 共15页


点击查看更多>>
资源描述
功能即服务(FaaS)平台介绍 功能即服务是在容器之上构建无服务器功能的框架。在去年10月份开始这个项目,用来理念论证,理解是否可以在Docker Swarm上运行Alexa skills或者Lambda功能。在一开始的一些成功之后。 本文直接介绍无服务器计算,然后介绍在之前500次commit里FaaS的3大特性,最后展望未来。 从第一次commit开始,FaaS持续推进,在GitHub上获得了2500多个star,同时还出现了一个开发者和黑客的小型社区( Cool Hacks keynote分会场的一个席位。大家想要将Docker设计用来完成的事情的边界进一步扩展。 无服务器是什么? 架构还在演进 “无服务器”这个词并不是很恰当——我们实际讨论的是事件驱动系统的一种全新架构模式。基于此,无服务器功能常常被用来作为服务间的连接,或者用在事件驱动的架构里。在过去,我们称之为服务总线。 无服务器功能 无服务器是一段小型的,无关联的,并且可重用的代码: § 它是短暂的 § 它不是daemon(长期运行的) § 它不发布TCP服务 § 它没有状态 § 利用已有服务或者第三方资源 § 几秒内完成执行(基于AWS的Lambda) 我们还需要区分开无服务器产品和IaaS供应商以及开源软件项目。 一方面,IaaS供应商提供无服务器产品,比如Lambda,Google Cloud Functions以及Azure Functions。另一方面,有FaaS这样的框架,让编排平台,比如Docker Swarm或者Kubernetes做重量的事情。 IaaS供应商提供的无服务器产品是完全受控的,因此它提供了高度的便捷性和基于秒/分钟的计费方案。另一面是,用户需要跟踪供应商的发布和支持周期。开源的FaaS想要提供一些多样性以供大家选择。 FaaS的差异化在哪里? FaaS基于业界标准的Cloud Native技术构建: FaaS项目的差异化在于,任意流程都可以通过watchdog( § 用户可以运行任意语言编写的代码 § 可以运行任意时间 § 可以在任何地方运行 转向无服务器化并不意味着用另一种编程语言重写代码。只需继续使用业务和团队需要的东西即可。 示例:比如,cat或者sha512sum可以作为一种不需要变更的功能,通过stdin/stdout通信。Windows功能也可以通过Docker CE支持。 这是FaaS和其他开源无服务器框架的主要区别,它们依赖于每种所支持的语言的特定运行时。 下面介绍DockerCon之后的三大主要特性,包括CLI ( 1. 全新的CLI 易于部署 我给FaaS项目添加了CLI,让部署功能更为简易和脚本化。在这之前,用户可以使用API Gateway的UI或者curl。CLI让大家可以在YAML文件里定义功能,随后部署到API Gateway上。 Finnian Anderson在Practical Dev/dev.to上( CLI的很好的文章。 Utility脚本和Brew 有安装脚本可以用,John McCabe在brew上维护了项目的recipe。 $ brew install faas-cli 或者 $ curl -sL https://cli.get- | 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) 通过HTTPpingsURL获得返回代码的示例: 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开始,并且写了三篇介绍性文章(https://blog.alexellis.io/tag/k8s/),在社区也造成了一定的影响。 架构Kubernetes的支持 当我理解了如何将Docker Swarm的理念映射到Kubernetes之后,我就在几天之内实现了技术原型。我选择了创建一个新的微服务daemon和Kubernetes交互,而不是给主要的FaaS代码及引入额外的依赖条件。 FaaS通过标准的RESTful接口将调用路由到新的daemon上,完成各种操作,比如:Deploy,List,Delete,Invoke和Scale。 这样的方案意味着UI,CLI和自动扩展都不需要改动就可以使用。新的微服务在一个新的GitHub repository,名为FaaS-netes( Kubernetes支持的演示 在这个演示里,我将FaaS部署到一个空集群里,然后介绍如何使用UI,Prometheus(https://prometheus.io/)并且触发自动扩展。 但是等一下……其他三种框架在Kubernetes上可以用么? Kubernetes的无服务器框架大概分为两大类——一种对于每种所支持的编程语言都需要依赖于特定的运行时,一种像FaaS一样,可以让任意容器成为功能。 FaaS绑定到Docker Swarm和Kubernetes的原生API上,意味着它使用你已经使用的第一级对象来管理Deployment和Service。也就是说,这里没什么代码去理解你的新应用程序的逻辑。 选择框架时的一个考虑是是否想要贡献特性或者fix。比如,OpenWhisk,是用Scala编写的,大部分其他框架使用Golang写的。 § Funktion( § Iron Functions( § OpenWhisk( § Kubeless( § Fission( § FaaS-netes( 3. 异步处理 无服务器功能的一大特征是小而快,通常在几秒之内就异步完成了。想要异步处理功能的几点理由是: § 它是一个事件并且调用者不需要结果 § 它需要很长时间执行或者初始化——比如,TensorFlow/机器学习 § 在批量job里消费大量请求 § 想要限制速度 我通过分布式队列做了个异步处理的原型。实现使用的是NATS Streaming(http://nats.io/documentation/streaming/nats-streaming-intro/)项目,但是无法扩展使用Kafka或者其他看上去像队列的抽象方式。 尝试异步代码的Gist: Run through the FaaS/Async Gist( 15
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服