《Laf 云开发平台及其实现原理》原文
平台工程线下 Meetup 北京站 2023-09-13
Laf 是我非常喜欢的云平台,这里有一个他们的线下分享,这里简单做个介绍。
产品介绍#
忽略
产品演示#
略
产品特点总结#
开箱即用的应用资源,包括提供计算资源、数据库资源、日志网络存储等应用所需要的一切资源,不需要准备任何环境,包括电脑环境和物理环境。
目标是尽可能缩短开发流程,降低开发门槛。如果一个应用部署一个环境需要一天,我们可能一天已经做一个 demo 出来,已经上线发给用户或群友测试了。
开源开放的态度,Laf 所有的源代码是开源的,我们用的组件也都是开源的,不包含任何厂商绑定,可以跑在任何云上,没有后顾之忧。
技术实现介绍#
技术选型#
- node 编程语言
- 存储选择 minIO,开源和横向拓展能力
- 数据库选择 mongo
- 网关 apisix,无缝修改动态路由、丰富的插件、开源开放
开发者使用流程#
- ide 或者 cli 开发
- 创建应用,连接到 laf server
- 通过 k8s 创建一个应用实例,放 node runtime
- 分配数据库、存储
- 应用创建、启动
用户流量流程#
- 调用云函数、调用接口
- 流量到网关,网关找到 appID 找到 runtime
- 确定函数名称,执行,响应返回
serverless 实现方案比较
- 一种方案是每次请求启动一个 pod,进行处理,每次都是全新的环境,扩缩容比较简单,冷启动比较麻烦,而且不支持长链接
- laf 选择的是长链接内存方案,没有冷启动,容器始终运行,天然支持长链接,扩缩容通过 k8s 的 hpa 实现,扩缩容的技术实现会复杂
还有一些细节,没做过理解不了,就不提了。
开发者角度#
- 编写云函数,会编译成 js,存储数据库、发布到 runtime
- 调用 node vm 模块,处理成 script 对象,缓存到内存,调用云函数从内存里获取 vm 的 script 对象并执行
- 没有编译的过程
- http 调用时候从内存里获取编译后的结果,处理上下文,并执行代码
- 云函数直接调用,在 require 时候会识别是否云函数,处理为 node_module
对象存储部分#
通过 MinIO 存储 bucket,配合访问策略,实现多租户隔离
数据库部分#
mongo 本身有用户管理机制,创建 user 权限隔离。
如果流量突发,会不会影响平台?对 mongodb 的流量拆包,判断请求频率限制,可以丢弃,也可以数据库计量计费。
网关部分#
利用 apifix,处理动态路由。
云函数、应用、存储 bucket 都通过他分配二级域名。
laf pilot#
主要是通过 ai 分析问题,理解文档知识点,从而写出代码。
- 业务代码实现
- 文档使用问题
- 其他问题
其他为实现能力展望#
介绍 sealos 实现云资源调用。
其他忽略。
🏠 官网链接
https://laf.run
🐙GitHub 地址
https://github.com/labring/laf
📑 访问 Laf 文档
https://doc.laf.run/guide/
🏘️ 逛逛论坛
https://forum.laf.run/
个人感受#
比较系统介绍了 laf 基本能力,个人是用户了,所以很多知识点理解起来比较容易。