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