关于FaaS平台Fission与K8S使用过程中遇到的一些问题记录
Fission是什么
Fission(https://fission.io/docs/)
Fission is a fast, open source serverless framework for Kubernetes with a focus on developer productivity and high performance.
Fission operates on just the code: Docker and Kubernetes are abstracted away under normal operation, though you can use both to extend Fission if you want to.
Fission is extensible to any language; the core is written in Go, and language-specific parts are isolated in something called environments (more below). Fission currently supports NodeJS, Python, Go, Java, Ruby, PHP, Bash, and any Linux executable, with more languages coming soon.
Fission是一个建立在K8S上面的快速、开源的serverless框架,可以让开发人员专注于高性能、高生产力。
Fission只在代码上面运行:docker和k8s在正常操作下被抽象了出来,如果你愿意的话你也可以通过这二者来扩展Fission。
Fission可以很容易的在任何语言上扩展,核心部分代码是用Golang来写成,并且特定语言的部分是通过环境来隔离的,Fission现在支持NodeJS, Python, Go, Java, Ruby, PHP, Bash这些语言,并且支持任何linux操作,其他语言的支持也正在开发中。
以上是Fission官网介绍以及我个人的翻译,
2.2 Faas函数平台整体介绍
本文内容结构:
FaaS函数平台介绍:含义、发展背景、应用场景、应用优势
FaaS函数平台用法:函数的创建、编辑、发布与管理;函数触发器;添加函数依赖;使用函数市场等
FaaS平台介绍
-
什么是FaaS函数平台?
FaaS(function as service功能即服务)是一种云端服务,它允许执行代码以响应事件,而无需构建和启动微服务应用程序相关的复杂基础设施。
在 Internet 上托管软件应用程序通常需要配置和管理虚拟或物理服务器以及管理操作系统和 Web 服务器托管进程。使用 FaaS服务,物理硬件、虚拟机操作系统和 Web 服务器软件管理都由云端服务部门来自动处理,使研发人员可以专注于应用程序代码中的单个功能。 -
架构发展历程
- 实体物理机 -> 虚拟机 -> 容器编排(k8s) -> FaaS
- 业务粒度不断拆分,业务逻辑越来越聚焦,维护成本逐步减少,提升开发效率的诉求不断提高
K8S VS FaaS
K8s
FaaS
发布速度
几分钟
几秒钟
更新频率
周期在小时级别以上
分钟级别的更新
学习成本
中等
低
扩缩容
CPU / 内存
CPU / 内存 / 并发量 / 自定义监控指标
-
FaaS平台的功能
作为粘合层,通过各种事件源触发函数执行 , 调用目前系统的各种基础服务,如 邮件、密钥、短信、短链、罗伯特机器人 等服务。
业务开发者只需关心后端提供什么基础服务,无需关心这些基础服务的实现细节。如此只聚焦业务功能本身,使开发过程更灵活。
同时,基于函数快速开发、快速上线的特性,实现同质化功能的复用性。
暂时无法在文档外展示此内容 -
FaaS平台运行模式
- PoolManager 监听环境变化.
- 当Environment创建的时候 PoolManager创建 warm pool (Generic Pod pool).
- Router 从Executor获取服务地址.
- Executor 从CRD获取函数信息.
- Executor 调用 PoolManager 创建 Function pod.
- PoolManager 从 Warm pool 选择一个Generic pod.
- 特化被选中的 Generic pod 使他成为 Function pod.
- Executor 返回函数IP地址或者svc到Router.
- Router 将请求转发到Executor返回的函数地址 .
FaaS平台 VS AWS
FaaS平台
AWS- lambda
与公司服务适配程度
高 (可以直接访问)
低 (不能直接访问)
应用serverlees化
中 (可以通过container支持)
低
冷启动速度
300-400ms
1s以上
生态
正在发展阶段
完善
- FaaS平台优势
5.1 优势快速一览
快速冷启动:300ms - 1000ms内函数加载完成, 闲置时资源释放,节省成本
高并发:普通模式支持1.5w Qps ,镜像模式下支持4w Qps
自带可观测:默认接入日志、监控、链路追踪服务,省去逐个接入的繁琐流程
异步调用:支持回调,对执行时间长的服务友好,节省请求处理的排队耗时
迁移成本低:支持镜像发布模式,节省现有业务迁移成本
自动化提效:支持任务编排,可快速实现复杂的任务自动化调度
多语言普适:支持Java、Golang、Node.js、Python 等多语言,支持丰富定制
5.2 具体阐述
1)降低服务运行成本:
服务仅在使用时,占用资源。当操作完成时,一切都停止,没有服务器资源浪费,不会产生任何成本。因此,FaaS 具有成本效益,特别是对于动态工作负载或计划性任务。FaaS 还为高负载场景提供了卓越的总拥有成本。
举例:
- 短链接后台服务
- Faas 化前:日访问量较少,但运行2个服务,占用 2 个 1C1G的pod资源
- Faas 化后:只需要提供3个函数, 在不使用时候基本上0资源消耗
- 邮件发送服务
- Faas 化前: 运行2个 2C2G 的Pod资源
- Faas 化后: 只需要1个 1C1G pod,高峰请求时自动扩容
2)完善的可观测性,帮助业务开发专注业务
目前FaaS 平台使用成熟云原生技术栈 Loki、Promtail 、 Grafana、OpenTelemetry、Promethues, 提供稳定高效的可观测系统,无需额外编码即可支持。
- 日志平台:可支持数月历史日志查询
- 链路追踪:使用OpenTelemetry协议,和其他系统更易于融合
- 告警系统:支持日志关键词告警 ,告警更加灵活、定位更准确
3)快速实现业务功能的开发上线
借助丰富的触发器、函数模板市场,方便各业务开发者快速实现代码的迭代开发与上线
触发器示例界面>>
函数模板市场示例界面>>
借助模板市场可以快速实现一些功能,示例:
- 发送飞书、邮件
- 定时job:
公司存在很多周期性任务,如每隔几秒拉取数据,每天0点清理日志,每小时收集全量数据并生成报表等,Serverless平台直接与任务调度系统打通,只需写好任务的处理逻辑并在平台上配置定时触发器,即完成定时任务的接入,完全不用管理机器资源。
云服务指标抓取 - 后台查询类服务:如从 Redis/Mysql /ES/ CMDB /inflexDb/Kafka 等数据源,获取统计数据
- 罗伯特机器工单创建,拉群,发送卡片消息
- 日志和链路追踪(opentelemetry)相关代码
- 推荐应用场景:
- 数据加解密:计算密集型的加解密或签名验签。
- 数据处理:将MQ Topic作为事件源接入Serverless平台,平台会自动订阅Topic的消息,当有消息消费时,触发函数执行,类似定时任务场景,作为用户也只需写好数据处理的逻辑并在平台上配置好MQ触发器,即完成MQ消费端的接入,完全不用管理机器资源。
- BOS文件处理:文件上传、下载。
- 后端查询服务:后台查询类接口,快速实现数据调取
- 罗伯特机器人:工单自助排查,消息通知
- 自定义审批流程:基于龙门流程的二次开发自定义交互UI,自定义审批的回调函数
- 工单自助排查功能:通过与罗伯特机器人交互,实现用户对一工单自助解决,如mysql网络连接问题自助处理,消息中心发送异常自助处理。
- Faas平台目前功能集合
Poolmgr 模式支持开发语言:Java、Golang、Node.js、Python函数工作流: 支持自定义函数编排功能函数多版本支持, 可开始回滚到某一个历史版本支持容器即函数模式(container),能快速把现有服务迁移过去支持从gitlab同步代码cli本地代码一键发布函数模板:快速创建指定功能的函数,不会写函数没关系,用模板试试目前支持触发器:
http异步触发器Kafka 触发器RocketMq 触发器定时触发器网关触发器罗伯特指令触发器监控系统:
日志:支持采集终端输出日志指标监控: http 请求Qps 、 http请求时长、http状态码|函数冷启动, 函数缩容 链路追踪:采用Opentelemetry实现告警: 日志关键词告警 | prometheus指标告警 | 可以对告警函数二次开发,实现自定义功能FaaS UI 函数发布管理平台支持多租户,权限粒度控制到函数级别
4万+

被折叠的 条评论
为什么被折叠?



