OpenFaaS介绍
FaaS
云计算时代出现了大量XaaS形式的概念,从IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Service)到容器云引领的CaaS(Containers as a Service),再到火热的微服务架构,它们都在试着将各种软、硬件资源等抽象为一种服务提供给开发者使用,让他们不再担心基础设施、资源需求、中间件等等,在减轻心智负担的同时更好地专注于业务。随着技术架构的演进,FaaS(Function as a Service)逐渐兴起,它往往和无服务架构(Serverless Architecture)一同被提起。
Serverless可以看作是比微服务架构更细粒度的架构模式,即FaaS,一个函数相当于一个服务,Lambda也是FaaS的典型代表,它允许用户仅仅上传代码而无需提供和管理服务器,由FaaS框架负责代码的执行、高可用扩展和其他Web应用直接调用等。
FaaS拥有下面的特点:
-
FaaS里的应用逻辑单元都可以看作是一个函数,开发人员只关注在函数中实现业务逻辑,而不用提前考虑性能优化,让工作聚焦在这个函数里,而非应用整体。
-
FaaS是无状态的,无状态意味着本地内存、磁盘里的数据无法被后续的操作所使用。大部分的状态需要依赖于外部存储,比如数据库、网络存储等。
-
FaaS函数启动延时受很多因素的干扰。如果采用了JS或Python实现了函数,它的启动时间一般不会超过10~100毫秒。但如果是实现在JVM上的函数,当遇到突发的大流量或者调用间隔过长的情况,启动时间会显著变长。
-
FaaS函数可以自动伸缩,在流量高峰期时自动扩容,流量低峰期时通常保持服务可用性即可。
-
FaaS需要借助于API Gateway将请求的路由和对应的处理函数进行映射,并将响应结果代理返回给调用方。
FaaS优势:
-
减少开支
通过购买共享的基础设施,同时减少了花费在运维上的人力成本,最终减少了开支。
-
减轻负担
不再需要重复造轮子,需要什么功能直接集成调用即可,也无需考虑整体的性能,只专注于业务代码的实现。
-
易于扩展
云上提供了自动的弹性扩展,用了多少计算资源,就购买多少,完全按需付费。
-
简化管理
自动化的弹性扩展、减少了打包和部署的复杂度、可以快速推向市场,这些都让管理变得简单高效。
-
环保计算
即使在云的环境上,仍习惯于购买多余的服务器,最终导致空闲。Serverless杜绝了这种情况。
OpenFaaS
OpenFaaS是Serverless的一个框架,开发者可以很容易的将事件驱动的函数或者微服务部署到Kubernetes。
OpenFaaS环境:
- Docker
- Kubernetes
OpenFaaS架构功能:
- 网关
- Watchdog
- Auto-scaling
- Metrics
- FaaS Provider
- Logs Provider
OpenFaaS技术支持:
-
支持多种语言,如Node、Python、Java等
-
提供事件模板,如HTTP事件、MQTT Connector
-
支持自定义FaaS模板,例如自定义SpringBoot模板
-
打包、推送、部署docker镜像
OpenFaaS附加值:
OpenFaaS基于Kubernetes,可以看作OpenFaaS除了自身功能外,继承了Kubernetes大部分的功能,尤其是自动伸缩、资源管理等功能。针对这些功能,可以从业务上去映射自动伸缩、资源管理,在代码成面也做一层管控,例如:
-
租户管理
一个用户或组织是一个租户,租户间的数据是隔离的,但是共享公共资源
-
实例管理
每个租户可以申请多个实例,每个实例对应一个Kubernetes的namespace
-
配额管理
每个实例要申请资源,包括cpu、memory等资源,资源不足时,租户需要重新申请额外资源
-
部署代码
代码部署和代码版本控制
OpenFaaS网关
官网:OpenFaaS网关介绍

OpenFaaS Watchdog
官网:Watchdog介绍
Watchdog是OpenFaaS启动、监听函数的插件,它是有Go-lang语言开发的。它内嵌了一个Http Server,支持并发请求、超时时间、健康检查等功能。它在OpenFaas网关和你自定义代码的中间,相当于一个代理。
Classic Watchdog
watchdog为每个请求fork一个进程,在进程中执行你的低代码。
调用流程如下:
- 用户请求OpenFaaS网关
- OpenFaaS网关转发请求到Watchdog
- Watchdog启动一个**进程**执行你的低代码,例如:你的代码是Node,Watchdog的调用相当于执行node index.js

of-watchdog
of-watchdog改进了classic watchdog fork进程的缺点,使进程可以重复使用,提高吞吐量,消除fork的延迟。这个模式适用于生产环境,并且它是OpenFaaS的github的一部分。
它与Classic Watchdog的区别可以这样理解(基于Node和自定义Springboot实现,我才说可以这样理解,其他语言环境我没有尝试):OpenFaaS(模板)帮你启动一个类似于Web容器,或者你自定义启动一个Web容器(Tomcat/SpringBoot),of-watchdog将请求转发到Web容器中。

OpenFaaS template
GitHub:OpenFaaS提供的模板
OpenFaaS提供了多种模板,直接使用模板做quickstart,也可以自定义模板。
模板文件中,我们关注最多的是function文件夹,这个文件夹是放我们的低代码的。替换function文件夹内容,可以在faas-cli new之前,或者是faas-cli new之后。
当然,其他模板文件也可以按需修改。
Node模板
从上面的截图可以看出来,node模板分了三个文件夹,所以它提供了三种不同的实现方式(node14的入口index.js,大致扫了一眼,是一样的,至于有什么新功能迭代,我没有深追)。
详细的内容可以查看一下各个模板的内容。
node
这种方式可以认为是每个请求都是一个进程,如果没有记错的话,这个是搭配Classic Watchdog使用的。我也是从这种模式转变到of-watchdog的(因为ID昂是of-watchdog还不完整)。
node12
这种方式,在index.js模板文件中可以看到,它使用了node的express框架,相当于启动了一个Web容器。
Java模板
Java模板中的Dockerfile使用的都是java11,你使用时,尽量改成自己的版本。
上述的java11-vert-x貌似是和异步相关的,java11是com.sun.net.httpserver.HttpServer构建一个简单的Web服务,局限性很大。
java11部署的反编译启动文件如下:

相关文章:
OpenFaaS介绍
FaaS 云计算时代出现了大量XaaS形式的概念,从IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Service)到容器云引领的CaaS(Containers as a Service),再到火热的微服务架构,它们都在试着将各种软、硬…...
【算法设计与分析】STL容器、递归算法、分治法、蛮力法、回溯法、分支限界法、贪心法、动态规划;各类算法代码汇总
文章目录前言一、STL容器二、递归算法三、分治法四、蛮力法五、回溯法六、分支限界法七、贪心法八、动态规划前言 本篇共为8类算法(STL容器、递归算法、分治法、蛮力法、回溯法、分支限界法、贪心法、动态规划),则各取每类算法中的几例经典示例进行展示。 一、STL容…...
vue初识
第一次接触vue,前端的html,css,jquery,js学习也有段时间了,就照着B站的视频简单看了一些,了解了一些简单的用法,这边做一个记录。 官网 工具:使用VSCode以及Live Server插件(能够实时预览) 第…...
火山引擎入选《2022 爱分析 · DataOps 厂商全景报告》,旗下 DataLeap 产品能力获认可
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 2 月 9 日,国内领先的数字化市场研究与咨询机构爱分析发布了《2022 爱分析DataOps 厂商全景报告》(以下简称报告),报…...
java-spring_bean的生命周期
生命周期:从创建到消亡的完整过程初始化容器 1. 创建对象(内存分配 ) 2. 执行构造方法 3. 执行属性注入(set操作) 4. 执行bean初始化方法 使用bean 执行业务操作 关闭/销毁容器 1.执行bean销毁方法 bean销毁时机 容…...
微服务相关概念
一、谈谈你对微服务的理解,微服务有哪些优缺点?微服务是由Martin Fowler大师提出的。微服务是一种架构风格,通过将大型的单体应用划分为比较小的服务单元,从而降低整个系统的复杂度。优点:1、服务部署更灵活࿱…...
论文解读:(TransA)TransA: An Adaptive Approach for Knowledge Graph Embedding
简介 先前的知识表示方法:TransE、TransH、TransR、TransD、TranSparse等。的损失函数仅单纯的考虑hrh rhr和ttt在某个语义空间的欧氏距离,认为只要欧式距离最小,就认为h和th和th和t的关系为r。显然这种度量指标过于简单,虽然先…...
js将数字转十进制+十六进制(联动el-ui下拉选择框)
十进制与十六进制的整数转化一、十进制转十六进制二、十六进制转十进制三、联动demo一、十进制转十六进制 正则表达式: /^([0-9]||([1-9][0-9]{0,}))$/解析:[0-9]代表个位数,([1-9][0-9]{0,})代表十位及以上 二、十六进制转十进制 正则表达…...
关于RedissonLock的一些所思
关于RedissonClient.getLock() 我们一般的使用Redisson的方式就是: RLock myLock redissonClient.getLock("my_order");//myLock.lock();//myLock.tryLock();就上面的例子里,如果某个线程已经拿到了my_order的锁,那别的线程调用m…...
C++:倒牛奶问题
文章目录题目一、输入二、输出三、思路代码题目 农业,尤其是生产牛奶,是一个竞争激烈的行业。Farmer John发现如果他不在牛奶生产工艺上有所创新,他的乳制品生意可能就会受到重创! 幸运的是,Farmer John想出了一个好主…...
MySQL8.x group_by报错的4种解决方法
在我们使用MySQL的时候总是会遇到各种各样的报错,让人头痛不已。其中有一种报错,sql_modeonly_full_group_by,十分常见,每次都是老长的一串出现,然后带走你所有的好心情,如:LIMIT 0, 1000 Error…...
具有非线性动态行为的多车辆列队行驶问题的基于强化学习的方法
论文地址: Reinforcement Learning Based Approach for Multi-Vehicle Platooning Problem with Nonlinear Dynamic Behavior 摘要 协同智能交通系统领域的最新研究方向之一是车辆编队。研究人员专注于通过传统控制策略以及最先进的深度强化学习 (RL) 方法解决自动…...
TrueNas篇-硬盘直通
硬盘直通 在做硬盘直通之前,在trueNas(或者其他虚拟机)内是检测不到安装的硬盘的。 在pve节点查看硬盘信息 打开pve的shell控制台 输入下面的命令查看硬盘信息: ls -l /dev/disk/by-id/该命令会显示出实际所有的硬盘设备信息,其中ata代…...
手机子品牌的“性能战事”:一场殊途同归的大混战
在智能手机行业进入存量市场后,竞争更加白热化。当各国产手机品牌集体冲高端,旗下子品牌们也正厮杀正酣,显现出刀光剑影。处理器、屏幕、内存、价格等各方面无不互相对标,激烈程度并不亚于高端之争。源于OPPO的中端手机品牌realme…...
dockerfile自定义镜像安装jdk8,nginx,后端jar包和前端静态文件,并启动容器访问
dockerfile自定义镜像安装jdk8,nginx,后端jar包和前端静态文件,并启动容器访问简介centos7系统里面我准备的服务如下:5gsignplay-web静态文件内容如下:nginx.conf配置文件内容如下:Dockerfile内容如下:run.sh启动脚本内容如下:制作镜像并启动访问简介 通过用docker…...
MongoDB 全文检索
MongoDB 全文检索 全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。 这个过程类似于通过字典中的检索字表查字的过…...
JS中声明变量,使用 var、let、const的区别
一、var 的使用 1.1、var 的作用域 1、var可以在全局范围声明或函数/局部范围内声明。当在最外层函数的外部声明var变量时,作用域是全局的。这意味着在最外层函数的外部用var声明的任何变量都可以在windows中使用。 2、当在函数中声明var时,作用域是局…...
汽车改装避坑指南:大尾翼
今天给大家讲一个改装的误区:大尾翼 很多车友看到一些汽车加了大尾翼,非常的好看,就想给自己的车也加装一个。 那你有没有想过,尾翼这东西你真的需要吗? 赛车为什么加尾翼?尾翼主要是给车尾部的一个压低提供…...
【Unity资源下载】POLYGON Dungeon Realms - Low Poly 3D Art by Synty
$149.99 Synty Studios 一个史诗般的低多边形资产包,包括人物、道具、武器和环境资产,用于创建一个以奇幻为主题的多边形风格游戏。 模块化的部分很容易在各种组合中拼凑起来。 包包含超过1,118个详细预制件。 主要特点 ◼ ◼ 完全模块化的地下城!包…...
知识汇总:Python办公自动化应该学习哪些内容
当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix...
