Laf 产品介绍
自我介绍
大家好,我是来自 Laf 团队的王子俊,很快乐明天能在这里给大家分享咱们 Laf 云开发平台及其实现原理。原本想说一点什么天气之类的话作为结尾,但主持人都说完啦,我就不多说了,还是间接开始明天的分享吧。
产品介绍
在筹备 PPT 的时候,我想过很多种的形式来介绍咱们是一个什么样的产品,但起初我发现在咱们文档和官网下面这两句话齐全就能够阐明咱们是一个什么样的产品:
第一就是说咱们是一个 像写博客一样,写代码能够随时随地上线。
其次就是 专一业务自身,让开发者能疾速地开释创意。
为什么说像写博客一样呢? 因为写博客的时候,你可能会关上一个博客平台,你的电脑关上一个浏览器,而后你码完字,点一下公布,你的博客就能够被他人看到了。
那咱们开发的时候是不是也能够说,我只有有一台电脑能关上浏览器,而后我进去就能够间接写代码,写完代码之后,我点一下公布,我的一个接口,我的一个利用可能就写完了。
第二就是说专一业务自身。在座有很多都是开发者,咱们身为一个开发者,很多时候会有想做一个小工具,或者说想做一个利用的这么一个想法。
但等咱们把环境部署好,筹备好之后,这个环境是指咱们电脑中的环境,比如说 数据库 等等这些资源,也有可能是咱们身边的环境,比如说没带本人的电脑出门。
但如果说咱们产品存在的话,你可能只须要摸到一台能关上浏览器的电脑,就能够进行你的编码工作了。
而后下一个环节,我是打算给大家演示一下咱们产品。
产品演示
原本我是筹备了一个视频的,但我感觉视频做的有一点早了,很多性能在咱们官网上没有展现进去,所以我还是跟主办方沟通了一下,筹备现场演示一下,我会在前面用电脑给大家演示一下,大家稍等我一下。
❝
这里是产品演示,大家能够拜访 laf.run 或者 laf.dev 来体验。
产品特点总结
好,演示环节就到此结束了。我用三点给大家总结一下,就是咱们我的项目的特点:
- 开箱即用的利用资源,包含提供计算资源、数据库资源、日志网络存储等利用所须要的所有资源,不须要筹备任何环境,包含电脑环境和物理环境。
- 指标是尽可能缩短开发流程,升高开发门槛。如果一个利用部署一个环境须要一天,咱们可能一天曾经做一个 demo 进去,曾经上线发给用户或群友测试了。
- 开源凋谢的态度,Laf 所有的源代码是开源的,咱们用的组件也都是开源的,不蕴含任何厂商绑定,能够跑在任何云上,没有后顾之忧。
技术实现介绍
技术选型
而后介绍一下咱们整体的技术选型。在编程语言方面,咱们抉择了 Node,最大的起因还是升高开发门槛,因为一个我的项目中你会用到前端,用到前端你可能会用到 JS,你前端写 JS 后端也写 JS,开发就不会割裂,能够笼罩更多用户。
而后存储方面咱们抉择了 MinIO,MinIO 最次要它是一个开源,除了开源之外,它提供了十分不错的横向扩大能力,咱们能够通过减少节点来减少它的存储能力和解决能力。
数据库方面咱们抉择的是 MongoDB,MongoDB 有一个最大的长处,对于咱们来说,它是非关系型的数据库。那么如果应用关系型的数据库,开发者可能门槛会进步一点,他须要去设计表,在做利用之前,他去设计一下表构造。如果用 MongoDB 的话,你可能不须要设计表,先去写业务逻辑,等你感觉你须要存储数据了,你再去应用 MongoDB 数据库。
网关咱们抉择的是 APISIX,它能够无缝地批改动静路由,还有它有丰盛的插件。最重要的是它开源凋谢的能力。咱们每一个云函数,每一个利用,每一个 bucket 都会调配一个给它一个二级域名。就会通过它动静路由的批改来不同的映射,就能够在咱们创立云函数和创立 bucket 的时候,无缝给大家起一个二级域名,让大家利用还没有域名的时候,能够间接上线,间接进行拜访。
实现流程图
而后上面是一个具体的实现流程图。咱们从右边看是一个开发者的视角,咱们能够通过内部 IDE,或者说咱们提供的 CLI 本地开发,而后创立一个利用,连贯到 Laf 的 server,而后它会把咱们利用的信息,存储到数据库中,而后筹备对应的资源,通过 Kubernetes 创立一个利用实例,而后外面放一个 Node 的 runtime,而后调配一个数据库,调配一个存储,整个利用从创立到启动,胜利的流程就实现了。
而后从右下方开始看,这就是咱们用户调用咱们一个云函数,或者调用一个接口的过程。咱们的流量先打到咱们的网关,而后网关依据 APPID 找到,确定的某一个 runtime,而后在 runtime 中,咱们云函数的名字又是惟一的,就能够确定执行哪一段函数代码,而后间接响应返回到外网。
serverless 实现计划比拟
说到 serverless 它有一个传统的解决方案,就是说一个申请会对应一个过程,也就是说咱们每次申请,它就给你创立一个 runtime,创立一个 pod,而后进行这么一个调度。
它的长处是比拟显著的,说无缝弹性伸缩,因为它每次都会从新创立一个,所以就不存在弹性伸缩的概念了。因为它每一个都是一个新的 pod。技术选型的也比拟性感,是一个十分柔美的模型。
但它毛病也同样的显著,就会存在很多开发者介意的冷启动问题,还有长链接无奈完满反对,导致开发习惯割裂。
这开发习惯割裂是指什么? 因为咱们传统开发用一个云数据库的话,它也是始终跑在那里的,不会说咱们每次申请过去,它会重启一个,就像当初很多的 AI 我的项目,它会接入 ChatGPT 的 OpenAI 接口。如果说用咱们长连贯内存的计划的话,咱们只须要保留一个会话 ID 就能够反对上下文的调用了。如果没有全局缓存的话,你就须要把所有的聊天记录保留到数据库中,而后每次再输出进去,这样能力进行一个上下文的关联。
而后咱们的技术选型,就是一个长连贯内存的计划。它人造就不存在冷启动问题,咱们容器是始终跑在那里的,就跟你一个云服务器一样,你每次申请打过去之后,它就能及时的响应。当然咱们人造就反对长链接了,同样的内存,咱们能够负载更多的申请,因为咱们没有资源筹备,资源创立,资源销毁的这么一个过程,咱们的资源是始终跑在那里的。
对于弹性伸缩,咱们用 Kubernetes 的 HPA 来实现,你输出本人的预期值,它会依据你负载过高,它会减少不同数量的 pod。如果说你的流量很低了,它可能会帮你缩减缩小不同的 pod。当然这么做实现起来略微要简单一点。
然而 咱们把简单留给了本人,简略留给用户 ,就是咱们这套技术选型,它是 以用户为驱动,而不是以技术为驱动的。用户须要长链接,咱们就去反对了长链接。用户不喜爱冷启动,咱们就把冷启动给干掉。这样咱们能够做到你的调用次数越多,你的流量越多,你的老本就越低。
云函数调度流程
而后这里就大略一个流程图,展示了一下调度的计划。左侧是传统的形式,一个函数申请进来,它就会新建一个运行时来处理函数,解决申请。
而如果用咱们的计划,所有的函数打到 Laf server,而后有一个工作队列,用一个运行时来解决这些所有的申请。如果说达到咱们设置的负载了,它可能会新建一个 pod 去扩散一下流量的解决。
而后两种形式的资源利用率,我这里也是用图简略概括了一下。传统形式它会在没有申请的时候,资源利用它的确是零,没有任何耗费。然而如果随着申请越来越多,它有资源创立和销毁的过程,就会导致申请随着资源利用率,就会线性的减少。
那 Laf 能够做到在负载比拟高的时候,依然可能放弃非常低的资源占用。还是那句话,咱们不须要经验创立和销毁的过程,咱们是始终运行的,跟一个服务器没有任何区别,咱们只须要筹备一下代码段所须要的上下文就能够了。
云函数开发体验
而后前面是一些对于咱们怎么实现这个计划的一些细节,就是一个云函数从动静公布到执行,到底经验过哪些过程,能力做到让咱们的云函数比其余要快很多。
一个用户编写完云函数之后点击公布,因为咱们是 TS 反对类型提醒的,咱们要把它编译成 JS,而后先存到数据库中,同时也把编译好的函数公布到利用对应的 runtime 中,而后咱们还会用 Node VM 模块,把它解决成 VM 的 script 的对象,缓存到内存中的一个 map 中。这样的话咱们每次调用云函数的时候,就间接从内存中去取那个 VM 的 script 对象间接执行就好了。
咱们没有编译的过程,所以每次响应就快了一点。通过 HTTP 调用的过程,也就是从内存中取出咱们编译好的对象,筹备好上下文,比如说传入的参数等等,以参数的形式传进去,而后间接执行代码,而后执行后果 HTTP 返回就好了。这就是咱们云函数从编写到入库,公布执行调用的一个过程。
那么咱们团队认为一个可能像写博客一样,写代码最重要的体验就是说,咱们要有一个齐备的 web IDE,因为如果说这个 IDE 用起来十分的不不便,大家都不想用,咱们就失去了像写博客一样写代码的体验了。咱们认为一个齐备的在线编辑器,须要有以下能力的反对:
- 残缺的代码类型提醒,如果代码量略微大一点,没有类型提醒的,写起来是十分苦楚的。我 们就会在云函数客户端那里去剖析一下,咱们所须要的依赖的列表,而后去申请 runtime 去递归的遍历依赖的 node_modules,找到它依赖的类型文件,再把它扔回来,给前端的编译器,编辑器咱们用的是 VS Code 的,它对 TS 反对就比拟敌对。
- 可在线运行调试,因为咱们轻易拿过去一台电脑,就能够写代码。
- 能够装置用户须要的 npm 依赖。
- 有变更记录,能够回滚指定版本。
- 最上面就是咱们刚刚演示的 AI 主动生成云函数这个性能是基于咱们公司另外一个产品实现 的,叫 FastGPT,它能够把你本人公司的数据库输出给 GPT 进行微调,而后它就能把握你所提供的知识库的常识,依据你的知识库帮你答复问题。
前面我也会分享一下 FastGPT 具体的实现原理。
云函数是最根本的一个代码单元,那么有一些逻辑须要复用,或者说你写一些库的时候,就须要一些相互调用。在这里咱们是 hack 了一下 node require,如果说咱们去援用一个云函数的时候,咱们确定它是一个云函数,就会把它解决成一个 node module,间接返回,就像咱们引入一个 node 包一样,就十分的天然。
多租户隔离
对于 MinIO,咱们如何实现多租户的隔离策略。其实咱们每一个 MinIO 的存储的 bucket,咱们会强制的在它的 bucket name 之前,给它加一个它的 APPID。
而后咱们把 APPID 作为一个 MinIO 的 user name,咱们会创立每个利用创立一个 user,而后咱们只有给 s3 设置一个拜访策略,就能够让它只拜访本人 user name 结尾的 bucket 就能够了。而后配上一些权限,就能够实现多租户的隔离,因为 MinIO 是一个集群,所以每个人只能拜访到本人的 bucket,才是对文件的爱护。
而后数据库也会同样遇到多租户隔离的问题,但还好 MongoDB 它本身有一个用户管理机制,所以咱们也只须要给每个利用创立一个 user,而后利用它本身的管理机制,实现权限隔离就好了。
但在这里有一个比拟重要的问题,如果咱们用了多租户,就会须要去限度一下,或者说设计一个申请的频率对每个租户,因为如果有这种歹意申请都打到整个机器上的话,可能会影响到平台上其余的用户。
咱们就会对连贯到 MongoDB 所有的流量进行一个拆包,而后看看它的申请频率是否超过了咱们限度,如果超出了,咱们就把它抛弃掉,而后没有抛弃的咱们就打入进来,而后从此来统计一下,也能够实现数据库的计量计费。
网关和路由
网关咱们选用的 APISIX,刚刚简略介绍一下它能够无缝地批改动静路由,还有它有丰盛的插件。最重要的是它开源凋谢的能力。咱们每一个云函数,每一个利用,每一个 bucket 都会调配一个给它提供一个二级域名。那就会通过它动静路由的批改来不同的映射,就能够在咱们创立云函数和创立一个 bucket 的时候,无缝给大家起一个二级域名。
AI 编写代码实现
而后这里就是刚刚 AI 写代码能力的一个实现分享了。从上往下看就是数据处理这个局部,咱们会通过模板市场和咱们的技术内容,就是文档,而后把数据向量化之后,存入到向量的数据库。
而后用户发问的时候,问题可能就分为三类,一个是写业务代码,一个是对于咱们根本文档应用的问题,还有其余问题。
如果是其余问题就间接回复咱们,就是说不相干的问题,咱们不答复就好了。如果是代码问题,它就会到代码数据库去搜寻类似内容,作为大模型的常识,而后扔给大模型,比如说我通知你,咱们产品的代码是这么实现的,对于登录的三个函数是这样的,而后你从新给我写一个用户须要的登录函数,返回给用户就能够了。具体就是通过拆分问题,预训练来实现的性能。
产品瞻望
而后就是对于扩展性了,因为咱们给大家提供的,比如说 MongoDB,比如说云存储等等一些能力,都是咱们固定好的。
如果说有的用户,我就须要 Redis,我就须要音讯队列等等,一些其余的云服务,甚至说是咱们本人的业务零碎,咱们 Laf 是放在 Sealos 上运行,Sealos 是另外一个产品。一句话总结就是一个云操作系统,在云操作系统下面,能够跑任何的其余服务,包含 Redis 等等这些。如果他们都跑在同一底层下面,就能够通过内网调用,也就是说咱们的扩展性十分强,你须要其余什么样的场景反对,咱们只须要去跑一个就能够了。
讲完根底的实现,咱们这个产品,有一些下一步须要做的货色,也就是说咱们将来布局。刚刚咱们讲了,咱们当初反对的编程语言是 Node,是因为咱们想把 Node 做得更好,更多的笼罩更多的用户。下一步咱们能够思考其余语言的扩大,比如说 Python、Go 甚至是 Java 等等,因为咱们实现原理刚刚讲过了,都很简略,只要塞一个运行时就能够了。
而后就是更强的 AI 能力,当初咱们的 AI 它只能写代码价值无限,所以咱们下一步可能会让它具备本人调试,本人上线的性能。
我在上面大略画了一个简图,就是 AI 编码之后,它会本人生成一个测试用例,本人去测试后果,而后反馈,而后去验收,验收如果不通过的话,它会扔回来本人 bug 修复,再去测试,再去验收,就这么一个重复的逻辑来走通,本人写完代码本人上线。当初代码咱们还可能还须要去改一改,等咱们这个性能实现之后,可能就不须要去改了。
而后就是更丰盛的函数模板市场。函数模板当初咱们是曾经上线了,在函数市场中有很多咱们反复的业务逻辑,比如说登录领取等等这些共用的,咱们就不必每个人都写一遍了。因为大家用咱们的产品写的都差不多,咱们只须要点一下,就能够加载到本人的利用中。
函数模板跟 AI 能力,它其实是能够互相关联的,因为 AI 它会写代码,它就能够发明更多的函数模板市场。有更多的函数模板,就能够让 AI 训练的材料越来越多,它给出的答案就会越来越精确。
然而咱们当初尽管解决了环境的问题,和反复造轮子的问题,但这还不够快。
最快的开发就是不必开发。下一步咱们有一个利用市场上线,很多利用它都是重叠的,比如说像咱们楼下健身房的约课零碎等等,一些零碎,它都是反复的,一个人开发就好,不必大家都开发。咱们会上线一个利用市场,利用市场你只须要点一下,就能够把这个利用部署起来。如果这个利用适宜你的场景,你只须要点一下就行了。这才是咱们最终极的指标,就是最快的开发是不必开发。
案例介绍
而后给大家分享一下咱们目前 Laf 上的一些比拟乏味的案例。上背后三个是咱们社区同学奉献的一些插件,像 VS Code 这些插件,有些人还是不喜爱咱们的 IDE,他能够用这个插件就能够在本人本地进行 VS Code 或者说其余的编辑器进行开发。而后是两个对于后盾治理的疾速开发平台。
第一个要略微强调一下,这个是两个大三的学生,用一个早晨的工夫用咱们的产品来写进去的一个我的项目,叫 Chat Mind,就是一个 AI 生成思维导图的工具,你能够通知他,比如说帮我生成一个游览攻略等等,他会给你画好思维导图,或者总结一个反对点,这个我的项目目前曾经被 XMind 收买了。大略上线一个多月被收买的吧,两个大三的学生一早晨写进去的。如果不是咱们产品存在,他可能要写更久的工夫,甚至说他们就把这个事件给遗记了,放弃了。
而后上面是咱们一些对于教育零碎和电商零碎的一些案例。两头这个略微提一句比拟有意思,它是一个猫谱,中大的一个学生写的,就是把他们校园里的漂泊猫,能够收集进来,通过这个猫脸辨认,能够扫出来这只猫它的信息是什么,它的名字是什么。
咱们当初也在做了这个反对流动,就是对所有的高校,如果他们部署这个猫谱我的项目的话,咱们是给他提供一年的收费,就是用咱们的这个货色是不收他们钱的。而后咱们 Laf 一部分的支出,也会拿进去去救助那些漂泊猫,这是咱们感觉一个比拟有意思的我的项目。
生态介绍
而后因为咱们是一个开源的我的项目,当初生态就是给大家展现一下这里 STAR 5.3K,咱们 1.0 版本上线至今,还不到三个月,咱们在线用户数曾经是 14000 了,利用总数量也靠近 10000,沉闷利用在 2300 左右,包含咱们海内版本。
我给大家的分享就到此结束了, 其实咱们的产品实现起来自身就没有这么艰难,只是说咱们没有通过技术去驱动,咱们通过用户需要去驱动,用户须要什么,咱们就以最快的形式,最简略的方法给用户实现,这是咱们产品指标。谢谢大家。
援用链接
[1]
FastGPT: https://fastgpt.run/
[2]
Sealos: https://sealos.io/
[3]
Chat Mind: https://chatmind.tech/
[4]
猫谱: https://github.com/sysucats/zhongdamaopu
🏠官网链接
https://laf.run
🐙GitHub 地址
https://github.com/labring/laf
📑拜访 Laf 文档
https://doc.laf.run/guide/
🏘️逛逛论坛
https://forum.laf.run/
对于 Laf
Laf 是一款为所有开发者打造的集函数、数据库、存储为一体的云开发平台,助你像写博客一样写代码,随时随地公布上线利用!3 分钟上线 ChatGPT 利用!
sealos 以 kubernetes 为内核的云操作系统发行版,让云原生简略遍及
laf 写代码像写博客一样简略,什么 docker kubernetes 通通不关怀,我只关怀写业务!