數據平臺上雲,變革遠比想象的深刻

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“戒備”與“偏見”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"幾年前,我所在的一家傳統行業的頭部企業啓動了一系列數字化轉型項目,在配套的IT基礎設施建設上,“上雲”已是大勢所趨。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在此前數年的工作中,我斷斷續續地使用着公有云產品,大多數情況下,我們只選擇IaaS層級的服務,也就是隻使用虛擬實例,對PaaS和雲平臺特定的Serverless服務敬而遠之。作爲一名架構師,我對公有云的此類產品一直懷有一種“戒備”心理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一方面,從技術發展路線上,不管是個人還是團隊,我們都希望學習並使用行業主流且平臺中立的技術,這些技術大多數都是開源的,有着活躍的社區和良好的周邊生態,包括高質量的文檔、豐富的技術專著,以及互聯網上大量的討論文章等等;另一方面,從公司角度出發,我們也不希望企業與某一朵雲深度綁定,這似乎總讓人缺少一種“安全感”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"此外,對於還沒有準備好擁抱雲計算的技術人員來說,上雲會給他們帶來一種危機感:“既然你都已經做得這麼好了,那以後還要我做什麼呢”?這一感受最初產生於IT的基礎設施團隊,之後系統架構師也會有些許同感,這也是很多PaaS和Serverless服務“不受歡迎”的原因。但對於雲廠商而言,由於這類服務的利潤率更高,他們會更加熱衷於推薦此類服務,這會讓本已十分敏感的用戶更加警惕,以至產生抗拒心理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"回到公司的數字化轉型項目,在聽取了多方意見之後,公司決定僅使用虛擬實例構建應用系統和數據平臺,儘可能避免深度介入平臺特定服務,甚至連非常基礎的對象存儲服務也沒有采用。我們數據團隊負責構建大數據平臺,在一批虛擬實例上搭建了一個Hadoop\/Spark集羣后,就開始了長期的數倉建設工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"之後,隨着數據規模的不斷上漲,集羣也經歷過幾次擴容,得益於Hadoop集羣管理工具和自動化運維工具的支持,每次擴容倒也不算麻煩。當時,我們對基礎設施的總體狀況是滿意的:“你總得維護一堆機器,然後定期擴容,哪個系統不是這樣呢?”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"“上雲”改變了什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"幾年後,機緣巧合,我去了一家業界知名的雲計算公司。所謂“食君之祿、忠君之事”,入職後,我必須廣泛而深入地學習這家公司的雲產品,這些產品既有基於開源產品封裝的“雲化”版本,又有深度定製的PaaS和Serverless服務,這些產品都藉助雲平臺的虛擬化能力,將動態伸縮與可維護性做到了極致。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"隨着對雲平臺和雲系統架構的深入學習和應用,我開始越來越清晰地認識到,由於過去對雲計算固有的偏見,阻礙了自己正確看待雲計算對系統架構和開發模式帶來的深刻影響,在走訪了大量公有云企業用戶之後,我真切地感受到了雲之所以成功和必將成功的“關鍵”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"大多數用戶選擇上雲的初衷是希望減輕在IT基礎設施上的負擔,避免在機房建設,網絡規劃和服務器採購上一次性投入大量資金,並且還將繼續在後期投入資源去管理和維護。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"隨着對雲計算的深度應用,很快我們就會發現,上雲所影響的並不僅僅是基礎設施,上層應用系統的架構在基礎設施“服務化”的影響下,也慢慢進化出了一些雲上特有的架構模式和最佳實踐,這些模式和實踐在自建(on-premises)場景下並不適用,或效果不夠顯著,但是在雲上則顯示出了強大的威力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"本文,我想針對數據平臺的架構設計,選擇最具實質意義與深刻影響的幾個方面分享一些個人觀點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"存儲與計算分離"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Snowflake的成功讓業界看到了“存儲與計算分離”架構的巨大優勢,這一架構充分利用了雲計算平臺靈活的伸縮能力,幾乎成爲了當前在雲上構建數據平臺的事實標準。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過去,硬件資源的最小粒度是服務器,CPU、內存和硬盤之間是緊密耦合的,系統基本是以服務器爲單位進行伸縮的,這本是平常不過的事情,但是在雲平臺上,當基礎設施被“服務化”之後,就出現了獨立的存儲服務(如AWS的S3和阿里雲的OSS)和計算服務(如AWS的EMR和阿里雲的EMR),這給數據平臺的架構設計開闢了新的思路,“存儲與計算分離”就是最重要的一條架構準則。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在存儲與計算分離架構下,所有數據將統一存放在對象存儲服務上,所有計算服務與對象存儲服務無縫打通,可以像讀寫本地磁盤一樣讀寫上面的數據。如此一來,計算資源和存儲資源就可以在各自的維度上自由伸縮,不再受彼此的制約。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"“無狀態”集羣"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"存儲與計算分離之後,衍生出了一系列強大而先進的新架構,無狀態集羣就是其中最“酷”的一個,這種集羣在過去自建(on-premises)模式下是無法想象的,“無狀態”意爲着集羣可以“即用即啓,用後釋放”,很多雲上的高階用戶已經在普遍使用這種模式處理他們的ETL作業了,他們每天會在零時過後的某個時刻拉起一個臨時集羣,執行所有的daily作業,待全部執行完畢之後隨即釋放集羣,從而將批處理的計算成本壓縮到了極致。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這裏需要知道一個技術細節:多數雲平臺都支持通過命令行或API啓動一個集羣,所以創建集羣的成本(工作量)幾乎可以忽略不計(這與本地化搭建一個Hadoop集羣是完全不同的),研發團隊可以將命令行或API調用寫入到工作流中,作爲批處理的前置任務,這樣就可以實現上述做法了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"特別地,數據平臺如果要實現集羣“無狀態”,還需要解決一個問題:即需要將數據的表結構等元數據以服務形式開放出來供計算服務使用,只有這樣,當集羣下次重建時才能接續此前的狀態繼續處理。通常,雲廠商都會提供與行業主流元數據接口(例如Hive的Metastore)兼容的元數據服務,如AWS的Glue Data Catalog,阿里雲的DLA Meta等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一些團隊也會在自建(on-premises)模式下嘗試存儲與計算分離,通常它們會選擇兼容某種對象存儲標準(如AWS的S3)的硬件設備作爲統一的存儲層,將所有數據存放在此類設備上。客觀地說,這些嘗試是值得肯定的,但是在非雲場景下,其“收益”並不明顯,就是說“看不出好在哪裏”。因爲在自建(on-premises)模式下,頻繁地啓停集羣是非常罕見的,也毫無意義,暫停集羣后釋放的資源並不能分配給其他系統,除非所有服務器被Kubenetes統一管理,但這就是另一個故事了。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"“多集羣”策略"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"通常,不同的應用場景對計算集羣有不同的需求,例如批處理、實時處理以及Ad-Hoc\/OLAP查詢所使用的組件和配置都各不相同,此外,不同部門、不同團隊在使用資源時經常會發生衝突,導致作業阻塞。過去,在單一集羣模式下,技術團隊只能依賴Yarn等資源配置工具針對不同應用場景、不同用戶制定資源分配策略,由於多場景疊加多租戶,使得資源分配策略異常複雜,集羣資源的整體利用率很難達到較高水平。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在實現存儲與計算分離之後,“多集羣”策略可以輕鬆解決上述問題,也就是面向特定應用場景和租戶創建專職集羣,針對使用場景進行最佳配置,同時,租戶之間也實現了絕對的資源隔離。由於數據與元數據是共享的,且如前所述,創建集羣可通過命令行一鍵完成,所以創建多集羣的成本幾乎可以忽略不計。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"多集羣策略可以有效地分解企業級架構上的複雜性,是應對複雜數據生態的強力措施。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"“無服務器”架構"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Serverless服務是指那些在基礎設施之上進一步將程序運行環境也虛擬化的雲產品,使用Serverless服務,用戶既不需要搭建服務器,也不需要構建運行應用所需的系統環境,他們只需要做一件事:編寫代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Serverless是一件美好的事嗎?不同的用戶態度可能會大相徑庭,這取決於團隊自身的背景和對雲計算的擁抱程度。Serverless的哲學在於“把精力用到最核心的問題上”,喜歡Serverless的用戶會對其讚不絕口,因爲它確實將團隊從基礎設施和運行環境的維護上徹底解放了出來,使得團隊可以集中精力交付更多的開發任務。但是也有技術人員會對Serverless持一種輕蔑態度,認爲這種服務只適合開發簡單的應用,或者只有技術實力不強的團隊纔會選擇。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"對於後者我們不予置評,但是對“Serverless服務只適用於中小規模開發”的言論,需要謹慎看待,從我過去接觸到的大量企業用戶來看,得出該結論的原因很有可能是對所使用的Serverless服務瞭解不深造成的。大部分初級用戶是通過Serverless服務的控制檯頁面編寫和調試程序的,這種圖形化界面使用起來非常簡單,在很短時間內就可以有所產出,這也是很多團隊喜歡Serverless的原因之一,但是基於圖形化界面進行開發有着無法克服的弊端,包括:代碼缺乏版本控制,無法多人協作開發,程序規模變大後難以維護等等,這些並不是Serverless本身的問題,而是基於Serverless的開發沒有進行“工程化”導致的。人們會將這些問題錯誤地歸結到了Serverless上,進而得出了“Serverless服務不適合大規模開發”的結論。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"關於Serverless項目的工程化,我們有過很好的實踐經驗,通常Serverless服務都會提供CLI與API用於部署和運行程序,這些CLI與API與用戶界面上的操作是等價的。一個非常好的做法是基於這些接口將部署和運行等操作編寫成自動化腳本,脫離對用戶界面的依賴,然後將這些腳本和程序代碼一起組織成一個工程項目,放到Git Repository上,這樣就可以對程序代碼進行版本控制了,然後再利用構建工具打包,並通過DevOps工具自動化部署,這樣一個Serverless項目就轉換成了一個常規項目,可以複用所有常規項目的開發流程與規範,構建大規模Serverless項目將不是問題。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"雲計算 VS. 開源生態"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我們已經說了很多雲計算的“好”,最後迴應一下對雲計算與開源生態相左的“擔憂”,從目前的行業態勢來看,主流雲廠商其實早已認識到這個問題,並在產品設計上努力向開源標準靠攏。只有使用行業廣泛認可的技術,雲計算纔有活力,也才能緩解用戶對雲平臺綁定的擔憂,進而吸引更多的用戶向雲上遷移。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在數據領域,各主流雲廠商都有基於Hadoop、Spark等主流開源大數據產品封裝的“雲化”版本,與Cloudera的CDH類似。同時,很多Serverless服務也大多基於主流開源產品封裝,或者保持一致的編程接口,例如AWS的Glue就是基於Spark的Serverless服務,編程接口與開源Spark一致。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"總的來說,雲計算與開源生態不是也不應該是對立的,一方面,雲廠商有向開源生態靠攏的商業驅動力,另一方面,有能力的雲廠商也應該積極回饋開源社區,一起營造更好的雙贏局面。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"一點展望"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"由於過往的獨特經歷,我先後經歷過“半雲”、“全雲”以及“非雲”等多種環境,真切地體會到了雲計算對數據平臺的深刻影響。當今的數據平臺建設,“雲上”和“雲下”已經幾乎是兩個賽道了,如果以個人的一點淺見展望一下的話,我認爲上雲是不可逆轉的趨勢,在雲上構築數據平臺是未來絕大多數企業的首選。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"作者介紹:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"耿立超,架構師,特斯拉中國數據團隊負責人,多年開發與架構經驗,對大數據、企業級應用架構、SaaS、分佈式存儲和領域驅動設計有豐富的實踐經驗,著有"},{"type":"link","attrs":{"href":"https:\/\/item.jd.com\/12677623.html","title":null,"type":null},"content":[{"type":"text","text":"《大數據平臺架構與原型實現:數據中臺建設實戰》"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一書,個人技術博客:"},{"type":"link","attrs":{"href":"https:\/\/laurence.blog.csdn.net","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/laurence.blog.csdn.net"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章