本文内容来自一场与低代码开发平台 Zion 的CTO蒋耀锴的一次技术对话,如果你想要体验Zion低代码搭建应用的能力,可以点击阅读原文进行快速体验

Zion是一个云原生低代码开发平台,通过平台的云IDE能让用户快速地完成微信小程序、商城、协作类应用、个人网站的开发,它的目标是显著降低构建应用程序的门槛,使其能够更快速度、更低成本得满足来自业务人员的需求。

低代码 Trending

低代码这个概念最近两年很流行,其实低代码这个概念并不是这两年才出来的,它也代表了一种软件开发的流派,开发人员可以在图形界面中开发应用程序,低代码开发人员无需编写数千行复杂的代码,而是通过拖放可视化模型来创建具有用户界面、数据集成和交互逻辑的完整应用程序,让组织可以更快地将应用程序投入生产。

在谷歌搜索中查看low code这个关键词的搜索指数,可以发现从2019年开始,低代码的搜索热度就一直保持在50 以上,最近一年多更是维持在 80 以上的热度并一直持续走高。

f942e727e2d91b2a82d8b15cae3866f4.png

从低代码这个关键词的搜索历史可以看出来,市场对少量代码参与就能制作出应用程序的需求一直存在,只不过由于技术成熟度等问题,市场上提供低代码构建应用程序的服务商并不多。

那为什么从2018、2019年开始低代码的热度又上来了呢?我猜是因为低代码这个市场从大蓝海,没什么人愿意做的领域变成了有越来越多玩家入局,提供低代码应用开发的平台。这个从我们这几年科技媒体的宣传和各个互联网公司的造势也能看出来些苗头,在2020年的时候像我们能叫的上名的互联网公司都有发布自己的低代码开发平台。

是哪些技术的革新,促使这么多公司涌入低代码开发平台这个赛道的?

低代码与云原生

前段时间云原生低代码平台--Zion 的CTO,恰巧看了一些我在公众号上发布的Kubernetes 相关的文章,觉得我对 Kubernetes 的使用和实战经验的分享,他们在做平台架构时也遇到过。于是就邀请我体验一下他们的低代码平台,聊了聊他们在整个平台的架构对Kubernetes 的应用。

接下来大家跟随我的文章一起看看他们这个平台是怎么在 Kubernetes 集群上运作起来,以及通过 Kubernetes 在调度、租户隔离、成本控制等方面上的一些经验,尤其租户隔离和成本控制我想才是低代码平台能发展起来的一个很重要的原因。

Zion这个英文名字看起来还是很有禅意的,平时看篮球的朋友们可能对这个名字比较熟悉,现在NBA新奥尔良鹈鹕队的球星锡安·威廉森的名字就是这个单词,不过中文互联网上网友们一般爱叫他"胖虎"

a5993127b26130626cdca6e431afdc90.png

言归正传,Zion(载航)是函子科技创业团队,打造的一个低代码开发平台。用户通过Zion提供的开发平台能快速搭建一个微信小程序或网页类应用投产到上线。

多说一句载航这个名字真的不错,即音译了Zion这个单词,也表达了平台承载着租户的需求和信任远航的愿景。不过我们今天的主题是探讨怎么用云原生这些技术实现一个低代码开发平台,如果有想利用Zion平台打造一个自己的小作品的朋友们,可以访问Zion的官网体验一下,还是挺容易上手的。

Zion官网 https://www.functorz.com/?channel=wgdbd ,点击本文“阅读原文”链接可直达。

首先当你在Zion开发平台上每新建一个项目的时候呢,Zion的系统引擎其实是会给我们在Kubernetes集群里分配一个项目单独的命名空间,项目使用的各种 Kubernetes 系统资源比如Deployment、Service、Pod、存储等,都通过Namespace来完成隔离。

下图其实只是Zion集群中现存的Namespace的一小部分

39a7cc5f20bd8c01d423e07bc51a2255.png

每个Namespace都对应一个租户,里面主要由数据库、数据库代理、Redis缓存以及用SpringBoot的 Java Web服务构成。

cd67e0707a7ec8e078e27b55d14f0f34.png

租户项目的数据库、缓存其背后是由云服务器高效存储作为底层存储的PV,通过PVC绑定给租户对应的Namespace,实现数据存储针对租户的隔离。

Zion 的数据库使用的是PG、至于为什么不用MySQL我们后面再聊,先来看看Zion是怎么利用 Kubernetes 这些云原生技术搭建平台的。

云原生架构出低代码平台

我通过用低代码IDE创建应用的主要界面和功能步骤给大家介绍在Zion提供的所见即所得的应用构建能力背后依托了哪些技术、大概的实现思路。

首先作为一个低代码应用构建平台,Zion 提供了一套十分强大的图形界面给用户,用户可以很快地拖拽出应用的主要界面

c9f2cb1eba739c1321f82fa3fe52c031.png

我们可以把界面作为画板,像操作绘图软件一样在上面添加需要的元素以及具有交互行为的控件。

5e63a604a74786b2b1c41678a8e781ae.png

整个应用的界面、页面元素和控件这些其实都跟项目的数据表相对应,打开控制台的数据Tab,在这里我们可以对这些成员的基本属性进行一个完备地设置。

dc8ce3ca9abb338bb9648b9d69cdcb02.png

等我们确认提交创建应用后,Zion会把这些数据模型对应成库表持久化到租户Namespace的DB中去。等应用发布预览后就会由 Kubernetes 的Deployment、StatefulSet 这些控制器在租户命名空间里对我们一开始介绍的Web Service、PG数据库、Cache 进调度创建出各自的Pod。

6b6d4576e796f9111982734e6a381bd4.png

这里我们看到每个空间里还有DB备份的Pod,它的状态是Completed。其实这里是运用了 Kubernetes 的 CronJob 控制器来定时完成对租户数据库的备份,已完成的备份会上传到云存储上,以应对租户应用的灾难性恢复。

因为Zion上跑了有将近40000个单租户应用、应用发布的打包同样应用了Kubernetes的 Job 控制器,在单独集群里使用 Job 控制器对租户要发布的应用进行实时打包。

9e51179f9bbcb0db95635d86f13cc0e0.png

Job 是 Kubernetes 中专门用于执行像应用打包这样的一次性任务的控制器,让平台对应用的发布打包即有更好的流程控制,又不用担心打包过程中影响其他Deployment的调度运行。

技术上遇到的困难

关于用 Kubernetes 搭建一个有上万租户的低代码应用构建平台,Zion在发展过程中也遇到了不少困难,踩过了不少坑,其中尤为突出的是在对 Ingress 的使用探索上。

一般企业在使用 Kubernetes 集群时对外暴露服务使用的 Ingress Controller 都是 Ingress Nginx,本质它是一个 Nginx,当平台里有上万个应用,每个应用往往会通过多个 Ingress 暴露不同的服务,这就导致最终承载这些 Ingress 的Nginx的配置会变成几百万行,造成Reload时间很长。

Zion的技术团队在解决这个问题时,采用的是 Nginx和Lua结合的方案,通过在Ingress Controller 中 把固定的Location路由转变为通过Lua的规则来动态计算的方式,避免了巨大的Nginx配置从而极大缩短了Nginx Ingress Controller 刷新需要时间。

使用云原生的成本优势

当然上面我们展示的都是付费的单租户用户拥有的资源,你可能会想这样看来资源也挺浪费的,毕竟每个用户不管是游客还是重度用户都得给他们在 Kubernetes 集群上分配命名空间赋予对应的资源。

其实针对免费使用服务的用户他们采取的是同一命名空间承载多租户的策略,多租户的应用在整体架构上跟单租户没有太大区别,但是同一命名空间的服务资源会承载400 ~ 500 个普通租户的应用。

针对这些租户应用,命名空间中的Web服务、数据库等都是共享的,数据库用Scheme针对租户进行逻辑隔离,会通过 URL PATH上携带的类似 tenant_code 的信息将请求路由给对应的数据库Scheme。平台也只为这些体验用户分配200M的DB存储空间,且针对长期不活跃用户进行空间回收,能够很好地控制初期用户在体验平台能力上的硬件成本。

总结

这里我们再总结下使用 Kubernetes 搭建低代码应用构建平台的优势:通过 Kubernetes 对集群资源的抽象我们可以把机器节点抽象成多种职责单一的资源,通过 Deployment、StatefulSet、Job、CronJob这些控制器来分别调度平台系统的Web服务、数据库、一次性任务、周期任务,此外还有PV、PVC对存储空间和挂载行为的抽象,这些特性通力合作既能满足平台不同租户对算力、存储等多方面的需求,又保持了良好的扩展性。 

关于Zion低代码应用构建平台在发展过程中对DB、搜索分词系统的选型推荐它们CTO在公司内部做的两个分享

Zion 平台目前支持个人和企业用户的入驻,个人用户体验各种功能并发布小程序/网站不需要付费,如果对定制化有更多要求可以升级个人付费版,支持更多配置化功能,如果是企业定制化开发平台也有专门的团队去对接支持,

大家可以点击“阅读原文”,或者扫码下方二维码体验一下低代码制作发布应用的整个过程

Logo

低代码爱好者的网上家园

更多推荐