產(chǎn)品分享社區(qū)
聲明:網(wǎng)站上的服務(wù)均為第三方提供,請(qǐng)用戶注意甄別服務(wù)質(zhì)量
本文綜合介紹了明道云的技術(shù)棧選擇和技術(shù)路徑選擇背后的思考,為用戶選型提供一個(gè)更加全局性的參考資料。我們希望明道云產(chǎn)品不僅滿足客戶對(duì)產(chǎn)品特性的需求,更能夠符合企業(yè)IT長(zhǎng)期發(fā)展的路線圖規(guī)劃。
技術(shù)架構(gòu)
明道云系統(tǒng)整體基于微服務(wù)架構(gòu)。前端(Web/H5)主要基于 React 框架,后端開(kāi)發(fā)語(yǔ)言主要使用 Java、C#、Node.js。前端通過(guò) http 方式與 API 建立連接,API 與微服務(wù)、微服務(wù)與微服務(wù)之間主要基于 RPC 協(xié)議(基于 gRPC)來(lái)實(shí)現(xiàn)接口調(diào)用,數(shù)據(jù)存儲(chǔ)涉及的組件包括:MySQL、MongoDB、Redis、Kafka、ZooKeeper、Elasticsearch、File、Flink。
開(kāi)源模塊
本產(chǎn)品引入了很多主流的開(kāi)源框架,包括開(kāi)發(fā)語(yǔ)言與中間件。
(1)Java
Java 是一門(mén)面向?qū)ο缶幊陶Z(yǔ)言,具有簡(jiǎn)單性、面向?qū)ο蟆⒎植际?、健壯性、安全性、平臺(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn)。Java 作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。本產(chǎn)品主要使用了業(yè)界主流的 Spring Boot 框架,如工作流部分。
(2).NET
.NET 是開(kāi)放源代碼通用開(kāi)發(fā)平臺(tái),由 Microsoft 和 .NET 社區(qū)在 GitHub 上共同維護(hù),具有跨平臺(tái) 、開(kāi)放源代碼 、部署靈活等特點(diǎn)。本產(chǎn)品一部分微服務(wù)基于 .NET 開(kāi)發(fā)的, 目前基于 .NET6(LTS)版本。
(3)Node.js
Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境,用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。Node.js 使用事件驅(qū)動(dòng),非阻塞 I/O 模型而得以輕量和高效,非常適合在分布式設(shè)備上運(yùn)行數(shù)據(jù)密集型的實(shí)時(shí)應(yīng)用。如本產(chǎn)品的IM Web Socket 通信服務(wù)正式基于Node.js SocketIO 框架而構(gòu)建。
(4)MongoDB
MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似 json 的 bson 格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo 最大的特點(diǎn)是它支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。本產(chǎn)品 APaaS 核心模塊涉及的數(shù)據(jù)存儲(chǔ)均基于 MongoDB 實(shí)現(xiàn),基于其靈活的數(shù)據(jù)結(jié)構(gòu),也為產(chǎn)品的快速迭代提供了極大的便利。
(5)MySQL
MySQL 是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),屬于 Oracle 旗下產(chǎn)品,是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于 MySQL 其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),所以很多企業(yè)應(yīng)用產(chǎn)品都選擇 MySQL 作為數(shù)據(jù)存儲(chǔ)。本產(chǎn)品涉及的用戶、組織等結(jié)構(gòu)化基礎(chǔ)數(shù)據(jù)均采用 MySQL 存儲(chǔ)。
(6)Redis
Redis 是一個(gè)開(kāi)源的高性能的 Key-Value 數(shù)據(jù)庫(kù)。它支持存儲(chǔ)的 value 類型包括 string(字符串)、list(鏈表)、set(集合)、zset(有序集合)和 hash(哈希)。Redis 的操作都是原子性的,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。同時(shí) Redis 可周期性把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了 master-slave (主從)同步。本產(chǎn)品在非常多功能上均采用了 Redis 提供數(shù)據(jù)緩存,如最基礎(chǔ)的用戶信息、組織信息,也包括應(yīng)用信息、工作表信息、工作表行數(shù)據(jù)、工作流、應(yīng)用角色權(quán)限等等,出于查詢性能考慮,Redis 的運(yùn)用基本無(wú)處不在。
(7)gRPC
gRPC 是一個(gè)高性能、開(kāi)源和通用的 RPC 框架,面向移動(dòng)和 HTTP/2 設(shè)計(jì),支持多種開(kāi)發(fā)語(yǔ)言,基于 HTTP/2 標(biāo)準(zhǔn)設(shè)計(jì),帶來(lái)諸如雙向流、流控、頭部壓縮、單 TCP 連接上的多復(fù)用請(qǐng)求等特。這些特性使得其在移動(dòng)設(shè)備上表現(xiàn)更好,更省電和節(jié)省空間占用。本產(chǎn)品大部分微服務(wù)都是基于 gRPC 實(shí)現(xiàn),包括 C#、Java、Node.js 相關(guān)服務(wù)。
(8)Elasticsearch
Elasticsearch 是一個(gè)基于 Lucene 的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于 RESTful 接口,并作為 Apache 許可條款下的開(kāi)放源碼發(fā)布,是一種流行的企業(yè)級(jí)搜索引擎。根據(jù) DB-Engines 的排名顯示,Elasticsearch 是最受歡迎的企業(yè)搜索引擎。本產(chǎn)品的超級(jí)搜索功能是基于 Elasticsearch 來(lái)實(shí)現(xiàn)的(包含跨應(yīng)用的工作表數(shù)據(jù)、協(xié)作套件數(shù)據(jù)),目的是給用戶提供更快的響應(yīng)和更精準(zhǔn)的匹配。同時(shí)在應(yīng)用使用統(tǒng)計(jì)功能上也是基于 Elasticsearch 提供周期性的統(tǒng)計(jì)維度查看,充分了解應(yīng)用的使用狀態(tài)。
(9)Kafka
Kafka 是由 Apache 軟件基金會(huì)開(kāi)發(fā)的一個(gè)開(kāi)源流處理平臺(tái),是一個(gè)支持分布式、多分區(qū)、多副本、多訂閱者,基于zookeeper協(xié)調(diào)的分布式消息系統(tǒng)。通過(guò)引入 Kafka,能促使服務(wù)之間的解耦,且能頂住高峰時(shí)間段的訪問(wèn)壓力,不會(huì)因?yàn)橥话l(fā)的超負(fù)荷請(qǐng)求而完全崩潰。本產(chǎn)品的 APasS 部分一些功能在數(shù)據(jù)變更下,需要觸發(fā)工作流的執(zhí)行,這部分是實(shí)現(xiàn)主要就是基于 Kafka 的消息發(fā)布與訂閱來(lái)實(shí)現(xiàn),同時(shí)基于 Kafka 高吞吐量、多分區(qū)等特性,在配置合理的消費(fèi)端數(shù)量情況下,達(dá)到事件有序執(zhí)行和低延遲的效果。另外在本產(chǎn)品智能搜索模塊也采用了 Kafka 作為數(shù)據(jù)傳輸中間件。
(10)MinIO
MinIO 是一個(gè)基于 Apache License v2.0 開(kāi)源協(xié)議的對(duì)象存儲(chǔ)服務(wù)。它兼容亞馬遜 S3 云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾KB到最大5TB不等。本產(chǎn)品通過(guò)用戶上傳的文件以及一些靜態(tài)資源文件會(huì)存放于此服務(wù)中。
(11)Flink
Apache Flink 是一個(gè)開(kāi)源的大數(shù)據(jù)處理框架,專為實(shí)時(shí)流處理和批處理設(shè)計(jì)。它具有高吞吐量、低延遲、高可擴(kuò)展性和強(qiáng)大的狀態(tài)管理能力。Flink 支持分布式計(jì)算,能夠在大規(guī)模集群上處理大量數(shù)據(jù)。Flink 采用了數(shù)據(jù)流編程模型,使得用戶可以方便地構(gòu)建高效的數(shù)據(jù)處理流水線。本產(chǎn)品的數(shù)據(jù)集成中的多數(shù)據(jù)源數(shù)據(jù)實(shí)時(shí)同步與同步過(guò)程中的ETL數(shù)據(jù)處理能力均建立在Flink之上。
技術(shù)要點(diǎn)
NOSQL數(shù)據(jù)庫(kù)的選擇
明道云綜合采納了MongoDB, Redis和Elasticsearch等多個(gè)NOSQL數(shù)據(jù)技術(shù)棧。這樣做的主要目的是發(fā)揮不同模態(tài)數(shù)據(jù)庫(kù)引擎的專業(yè)化優(yōu)勢(shì),在功能拓展性、性能和用戶體驗(yàn)方面為用戶帶來(lái)更大的價(jià)值。雖然我們使用了復(fù)雜的技術(shù)棧,但是每項(xiàng)技術(shù)棧的選擇都著眼于主流、開(kāi)源、可運(yùn)維和符合業(yè)界標(biāo)準(zhǔn)。并且用戶不需要與原生技術(shù)棧打交道,應(yīng)用的搭建和運(yùn)行都是在零代碼的應(yīng)用環(huán)境中進(jìn)行的。
業(yè)內(nèi)首家推出容器化私有部署
國(guó)內(nèi)首家公開(kāi)的且可通過(guò)容器技術(shù)部署的零代碼/低代碼平臺(tái),降低運(yùn)維安裝部署成本,支持單機(jī)版、集群版高可用等部署模式,也支持在Kubernetes下部署。這一能力確保了客戶能夠得到云原生的可伸縮性和高可用性。
前端開(kāi)源
明道云私有部署的前端代碼完整開(kāi)源(mingdao-openweb),允許用戶fork并二次開(kāi)發(fā)。
多平臺(tái)部署
適配多種架構(gòu)基礎(chǔ)設(shè)施,包括X86 CPU架構(gòu)與ARM64 CPU架構(gòu)的Linux內(nèi)核服務(wù)器,以及國(guó)產(chǎn)操作系統(tǒng)。內(nèi)置快捷操作命令,包括停止、重啟、升級(jí)、回滾、備份等便捷操作。
應(yīng)用生命周期管理
支持應(yīng)用導(dǎo)入、導(dǎo)出、備份、維護(hù)、回滾以及可更新升級(jí),應(yīng)用搭建人員可高效維護(hù)。
開(kāi)放性設(shè)計(jì)
無(wú)處不在的開(kāi)放性,構(gòu)筑的企業(yè)應(yīng)用均自動(dòng)建立標(biāo)準(zhǔn)開(kāi)放接口(REST),提供所有數(shù)據(jù)對(duì)象增刪查改的完整接口并自動(dòng)生成文檔。工作流的Webhook觸發(fā)器、動(dòng)作節(jié)點(diǎn)、API集成也可以實(shí)現(xiàn)無(wú)代碼與其他應(yīng)用的對(duì)接。
超自動(dòng)化 (Hyperautomation)
創(chuàng)新的自動(dòng)化工作流,除了傳統(tǒng)的審批流以外,支持表單事件、人員、定時(shí)、自定義按鈕、接口觸發(fā)等模式,支持在流程中完成數(shù)據(jù)增刪查改,消息通知。
業(yè)務(wù)封裝能力(Composability)
依據(jù)PBC(Packaged Business Capabilities)思想,創(chuàng)新地設(shè)計(jì)出封裝業(yè)務(wù)流程功能,它利用工作流編排的數(shù)據(jù)自動(dòng)處理流程。它可以在整個(gè)組織內(nèi)復(fù)用數(shù)據(jù)處理能力,接受約定的參數(shù)傳入,通過(guò)工作流處理后傳出結(jié)果參數(shù),除了能調(diào)用內(nèi)部的數(shù)據(jù)以外,還可以通過(guò)API與外部數(shù)據(jù)交互。
數(shù)據(jù)集成
支持以零代碼方式配置的多類型數(shù)據(jù)庫(kù)實(shí)時(shí)同步。明道云支持如MySQL、SQL Server、Oracle、PostgreSQL、MongoDB、IBM DB2、Kafka等外部數(shù)據(jù)源作為數(shù)據(jù)源或數(shù)據(jù)目的地,建立同步管道,實(shí)現(xiàn)秒級(jí)延遲的數(shù)據(jù)實(shí)時(shí)同步。
技術(shù)路徑比較(模型驅(qū)動(dòng) vs 低代碼開(kāi)發(fā)工具)
在本市場(chǎng),為了實(shí)現(xiàn)快速應(yīng)用構(gòu)建,大體有兩種技術(shù)路徑。
一種是以明道云為代表的零代碼應(yīng)用平臺(tái)模式(No Code APaaS),完全使用模型驅(qū)動(dòng)的方式,用戶通過(guò)可視化方式搭建應(yīng)用,實(shí)質(zhì)上生成了一個(gè)模型文件(一個(gè)類似JSON文件的結(jié)構(gòu)),然后通過(guò)平臺(tái)(Run-time)直接解釋運(yùn)行。在運(yùn)行時(shí),實(shí)質(zhì)性的計(jì)算(數(shù)據(jù)的存儲(chǔ)、運(yùn)算、分析等)依然通過(guò)原生的方式和微服務(wù)交互。
另一種是以快速開(kāi)發(fā)為導(dǎo)向的低代碼開(kāi)發(fā)平臺(tái)(LCDP)。它們沿襲了快速開(kāi)發(fā)工具(RAD)品類的思路,但是提供了更多的可視化建模工具,使得開(kāi)發(fā)者在既定的CI/CD流程上得到更高的開(kāi)發(fā)效率。LCDP適應(yīng)代碼開(kāi)發(fā)人員的習(xí)慣,能夠輸出局部的源代碼,但是大多數(shù)產(chǎn)品依然不能脫離平臺(tái)產(chǎn)品Run-time獨(dú)立編譯運(yùn)行。
下表綜合體現(xiàn)了兩者的異同點(diǎn):
以上確實(shí)是一個(gè)對(duì)于兩種不同技術(shù)路徑產(chǎn)品的客觀比較。明道云選擇的是后者,這一方面是因?yàn)槲覀兺顿Y的初衷(解決業(yè)務(wù)和IT融合的問(wèn)題,公民開(kāi)發(fā)能力的釋放),另一方面,也是對(duì)技術(shù)和應(yīng)用趨勢(shì)發(fā)展的響應(yīng)。當(dāng)選擇了No Code APaaS的技術(shù)路徑后,我們一方面強(qiáng)化內(nèi)在的易用度優(yōu)勢(shì),另一方面則通過(guò)合理的架構(gòu)設(shè)計(jì)來(lái)彌補(bǔ)和增強(qiáng)短缺項(xiàng)。
以下是我們選擇該技術(shù)路徑的完整理由和強(qiáng)化舉措。
(1)降低學(xué)習(xí)成本,能夠讓非開(kāi)發(fā)者參與到應(yīng)用設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中。非開(kāi)發(fā)者既包括業(yè)務(wù)人員,也包括非開(kāi)發(fā)類型的IT專業(yè)人員(架構(gòu)、產(chǎn)品、業(yè)務(wù)分析等)。
(2)為開(kāi)發(fā)者提供可選的擴(kuò)展機(jī)會(huì),而不是要求整個(gè)應(yīng)用實(shí)現(xiàn)都低代碼化。開(kāi)發(fā)者應(yīng)該發(fā)揮他們的優(yōu)勢(shì),而不是把精力花在重復(fù)性很高的CRUD項(xiàng)目上。
(3)通過(guò)靈活組合能力顆粒,APaaS同樣可以完成高復(fù)雜度的企業(yè)應(yīng)用。因?yàn)榇蠖鄶?shù)復(fù)雜企業(yè)應(yīng)用的特點(diǎn)只是數(shù)據(jù)對(duì)象多、屬性多、關(guān)聯(lián)關(guān)系多、業(yè)務(wù)流程長(zhǎng)。這些多和長(zhǎng)的問(wèn)題都是可以分而治之,各個(gè)擊破的。
(4)通過(guò)前端開(kāi)源和插件開(kāi)發(fā)平臺(tái)解決前端自由度的需求。而不是為了100%的精確控制讓用戶從畫(huà)布開(kāi)始規(guī)劃。后者需要使用者掌握較為完備的前端知識(shí),并處理復(fù)雜的控件與數(shù)據(jù)源的綁定邏輯。
(5)應(yīng)用質(zhì)量。追求No Code, No Bug(一次對(duì),次次對(duì);一處對(duì),處處對(duì))的原理實(shí)現(xiàn),讓?xiě)?yīng)用構(gòu)建者不必再投入昂貴的單元測(cè)試。
(6)取舍均衡。明道云定位于解決范式化程度最高的企業(yè)中后臺(tái)應(yīng)用,這些應(yīng)用大多數(shù)是基于關(guān)系數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)管理和業(yè)務(wù)流程整合。這就為高零代碼程度解決應(yīng)用實(shí)現(xiàn)創(chuàng)造了可能。
(7)對(duì)應(yīng)用開(kāi)發(fā)模式趨勢(shì)的響應(yīng)。 未來(lái)企業(yè)應(yīng)用的開(kāi)發(fā)更多聚焦在業(yè)務(wù)的可組合性上,即使是原生開(kāi)發(fā),也強(qiáng)調(diào)無(wú)服務(wù)器化和SOA架構(gòu)的現(xiàn)代化。APaaS產(chǎn)品為這個(gè)技術(shù)趨勢(shì)提供了一個(gè)預(yù)先實(shí)現(xiàn)的框架,使得企業(yè)用戶無(wú)需精力在基礎(chǔ)技術(shù)架構(gòu)上,而可以專注于自己的業(yè)務(wù)場(chǎng)景實(shí)現(xiàn)。