本文综合介绍了明道云的技术栈抉择和技术门路抉择背地的思考,为用户选型提供一个更加全局性的参考资料。咱们心愿明道云产品不仅满足客户对产品个性的需要,更可能合乎企业 IT 长期倒退的路线图布局。
技术架构
明道云零碎整体基于微服务架构。前端(Web/H5)次要基于 React 框架,后端开发语言次要应用 Java、C#、Node.js。前端通过 http 形式与 API 建设连贯,API 与微服务、微服务与微服务之间次要基于 RPC 协定(基于 gRPC)来实现接口调用,数据存储波及的组件包含:MySQL、MongoDB、Redis、Kafka、ZooKeeper、Elasticsearch、File、Flink。
- MySQL:次要存储用户、组织等零碎根底数据;
- MongoDB:次要是用于存储业务数据(如:利用、工作表、工作流等);
- Redis:缓存反对,晋升零碎性能;
- Kafka&ZooKeeper:外围应用场景包含工作表汇总、工作表数据收集、工作流事件等;
- Elasticsearch:目前次要是撑持合作套件下的全局搜寻能力;
- File:默认采纳的是开源文件存储系统 MinIO,并在此基础上做了一层适配。同时也反对配置合乎 S3 规范的文件对象服务(如:阿里云 OSS、腾讯云 COS、华为云 OBS、七牛云等);
-
Flink:用于实现数据集成的实时同步与 ETL 能力;
开源模块
本产品引入了很多支流的开源框架,包含开发语言与中间件。
(1)Java
Java 是一门面向对象编程语言,具备简略性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 作为动态面向对象编程语言的代表,极好地实现了面向对象实践,容许程序员以优雅的思维形式进行简单的编程。本产品次要应用了业界支流的 Spring Boot 框架,如工作流局部。
(2).NET
.NET 是凋谢源代码通用开发平台,由 Microsoft 和 .NET 社区在 GitHub 上独特保护,具备跨平台、凋谢源代码、部署灵便等特点。本产品一部分微服务基于 .NET 开发的,目前基于 .NET6(LTS)版本。
(3)Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用于不便地搭建响应速度快、易于扩大的网络应用。Node.js 应用事件驱动,非阻塞 I/O 模型而得以轻量和高效,非常适合在分布式设施上运行数据密集型的实时利用。如本产品的 IM Web Socket 通信服务正式基于 Node.js SocketIO 框架而构建。
(4)MongoDB
MongoDB 是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间的产品,是非关系数据库当中性能最丰盛,最像关系数据库的。它反对的数据结构十分涣散,是相似 json 的 bson 格局,因而能够存储比较复杂的数据类型。Mongo 最大的特点是它反对的查询语言十分弱小,其语法有点相似于面向对象的查询语言,简直能够实现相似关系数据库单表查问的绝大部分性能,而且还反对对数据建设索引。本产品 APaaS 外围模块波及的数据存储均基于 MongoDB 实现,基于其灵便的数据结构,也为产品的疾速迭代提供了极大的便当。
(5)MySQL
MySQL 是一个关系型数据库管理系统,属于 Oracle 旗下产品,是最风行的关系型数据库管理系统之一。MySQL 软件采纳了双受权政策,分为社区版和商业版,因为 MySQL 其体积小、速度快、总体领有成本低,尤其是开放源码这一特点,所以很多企业应用产品都抉择 MySQL 作为数据存储。本产品波及的用户、组织等结构化根底数据均采纳 MySQL 存储。
(6)Redis
Redis 是一个开源的高性能的 Key-Value 数据库。它反对存储的 value 类型包含 string(字符串)、list(链表)、set(汇合)、zset(有序汇合) 和 hash(哈希)。Redis 的操作都是原子性的,为了保障效率,数据都是缓存在内存中。同时 Redis 可周期性把更新的数据写入磁盘或者把批改操作写入追加的记录文件,并且在此基础上实现了 master-slave (主从) 同步。本产品在十分多功能上均采纳了 Redis 提供数据缓存,如最根底的用户信息、组织信息,也包含利用信息、工作表信息、工作表行数据、工作流、利用角色权限等等,出于查问性能思考,Redis 的使用根本无处不在。
(7)gRPC
gRPC 是一个高性能、开源和通用的 RPC 框架,面向挪动和 HTTP/2 设计,反对多种开发语言,基于 HTTP/2 规范设计,带来诸如双向流、流控、头部压缩、单 TCP 连贯上的多复用申请等特。这些个性使得其在挪动设施上体现更好,更省电和节俭空间占用。本产品大部分微服务都是基于 gRPC 实现,包含 C#、Java、Node.js 相干服务。
(8)Elasticsearch
Elasticsearch 是一个基于 Lucene 的搜寻服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口,并作为 Apache 许可条款下的开放源码公布,是一种风行的企业级搜索引擎。依据 DB-Engines 的排名显示,Elasticsearch 是最受欢迎的企业搜索引擎。本产品的超级搜寻性能并是基于 Elasticsearch 来实现的(蕴含跨利用的工作表数据、合作套件数据),目标是给用户提供更快的响应和更精准的匹配。同时在利用应用统计性能上也是基于 Elasticsearch 提供周期性的统计维度查看,充沛理解利用的应用状态。
(9)Kafka
Kafka 是由 Apache 软件基金会开发的一个开源流解决平台,是一个反对分布式、多分区、多正本、多订阅者,基于 zookeeper 协调的分布式音讯零碎。通过引入 Kafka,能促使服务之间的解耦,且能顶住顶峰时间段的拜访压力,不会因为突发的超负荷申请而齐全解体。本产品的 APasS 局部一些性能在数据变更下,须要触发工作流的执行,这部分是实现次要就是基于 Kafka 的音讯公布与订阅来实现,同时基于 Kafka 高吞吐量、多分区等个性,在配置正当的生产端数量状况下,达到事件有序执行和低提早的成果。另外在本产品智能搜寻模块也采纳了 Kafka 作为数据传输中间件。
(10)MinIO
MinIO 是一个基于 Apache License v2.0 开源协定的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器 / 虚拟机镜像等,而一个对象文件能够是任意大小,从几 KB 到最大 5TB 不等。本产品通过用户上传的文件以及一些动态资源文件会寄存于此服务中。
(11)Flink
Apache Flink 是一个开源的大数据处理框架,专为实时流解决和批处理设计。它具备高吞吐量、低提早、高可扩展性和弱小的状态治理能力。Flink 反对分布式计算,可能在大规模集群上解决大量数据。Flink 采纳了数据流编程模型,使得用户能够不便地构建高效的数据处理流水线。本产品的数据集成中的多数据源数据实时同步与同步过程中的 ETL 数据处理能力均建设在 Flink 之上。
技术要点
NOSQL 数据库的抉择
明道云综合驳回了 MongoDB,Redis 和 Elasticsearch 等多个 NOSQL 数据技术栈。这样做的次要目标是施展不同模态数据库引擎的专业化劣势,在性能拓展性、性能和用户体验方面为用户带来更大的价值。尽管咱们应用了简单的技术栈,然而每项技术栈的抉择都着眼于支流、开源、可运维和合乎业界规范。并且用户不须要与原生技术栈打交道,利用的搭建和运行都是在零代码的应用环境中进行的。
业内首家推出容器化公有部署
国内首家公开的且可通过容器技术部署的零代码 / 低代码平台,升高运维装置部署老本,反对单机版、集群版高可用等部署模式,也反对在 Kubernetes 下部署。这一能力确保了客户可能失去云原生的可伸缩性和高可用性。
前端开源
明道云公有部署的前端代码残缺开源(mingdao-openweb),容许用户 fork 并二次开发。
多平台部署
适配多种架构基础设施,包含 X86 CPU 架构与 ARM64 CPU 架构的 Linux 内核服务器,以及国产操作系统。内置快捷操作命令,包含进行、重启、降级、回滚、备份等便捷操作
利用生命周期治理
反对利用导入、导出、备份、保护、回滚以及可更新降级,利用搭建人员可高效保护。
开放性设计
无处不在的开放性,构筑的企业应用均主动建设规范凋谢接口(REST),提供所有数据对象增删查改的残缺接口并主动生成文档。工作流的 Webhook 触发器、动作节点、API 集成也能够实现无代码与其余利用的对接。
超自动化(Hyperautomation)
翻新的自动化工作流,除了传统的审批流以外,反对表单事件、人员、定时、自定义按钮、接口触发等模式,反对在流程中实现数据增删查改,音讯告诉,
业务封装能力(Composability)
根据 PBC(Packaged Business Capabilities)思维,翻新的设计出了封装业务流程性能,它利用工作流编排的数据主动解决流程。它能够在整个组织内复用数据处理能力,承受约定的参数传入,通过工作流解决后传出后果参数,除了能调用外部的数据以外,还能够通过 API 与内部数据交互。
数据集成
反对以零代码形式配置的多类型数据库实时同步。明道云反对如 MySQL、SQL Server、Oracle、PostgreSQL、MongoDB、IBM DB2、Kafka 等内部数据源作为数据源或数据目的地,建设同步管道,实现秒级提早的数据实时同步。
技术门路比拟(模型驱动 vs 低代码开发工具)
在本市场,为了实现疾速利用构建,大体有两种技术门路。
一种是以明道云为代表的零代码利用平台模式(No Code APaaS),齐全应用模型驱动的形式,用户通过可视化形式搭建利用,本质上生成了一个模型文件(一个相似 JSON 文件的构造),而后通过平台(Run-time)间接解释运行。在运行时,实质性的计算(数据的存储、运算、剖析等)仍然通过原生的形式和微服务交互。
另一种是以疾速开发为导向的低代码开发平台(LCDP)。它们因循了疾速开发工具(RAD)品类的思路,然而提供了更多的可视化建模工具,使得开发者在既定的 CI/CD 流程上失去更高的开发效率。LCDP 适应代码开发人员的习惯,可能输入部分的源代码,然而大多数产品仍然不能脱离平台产品 Run-time 独立编译运行。
下表综合体现了两者的异同点:
以上的确是一个对于两种不同技术门路产品的主观比拟。明道云抉择的是后者,这一方面是因为咱们投资的初衷(解决业务和 IT 交融的问题,公民开发能力的开释),另一方面,也是对技术和利用趋势倒退的响应。当抉择了 No Code APaaS 的技术门路后,咱们一方面强化外在的易用度劣势,另一方面则通过正当的架构设计来补救和加强短缺项。
以下是咱们抉择该技术门路的残缺理由和强化动作。
(1)升高学习老本,可能让非开发者参加到利用设计和实现过程中 。非开发者既包含业务人员,也包含非开发类型的 IT 业余人员(架构、产品、业务剖析等)
(2)为开发者提供可选的扩大机会,而不是要求整个利用实现都低代码化 。开发者应该施展他们的劣势,而不是把精力花在重复性很高的 CRUD 我的项目上。
(3)通过灵便组合能力颗粒,APaaS 同样能够实现高复杂度的企业应用 。因为大多数简单企业应用的特点只是数据对象多、属性多、关联关系多、业务流程长。这些多和长的问题都是能够分而治之,各个击破的。
(4)通过前端开源和插件开发平台解决前端自由度的需要 。而不是为了 100% 的准确管制让用户从画布开始布局。后者须要使用者把握较为齐备的前端常识,并解决简单的控件与数据源的绑定逻辑。
(5)利用品质 。谋求 No Code, No Bug(一次对,次次对;一处对,处处对)的原理实现,让利用构建者不用再投入低廉的单元测试。
(6)取舍平衡 。明道云定位于解决范式化水平最高的企业中后盾利用,这些利用大多数是基于关系数据结构的数据管理和业务流程整合。这就为高零代码水平解决利用实现发明了可能。
(7)对利用开发模式趋势的响应 。将来企业应用的开发更多聚焦在业务的可组合性上,即便是原生开发,也强调无服务器化和 SOA 架构的现代化。APaaS 产品为这个技术趋势提供了一个事后实现的框架,使得企业用户无需精力在根底技术架构上,而能够专一于本人的业务场景实现。