本文由雲+社區發表做者:堵俊平python
在數據爆炸與智能革命的新時代,新的平臺與應用層出不窮,開源項目推進了前沿技術和業界生態快速發展。本次分享將以技術和生態兩大視角來看大數據和人工智能技術的發展,經過分析當下熱門的開源產品和技術,來梳理將來的行業生態以及技術趨勢。數據庫
咱們今天的主題分爲三塊,第一是從開源的角度看技術、產品和生態,第二,咱們從騰訊雲大數據的角度梳理開源的實踐,並跟你們分享一下咱們最近一段時間或者最近一年以來咱們的貢獻和成果。最後會跟你們一塊兒探討一下開源的大數據以及AI這個生態當中的一些熱點和趨勢。安全
最近在大數據這個圈子裏,開源圈或者是整個大數據的圈子裏有一個公共性的事件,作發行版的廠商,大數據領域兩大技術巨頭 Cloudera和Hortonworks忽然宣佈合併,這兩個公司其實從開源界從商業界,都是互相打的不可開交的兩個公司。從歷史上去觀察這兩個公司,咱們當時認爲是徹底不可能合併的兩個公司,爲何呢會忽然合併?網絡
我以前曾經在其中一家公司工做過,長達4年時間。當時從個人觀察,這兩個公司在這段時間裏面到了老死不相往來的地步,四年的時間只有一個工程師跳到了對方公司。但這樣的公司在今天這樣一個時代,大數據、AI或者雲時代,這兩個公司合併了。合併意味着什麼?外界有不少猜測,這是強強聯手,仍是抱團取暖,是主動求變,仍是來自資本的壓力,一千我的有一千個答案。咱們從外部角度能夠看出一些端倪,或者說從整個開源的運動或者開源的社區,生態發展能夠看出一些端倪。框架
第二個開源重要的消息就是說有些開源的廠商在最近這段時間裏面,從徹底開源的許可證協議轉向了部分開源,或者說有條件的開源,把一個徹底開放的生態變成了變動的許可證協議,mongoDB更改開源協議是能夠繼續用個人代碼,若是把它做爲一個服務開放出來的話,要開放全部的支撐服務代碼。Redis加了一個規定是能夠正常使用分發,但不能銷售這個產品。咱們看到這些曾經樂於開源的廠商,如今對開源的許可證加了不少限制和條款。機器學習
整體來講,站在支持純開源的、我的的角度來看,這是從開源到部分限制性的一種倒退。形成倒退的緣由是什麼呢?對於基於開源項目的產品,個人總結是可能面臨所謂的冰山困境。什麼意思?就是說從用戶視角去看開源產品也好,或者說非開源的產品也好,可能不少時候關注的是產品的功能和性能。冰山下面的這些技術的複雜性、成熟度可能關注不足,可能在挑選相似功能產品的時候每每從功能、性能、價格等外部的維度角度來考慮。分佈式
基於用戶對於功能、性能以及性價比的追求,軟件供應商可能更加放大或者專一於這些差別化的軟件的開發和研發。對於冰山底部的大開源平臺,這個開源部分的能力,他本質上是屬於同質化的。不少軟件供應商會去想:若是我在這裏投入大規模的研發,實際上與市場上的競爭對手的產品之間就體現不出差別性。因此這裏的冰山困境是指對開源產品,無論是用戶仍是商業組織,會更多的關注水面以上的部分。形成的結果會是什麼呢?若是你們真的只關注水面上的部分,只關心上層建築是否搭的愈來愈高,愈來愈好看,而不注意維護冰山底座的部分,會形成底部消融,若是底部不穩,整座冰山都會出現問題,圍繞開源項目所構建的生態體系就會垮掉。這樣的事情發生的多了,會影響公衆對開源項目與軟件的信心,咱們這樣一個開源大發展的時代又會回退到閉源的狀態。oop
開源的產品發展到今天,咱們一塊兒要反思一下,爲何會出現所謂的冰山困境,怎麼樣突破這些冰山困境。我以爲從一個開源軟件的整個生命週期來看,咱們可能有不同的觀點。對於開源軟件供應商來講,開發階段用所謂的拿來主義,基於現成的軟件來構建,能夠下降他的開發成本,包括在社區裏面利用一些社區外部的資源來促進開發流程或者開發的進度,這些都是很好的佈局。佈局
可是對於測試部分和維護部分,無論是開源軟件的發行商或是雲廠商,可能都有關注不足的部分。什麼意思?剛剛咱們說到基於開源能夠作開發,能夠下降所謂的開發成本,但相應的測試成本並無太多的下降,由於測試的複雜度很高,這些開源軟件都是獨立的社區去開發的。它們之間在版本發佈的時間點上沒法作到同步,因此這些不一樣步形成了不少時候版本之間有版本或者時間點上的衝突,須要你去測試不一樣軟件之間的邊界與協同。性能
因此在這個層面上,雖然使用基於開源的軟件去打造一個企業化的軟件,咱們能夠下降一些開發成本,可是在測試成本這塊,不要輕易下降這部分的成本和投入。在這塊,須要廠商而且清醒的認識和嚴謹的態度。若是測試不到位,對用戶的感受是開源軟件很不穩定,實際上這不是開源軟件的錯,而是軟件提供商沒有通過嚴格意義上的測試。無論是開源仍是閉源,沒有通過充分測試的軟件是不穩定的。
無論是開源的,仍是閉源產品。重要的不是代碼,重要的是後面的社區、後面的人,若是沒有後面精通這些代碼的人,拿了這些代碼也沒用,由於有些技術債,是早晚要還的。對於維護階段的技術債,如今的開源軟件提供商、尤爲是開源社區投入資源不足的發行商,徹底沒有這個概念。若是從軟件整個生命週期來看這個問題,若是在用戶側和軟件提供商側達成這樣一個共識,就天然不只會專一冰山上面的一層,冰山下的廣大的底座也會相應的重視和增強投入。這樣整個開源生態就會走一個正向、積極的循環。
從維護開源生態健康的角度來講,騰訊雲也有一些相關的嘗試,這裏以雲上的大數據產品爲例,作一些分享,包括後面的一些實際的成果。
舉一款產品,咱們叫騰訊雲數據倉庫產品Sparkling,是基於不少開源的技術,打造了一款雲倉庫,它能夠對雲上多種數據源進行存儲,好比說雲對象存儲COS,雲數據庫,彈性MapReduce等等,還有傳統的關係型數據庫也能夠對接。後面經過數據集成來構建數倉,數據集市來知足BI等數據應用。它基於很是強大的Hadoop以及Spark開源大數據技術,並進行了相應的一些優化。這些優化已經以patch的方式回饋給社區。同時它提供一個數據開發IDE,這樣用戶能夠寫傳統的數據分析SQL,也能夠支持機器學習經常使用的python,R等語言。除此以外,對於數據資產管理、數據門戶、數據質量控制這塊也都有相應的解決方案。
值得一提的是,由於它是一款針對雲的特性而設計的一款數倉產品,因此對於雲特性的利用已經到了一個比較高的階段。咱們把全部的節點分爲三種,主節點、核心節點和彈性計算節點。主節點是一些重要的控制性節點,核心節點包含數據節點和計算節點,而彈性計算節點只有計算節點,因此支持可伸縮的部署。咱們對開源的項目作了不少改進,好比說支持一些企業級的安全特性,包括對於數據受權和鑑權的支持等等,咱們還跟英特爾一塊兒合做,在社區裏面持續優化SparkSQL的任務執行器,在執行的時候能夠動態調整執行計劃。咱們對於數倉的列式存儲層,也作了不少優化工做,包括咱們也回饋到Parquet社區裏的bloomfliter功能來支持更快速的數據掃描。咱們當前也在針對於列存作基於MVCC的ACID支持,也有計劃把相應的方案和代碼回饋給社區。咱們的這款產品會在開源的基礎上把相應的技術優化提高以後,再回饋給開源社區。
因此咱們試圖爲這些開源項目作更多的貢獻,若是每個雲廠商都可以積極主動的貢獻技術力量、技術資源給開源社區,這對開源的生態健康是很是有意義的。咱們仍是Apache開源軟件基金會的白金贊助商,這個組織有不少大廠來支持它,爲何會有這些大廠來支持?由於它是不少軟件,包括大數據,包括人工智能等核心軟件背後的一個很重要的源泉,是水源地,咱們作這些貢獻和贊助不是由於有相應的權利保障,而是爲了保護好這個水源地,這對開源生態是很是重要的。咱們是國內第一家白金贊助商,咱們之後也會持續贊助下去。咱們今年也幫助Hadoop,Spark社區發佈了最新的release,咱們投入了團隊的committer和PMC在社區裏組織協調這些release的發佈,促進社區的健康發展,也開了國內大數據廠商的先河。咱們仍是不少開源項目的積極參與方之一,好比Hadoop社區的Ozone項目以及Spark社區的Hydrogen項目等,與社區裏的其餘開發者一塊兒協同開發這些項目,尤爲把雲廠商的能力和經驗帶進來,最終會使整個社區受益。
Apache Hadoop是在2006年左右成立的,這十幾年有了很大的發展,甚至能夠說是如日中天的過程。近期的熱點主要在雲原生,包括與AI平臺的集成與協同。還有一個簡單的列表,列出大數據每一個細分領域,好比:SQL,流計算等等,能夠看到在每一個領域都會有不少競品和精品,爲何會有這麼多出來?總有人對以前的項目不認同,或者認爲還有改進的空間。從研發資源的組織來講,開源這種跨企業和組織的協同和傳統的企業內組織是很不同的。但從結果來看,開源是一種頗有效的資源組織方式,既避免了大量的重複車輪子的工做,又保證了更新、更好的輪子能及時出現。
對於數據的訪問之間,咱們計算和物理分離,有很強的優點。數據平臺還會往外進展,能夠把GPU能力集成,在這上面經過增強調度,統一數據的訓練以及推理。包括Spark社區也提出了氫計劃,在應用層把大數據和AI開源的框架所有串聯在一塊兒,經過分佈式的調度方式,把這些框架調度到分佈式數據與AI平臺之上。
傳統的機器學習和大數據,兩個社區、兩套技術,能不能作一個融合,或者有沒有關聯?相對於傳統的機器學習,深度學習對於數據、大數據的利用,應該說效率更高。由於傳統的機器學習到必定規模以後,訓練的指標和效果就上不去了,可是Deep Learning是不同的,海量的數據可讓大規模神經網絡有更好的訓練效果。騰訊也開源了Angel的框架。因此在融合的基礎上,咱們認爲將來的技術方向,會是AI與大數據技術相互融合的過程,從原始數據導入到數據準備、數據訓練到模型部署,整個是一套閉環,這是將來的一個趨勢。
最後作一個簡單的總結,咱們認爲開源項目屬於社會公共資源,就像是水,上善若水,水潤萬物,雖然須要有人來維護,但其核心屬性仍然是免費的公共品。在開源生態圈的利益相關方,包括咱們的用戶,包括咱們的軟件提供商,包括咱們的開發者,咱們都是有義務來投入資源,來維護這片水源地的。咱們須要建設好社區生態,讓開發者能夠對接用戶的需求。將來這個社區的開發方向和用戶實際的需求能夠作直接的對接,而不必定經過軟件供應廠商,由於廠商的優先級不少時候體現了付費客戶的需求,尤爲是大客戶的優先需求。面對海量的開發者與社區用戶,咱們須要這樣一個平臺,讓長尾的用戶可以把聲音傳遞到社區,和社區長尾的開發者對接,這樣纔有助於社區的健康發展。
咱們要重視社區、重視人,而不是重視代碼自己。有些公司開源的代碼,會有人跳出來會說你這個代碼寫的很差,我以爲這是一個對開源很是不友好的行爲。無論是任何公司開聽任何代碼,這都是值得鼓勵的一個現象。若是代碼寫的很差,你能夠幫助它變好,哪怕是寫一個相似的東西開放出來和它競爭。開源在中國仍是一個萌芽期,在這個狀況下過度強調代碼質量,而不是開源自己的行爲,我以爲會有點適得其反。
最後一句話總結今天的演講,第一個是做爲咱們的開發者來講應該大膽開源,把一些產品還有技術大膽的開源出去,開源有不少的商業模式,我以爲開源軟件的商業模式在雲時代下會愈來愈成功。第二個是對於用戶來講,要放心、大膽的使用開源軟件和技術,由於這個時代基於開源技術的產品徹底能夠知足大多數的場景和需求,並且可以保證你不被少數的閉源軟件所綁架。
此文已由做者受權騰訊雲+社區在各渠道發佈
獲取更多新鮮技術乾貨,能夠關注咱們騰訊雲技術社區-雲加社區官方號及知乎機構號