程夢瑤
潤乾集算器從醞釀走向商用,花了八年時間。在這八年間,集算器經(jīng)歷了四次大的重構和無數(shù)次小的改造。要深刻理解用戶的痛點并提出有效解決方案,不流于表面,要做就要做到極致,這正是潤乾用多年時間打造集算器的初衷。
在過去十多年,潤乾(北京潤乾信息系統(tǒng)技術有限公司)一直是國內主流報表工具廠商?,F(xiàn)任董事長蔣步星既是公司的創(chuàng)始人,也是公司的核心技術帶頭人,在他看來,在經(jīng)營報表的過程中,總能碰到用戶希望協(xié)助開發(fā)復雜報表,而報表的復雜性不僅體現(xiàn)在格式上,更多的是在數(shù)據(jù)方面,數(shù)據(jù)庫中的數(shù)據(jù)要經(jīng)過很多步驟的復雜運算才能得到真正想到的數(shù)據(jù),而報表工具只能解決呈現(xiàn)環(huán)節(jié)那一步的少量計算,對于進入報表工具的數(shù)據(jù)計算則無能為力。
對于這個問題,業(yè)界并沒有什么好辦法。從2007年底開始,當潤乾報表4.x版本趨于穩(wěn)定之后,蔣步星帶領團隊開始著手研究這個問題。從2007年底到2015年后期開始進入商用階段,這段時間被蔣步星稱做“八年抗戰(zhàn)”,最終,集算器作為獨立產品經(jīng)營,全面與報表工具脫鉤。
計算本身就是個業(yè)務
在技術上,集算器和報表工具是相互獨立的,但集算器也能夠和潤乾報表集成,甚至也能和其他報表工具集成?!霸谧畛跎虡I(yè)化時,我們還是把它作為報表工具的一個附件模塊組裝出來銷售,而沒有獨立經(jīng)營。但是,我們很快就發(fā)現(xiàn),計算本身就是個業(yè)務,而且是比報表工具應用面更加廣闊的業(yè)務。”蔣步星說。
秉承“讓數(shù)據(jù)計算變得簡單、高效”的理念,潤乾集算器應運而生。
通常情況下,人們習慣于用已經(jīng)熟知的概念來類比一個新產品,比如電動汽車是用電而不是燒油的汽車。但是,如果找不到這個對標概念時,理解新產品就不那么容易了。比如在智能手機還沒發(fā)明的時代,你也很難解釋清楚iPhone是個什么東西。電話?便攜影音播放器?數(shù)碼相機?游戲機?手持工作設備?都是又都不是,功能太多時反而說不清了。
“集算器類似,它能干的事有點多:報表數(shù)據(jù)源、ETL、大數(shù)據(jù)計算、文本分析、Excel處理、Java計算中間件、數(shù)據(jù)網(wǎng)關……每個應用場景都足夠講半小時,如果正好和用戶的痛點匹配上,大家會聽得津津有味,而如果匹配不上,那就索然無味。”蔣步星說。
那么,集算器到底是什么呢?“有不少朋友和客戶問過我,能不能在一分鐘內說清楚集算器是什么,仔細想想,到現(xiàn)在為止,這個答案還是不能!”即使一下子說不清,但還是得說,蔣步星談到。簡單講,集算器是用來做數(shù)據(jù)計算的技術產品,主要針對(半)結構化數(shù)據(jù),它的使用人群是程序員,或者至少是有程序設計能力的分析人員,而不是不會編程的行業(yè)業(yè)務人員。
從技術上看,集算器可以從三個方面去理解:
其一,程序設計語言。集算器提供了獨特的語法體系和數(shù)據(jù)對象,使編寫結構化數(shù)據(jù)計算更為簡捷方便,而且在多數(shù)場合能表現(xiàn)出更好的運算性能,特別適合復雜的過程式運算。在這方面的對標技術大概是SQL、Java和Python。
其二,數(shù)據(jù)計算引擎。集算器提供了不依賴于數(shù)據(jù)庫的計算能力,能夠獨立完成各類結構化數(shù)據(jù)計算,而且特別強調集成性,易于嵌入應用程序內部,適合沒有數(shù)據(jù)庫或多個數(shù)據(jù)庫場景下的計算。這方面的對標技術主要是數(shù)據(jù)庫和ETL工具。
其三,大數(shù)據(jù)計算平臺。集算器還有自己的集群體系,可用于實施數(shù)據(jù)量較大的計算任務,集算器集群為程序員提供可靈活控制任務分配的分布式計算環(huán)境,借以實現(xiàn)最合理、高效的算法。這方面的對標技術主要是Hadoop和MPP數(shù)據(jù)庫。
開放的計算能力
上帝的歸上帝,愷撒的歸愷撒。
計算是無處不在的,并不是所有計算都適合數(shù)據(jù)庫來實施,現(xiàn)代應用中有許多數(shù)據(jù)庫之外的計算需求。很多年前,這個問題并不嚴重,因為那個時候的許多應用系統(tǒng)從交易到分析用一個中央數(shù)據(jù)庫全部搞定。而現(xiàn)在則有很大不同,出現(xiàn)了許多數(shù)據(jù)庫外的數(shù)據(jù),比如互聯(lián)網(wǎng)的網(wǎng)頁信息、Excel文件、機器產生的文本日志、云服務提供的XML或Json數(shù)據(jù)……這些數(shù)據(jù)都需要參與計算。
另外,即使是在數(shù)據(jù)庫中的數(shù)據(jù),也可能因為所屬的應用系統(tǒng)不同而存儲于不同的數(shù)據(jù)庫中,如果不同廠商的異構數(shù)據(jù)庫需要混合計算時,就會涉及跨庫問題。雖然許多數(shù)據(jù)庫提供了跨庫能力,但性能和方便性都不理想。
但集算器卻可以帶來不依賴于數(shù)據(jù)庫的計算能力,它提供了開放的計算能力!
作為計算引擎,集算器并不關心數(shù)據(jù)放在什么類型的數(shù)據(jù)源中,它都可以取來計算,并且是實時計算。多個數(shù)據(jù)庫也僅僅是多個數(shù)據(jù)源而已,跨庫混合計算是很自然的事情。即使仍然要把外部數(shù)據(jù)導入數(shù)據(jù)庫,但計算過程也可以由集算器來實施,而中間數(shù)據(jù)則完全不需要占用數(shù)據(jù)庫空間和計算資源,直接存放在文件系統(tǒng)中,管理上也更為簡單。
換句話說,集算器可以讓數(shù)據(jù)庫專心致志去做它最擅長和最應當做的事情,比如存儲、一致性、模式及約束等,而不要僅僅為了獲得計算能力就去部署和擴容更多的數(shù)據(jù)庫,這些計算能力可以由更便宜、更輕量級而且性能也更好的集算器來提供。
在設計目標上,集算器希望提升計算的描述效率和計算的執(zhí)行效率。蔣步星談到:“確切地說,集算器并不負責解決問題,想出(高效)算法是程序員的任務。集算器的任務就是提供更好的數(shù)據(jù)類型及相關的語法體系,使得編寫這類計算更容易更簡潔,更貼近人們的自然思維習慣?!?/p>
大幅提升復雜運算的性能
作為一款理論創(chuàng)新產品,集算器的核心運算引擎全部由潤乾團隊自己編寫。“有些底層的基本計算,包括表達式計算、分組、過濾等也有通用性,但要形成一套完整的體系,并且保證足夠的性能,也還是要自己實現(xiàn)才能完全控制。而且,我們因為有十多年開發(fā)報表工具的經(jīng)驗,這些底層計算本來就有豐富的積累?!笔Y步星補充道,集算器的實現(xiàn)技術和Hadoop也沒有關系,只是將Hadoop作為數(shù)據(jù)源對待,集算器集群的運行不需要Hadoop環(huán)境。
那么,這套支撐集算器的理論體系從何而來呢?這就需要溯源到上個世紀70年代了。關系代數(shù)是上個世紀70年代發(fā)明的理論,已經(jīng)有40多年歷史了,其間雖有多次完善,但并沒有發(fā)生關鍵性的革新。在發(fā)明關系代數(shù)的時代,計算機用于信息管理還不夠普及,數(shù)據(jù)計算需求相對簡單,用一些常規(guī)查詢統(tǒng)計方法就夠了。而當代企業(yè)不用計算機管理已經(jīng)不可能運轉,數(shù)據(jù)計算需求的復雜度大大提高,那個時代的理論體系很難適應這些新需求。
“舉個例子,基于無序集合理論的關系代數(shù)很難處理有序計算,而有序計算又是用戶天然需要的(比上期、比去年同期等)。而且,那個時代的計算機硬件還很差,要確保實用性,代數(shù)理論的設計也只能適應當時的環(huán)境,不可能考慮到今天的硬件情況,具體來講主要是大內存、多CPU和集群,SQL的基礎就是關系代數(shù),這使得SQL很難充分利用當代計算機的硬件能力以獲得最優(yōu)的性能。”蔣步星談到,這也是集算器能比SQL做得更好的原因。
在此背景下,蔣步星帶領團隊設計了新的語言SPL(Structured Process Language)。“SPL能比SQL做得更好,是因為SQL有點像是在用羅馬數(shù)字做運算,非常別扭,而SPL像是用阿拉伯數(shù)字,會順手很多。性能上的優(yōu)勢也類似,SPL發(fā)明了許多乘法,這些運算就不需要再用加法計算了?!?/p>
蔣步星補充說:“集算器在許多場合中測試出來的性能優(yōu)勢表明,這并不是我們的程序代碼寫得比別人好,而是在模型上有優(yōu)勢,能夠采用復雜度更低的算法來實現(xiàn)。運算越復雜時,我們就越有機會想出優(yōu)化算法,集算器的性能優(yōu)勢就越明顯,同時還會伴隨著代碼更簡單的好處,在運用集算器的案例中常常會出現(xiàn)代碼短了數(shù)倍,性能卻能提升數(shù)倍的情況。”
填補空白:定位中小規(guī)模的集群
目前的大數(shù)據(jù)計算平臺大概是兩種:數(shù)據(jù)庫擴容以及相關的MPP方案和Hadoop體系。數(shù)據(jù)庫本身擴容能力有限,在數(shù)據(jù)量較大時就撐不住了,而且MPP方案的建設成本相當高昂。而Hadoop體系的設計目標是超大規(guī)模集群,要幾百甚至上千節(jié)點時才能顯露出優(yōu)勢來,它消耗了大量資源用于容錯和復雜的任務調度管理機制,在集群節(jié)點數(shù)不夠多時反而沒什么優(yōu)勢。這樣,傳統(tǒng)數(shù)據(jù)庫解決小數(shù)據(jù)量,Hadoop解決超大數(shù)據(jù)量,占大多數(shù)的中等規(guī)模應用場景是個空白,目前用戶也只能用Hadoop來做。
“殺雞用了牛刀,因為沒有雞刀。集算器填補這一空白。集算器定位中小規(guī)模的集群,設計規(guī)模就是幾個到幾十個節(jié)點,原則上不要超過一個交換機,這是絕大多數(shù)用戶的實際場景?!笔Y步星說,在這個規(guī)模下,集算器不需要考慮太多容錯問題,也沒有太復雜的任務調度要求,把有限的資源盡量多地投入到計算本身中,從而獲得更優(yōu)的效率。
對于集算器的下一步,蔣步星也想得很清楚:“集算器的下一步是數(shù)據(jù)庫和數(shù)據(jù)倉庫,并將演變成和傳統(tǒng)關系數(shù)據(jù)庫、數(shù)據(jù)倉庫正面競爭的產品。但是換個角度看,集算器也不會是一個階段性產品,即使演化出數(shù)據(jù)倉庫后,作為計算引擎的集算器仍然有存在的意義,并且會長期完善下去。因為數(shù)據(jù)倉庫的計算能力是相對封閉的,也難以被嵌入到應用程序中,而應用中總會有大量庫外數(shù)據(jù),永遠會需要開放且可以被集成的計算能力?!?/p>
訪談實錄
Q:中國大數(shù)據(jù)產業(yè)生態(tài)聯(lián)盟、《軟件和集成電路》雜志社
A:北京潤乾信息系統(tǒng)技術有限公司董事長蔣步星
Q:集算器能不能提供兼容SQL的語法?
A:集算器不能基于關系代數(shù)來實現(xiàn)SQL。SQL難以獲得(開發(fā)和運行的)高效率,本來就是關系代數(shù)造成的。這個問題是理論性的,不可能通過工程上的優(yōu)化來解決。想獲得高效率,就必須放棄關系代數(shù)。不過,對于簡單運算,集算器也提供了SQL接口,畢竟用戶已經(jīng)習慣了,而對于復雜運算,我們建議用戶學習SPL,會獲得更高的效率。
Q:集算器采用開源技術嗎?
A:集算器的核心運算引擎沒有采用任何開源產品,完全是我們自己寫出來的。因為理論模型不同,也沒有什么開源產品可用。特別是,集算器不是Hadoop上的計算模塊,在設計集群方案時也沒有參考借鑒Hadoop體系,集算器的實現(xiàn)技術和Hadoop沒有關系,只是將Hadoop作為數(shù)據(jù)源對待,集算器集群的運行不需要Hadoop環(huán)境。但是,我們在邊緣和外圍用了一些開源技術,比如讀寫Excel文件就用了poi包,這個包做得挺好的,還有國際化本地語言排序、日志輸出等,另外,開發(fā)環(huán)境的外觀以及表達式的編輯也用了開源技術。
Q:為什么一直堅持做基礎軟件而不做看起來更容易賺錢的應用軟件?
A:對潤乾來講,我們只是在做自己擅長且喜歡的事,只是樸素地想通過這種方式來經(jīng)營企業(yè),基礎軟件有更大的重復銷售量來獲得超額利潤,基礎軟件難度大更適合我們這種以技術為本的公司。這或許就是傳說中的情懷吧,要鉆研技術就必須有堅韌、持之以恒的態(tài)度和工匠精神,這能夠建立起更高的技術門檻,結果還可以轉化成利潤。正因如此,我們研發(fā)團隊異常穩(wěn)定,很多“老研發(fā)”在這里一待就是18年,我們能做出別人做不出來的東西。
行業(yè)應用案例
案例名稱:集算器助力構建北京銀行綜合可視化智能系統(tǒng)
核心特點:
北京銀行綜合可視化智能系統(tǒng)將以數(shù)據(jù)可視化服務體系搭建為基礎,整個項目服務體系依托數(shù)據(jù)可視化規(guī)范、可視化服務平臺,結合分行領導層以及業(yè)務分析崗在研判分析、決策指揮等場景下的業(yè)務需求,形成可視化智能大屏產品,以多元化、專業(yè)化、友好化的視覺通道,實時、準實時地將區(qū)域經(jīng)營動態(tài),產品熱度等以大屏智能交互的形式對外展開服務。
應用解讀:
該架構方案的數(shù)據(jù)源是由潤乾公司通過從Control-M到集算器輔助ETL、集算器數(shù)據(jù)緩沖層再到集算器倉庫來提供,用集算器倉庫的模型來存儲事實表和緯度表,用集算器的集文件(二進制文件)與組表來做數(shù)據(jù)存儲,集算器在計算層負責計算單元,通過集算器應用接口,用可視化化組件來做數(shù)據(jù)的呈現(xiàn)。
應用價值:
在金融科技來臨的時代,各大行業(yè)已基本具備海量數(shù)據(jù)規(guī)模,成熟高效的數(shù)據(jù)平臺解決方案已經(jīng)成為大數(shù)據(jù)時代背景下的迫切需求。
潤乾公司自主研發(fā)運營的數(shù)據(jù)計算中間件,是一個通用性的輕量級大數(shù)據(jù)計算引擎,具有語法簡單、類庫豐富、集成性好、支持分步計算等特點,可以幫助用戶實現(xiàn)提升開發(fā)效率、優(yōu)化應用結構、提升運算性能等目標。
降低開發(fā)難度從而提高開發(fā)效率是集算器的設計初衷。用戶通過內置的敏捷語法體系編寫簡單的代碼即可完成原來在SQL或Java中需要復雜編碼的計算,達到讓編碼簡單化的效果。
優(yōu)化應用結構是集算器的重要作用。集算器是解釋執(zhí)行的語言,使用其實現(xiàn)數(shù)據(jù)算法可以降低應用的耦合度;通過集算器將算法外置減少存儲過程數(shù)量,將數(shù)據(jù)外置減少中間表數(shù)量,從而優(yōu)化數(shù)據(jù)庫結構;集算器天然支持多樣性數(shù)據(jù)源,避免統(tǒng)一數(shù)據(jù)來源帶來的繁重工作,進而優(yōu)化應用結構。
提升運算性能是集算器的顯著效果。集算器的敏捷語法體系和內置的(半)結構化計算類庫讓大部分計算的實現(xiàn)變得簡單的同時獲得更高性能。此外,集算器還提供了分步式計算功能,通過多機(PC)集群達到甚至超過小型機的性能,整體造價和維護成本更低。