百度的核心業(yè)務對基礎架構有沒有特殊的要求?中臺和微服務在架構領域處于什么樣的位置?云原生架構的本質和影響是什么?中小企業(yè)架構師該如何設計 IT 架構?帶著這些問題,InfoQ 記者采訪了 QCon 北京 2020《架構演進》專題出品人,百度基礎架構部主任架構師鄭然。以下為采訪實錄。
百度的搜索業(yè)務特點是用戶使用邏輯簡單,只需要一個搜索框或下拉動作就可以完成產品的全部使用過程。但簡單背后,其實隱藏著非常復雜的算法邏輯,需要經過大量的計算過程,對算法和大數據技術要求很高。
由于用戶交互簡單,架構上來說,用戶對搜索引擎的速度有更高的要求。對基礎架構而言,數據規(guī)模和性能有非常高的要求,比如基于 C++ 語言的高性能 RPC 框架 (brpc),海量數據的流式計算和分布式存儲架構來支持離線數據處理和分析,大規(guī)模微服務和服務治理系統(tǒng)等。
相比于更復雜的業(yè)務形態(tài)比如電商業(yè)務來說,鄭然體會有兩個顯著的特點:一方面復雜的業(yè)務模型天然緩解了對響應時間的要求,因為業(yè)務模型復雜,過程中會和用戶產生更多的交互,即使用戶購買這個簡單的動作也需要多次互動;另一方面是交互結果的精確性。電商業(yè)務對交易結果的要求非常精確,而像搜索或者推薦這類側重算法的產品產出的結果本身就是一種概率模型,不可能完全精確。復雜的場景要求架構設計得更加松耦合和可擴展,更加注重吞吐的優(yōu)化,所以鄭然注意到電商架構中可以大量使用微服務和消息隊列機制來降低服務之間的耦合,Java 由于可以支持更快的研發(fā)效率,面對復雜業(yè)務場景在電商或者金融架構中也是主流,交易場景對分布式事務技術也有大量的應用場景。對結果的精確要求和相對復雜的業(yè)務流程,天然增加了業(yè)務的延遲,架構中可以側重吞吐的優(yōu)化。
隨著人工智能技術的不斷發(fā)展,基礎架構的技術層面,鄭然理解是一個從簡單的單機系統(tǒng)向全面的分布式系統(tǒng)演化的過程。早期數據量少,算法也比較簡單,小型的單機系統(tǒng)就可以輕松應付。隨著數據量、算法復雜度的不斷增加,對數據和算力的要求也越來越高,逐步引入了大量的分布式架構,比如分布式文件系統(tǒng)、表格存儲系統(tǒng)、服務治理系統(tǒng)等等。在移動互聯網時代,用戶對內容的要求也發(fā)生著根本的變化,比如通過深度學習技術和大規(guī)模視頻理解系統(tǒng)來提升對視頻內容的理解程度,這些技術在百度智能云的視頻云產品系列里也有體現。
鄭然認為,中臺的概念過于廣泛,他主要分享了百度在技術方面的一些做法。在百度相同業(yè)務部門和不同體系之間都有很多技術中臺的案例,比如垂類搜索架構會復用通用搜索架構中大量的基礎能力,搜索引擎架構會復用公司基礎架構團隊的很多基礎能力。技術上通常以服務的形式提供,這其中相對基礎的技術能力是比較容易界定的,但是越偏業(yè)務側的就越難界定,需要更高層次的業(yè)務和技術架構設計。
在鄭然看來,微服務只是中臺的一種實現形式,但并不是唯一的實現形式。微服務的本質是單一職責,是松耦合,是技術能力復用,這和中臺的本質是一樣的,所以如果業(yè)務部門微服務做得好,那么也更容易中臺化。
云原生這個時下最流行的技術概念,在鄭然看來其實是云計算技術的第二次進階。在前十年,云計算技術是圍繞資源層的彈性來建設的,通過大量的虛擬化技術來實現 IaaS 層強大的彈性能力。但是最近幾年,大家發(fā)現只有資源彈性還無法釋放云的全部能力,業(yè)務必須充分意識到自己是運行在云上,按照云的特點進行設計才能進一步發(fā)揮云的威力,這就是 Native 的含義。
鄭然所理解的云的特性中,核心是彈性,是按需使用。因此,業(yè)務架構也要向著彈性發(fā)展,比如微服務、存儲計算分離、高可用等等,這對業(yè)務架構的要求也非常高。在 CNCF 社區(qū)的努力下,云原生不僅僅停留在理念和思想上,還涌現出了像 Kubernetes 和 Prometheus 這樣成為事實標準的工業(yè)級軟件,加速了云原生理念的落地??梢韵胂?,隨著這些標準化的云原生技術的普及,可以全面加速企業(yè)上云的進程,全面釋放云的技術紅利,讓所有企業(yè)從中受益。
百度早在 2012 年就開始在云原生的理念下探索了,在 2015 年左右百度集群操作系統(tǒng) Matrix 已經覆蓋了大量的業(yè)務線,以此為基礎的 PaaS 技術和在離線混部等技術也一直走在前面。2019 年春晚紅包,百度作為歷史上第一次春晚全程無宕機的公司,云原生的技術思想和業(yè)務架構起到了關鍵的作用。
鄭然補充到,目前百度的云原生技術更多的是自研的技術體系,和 CNCF 社區(qū)的標準化技術方案有較大差異。團隊看到了云原生社區(qū)的迅速發(fā)展和強大生命力,從 2019 年開始逐步擁抱 Kubernetes、Istio、Prometheus 等優(yōu)秀的開源技術,希望結合自研的技術實踐經驗,將百度的優(yōu)秀實踐回饋到 CNCF 開源生態(tài)中去,促進云原生技術的發(fā)展,在 2019 年百度向 Kubernetes 社區(qū)的貢獻進入全球前十的行列。
對于云原生是否適用于傳統(tǒng)行業(yè),鄭然認為云原生適用于任何企業(yè),CNCF 2019 年的年度報告中不乏各行各業(yè)的實踐案例。事實上,云原生的本質是應用需要按照云的特點而設計,雖然很多業(yè)界標準的云原生技術能夠幫助企業(yè)加速云原生理念的落地,但是企業(yè)必須認識到自身架構必須按照云原生的理念進行優(yōu)化才能真正達到云原生的能力,這方面鄭然認為沒有捷徑。很多企業(yè)希望完全依賴公有云廠商或者自己的 IT 部門就能實現云原生的轉型是絕對錯誤的,只有業(yè)務積極適配云原生的技術理念,才能真正完成云原生的蛻變。
架構是為了保證業(yè)務高速發(fā)展而準備的,作為架構師首先需要深入理解業(yè)務, 只有深刻理解業(yè)務需求,才能設計出最符合當前業(yè)務發(fā)展階段的架構。除此之外,架構師還需要在某些維度鍛煉自己的核心能力,鄭然在自己的個人公眾號里曾經寫過一遍《架構師能力模型》的文章,總結了架構師應該鍛煉的十項能力,稍微總結一下:
研發(fā)流程的持續(xù)改進。架構師不是單兵作戰(zhàn),一定需要團隊的共同努力,那么需要對團隊的研發(fā)效率了如指掌,并且針對性的提出優(yōu)化手段。
歸納抽象和技術泛化能力。架構設計很多情況下鄭然理解就是將共性和差異化的東西分離出來,共性的部分抽象成獨立的接口,功能模塊或者組件,差異化的部分分別形成其他代碼模塊。那如何識別或者分析出共性的部分,這主要就是依靠架構師的歸納,抽象和技術泛化能力。
業(yè)務和需求的分析和理解能力。架構師要能夠接地氣,只有更好的理解業(yè)務才能設計出符合業(yè)務發(fā)展階段的架構。
技術折中和持續(xù)改善的能力。架構設計需要在很多因素中平衡,把握其中的平衡點并且知道后續(xù)如何改善是架構師內功的一種體現。
技術廣度和深度。架構師畢竟仍然是工程師,而且大都是從一線研發(fā)工程師逐步成長和積累起來的,在某一技術領域或者技術方向通常都有較為深入的理解和積累。不管是一線研發(fā)同學還是架構師,至少應該在 1~2 個技術領域有著深入理解的基礎上,再同時涉獵技術廣度。
持續(xù)學習能力。計算機技術發(fā)展速度非常快,持續(xù)學習能力對于計算機工程師來說都非常重要,特別是架構師還要求開闊技術視野。持續(xù)學習能力與其說是一種能力,更多的還是一種習慣的養(yǎng)成。
技術影響力??梢远鄥⒓?QCon 的演講。
溝通表達能力。對上可匯報,對下可講細節(jié),對用戶可講產品功能,溝通可以說貫穿日常工作的方方面面,是架構師綜合能力的集中體現。
技術管理能力。架構師不是做完架構設計之后就可以高枕無憂了,架構師往往要帶領整個研發(fā)團隊完成架構的落地。這就要求架構師即使不是經理角色,也要具備一定的技術管理能力,從而帶著整個團隊一起完成工作。技術管理能力首先要求能夠設定清晰的目標,這是整個團隊工作的方向;其次要求在行進過程中不斷糾正執(zhí)行路徑,執(zhí)行路徑很難在項目啟動時就規(guī)劃清楚,需要在執(zhí)行過程中不斷探索;有了目標和路徑,還需要優(yōu)秀的人才組成團隊,所以架構師也不能疏忽人才招聘和人才培養(yǎng)的工作。
堅持正確的價值觀,積極正能量。有著正確的價值觀,時刻充滿積極正能量的人,面對誘惑的時候,能夠更加堅定自己的選擇。面對困難的時候,可以主動尋找解決辦法,有足夠的韌性。這可能也是很多成功者的必備素質吧。
這是我第二次出品架構演進的專題了,很榮幸能夠得到 QCon 組委會的邀請,作為一個技術人為技術社區(qū)出一點點力,幫助更多的同學成長。技術是為業(yè)務服務的,架構也需要按照業(yè)務的需求進行設計和演化,沒有一次就設計完備的架構。那不同階段業(yè)務的需求是什么?不同的行業(yè),對業(yè)務和技術的需求有什么共同點和差異點?傳統(tǒng)行業(yè)和互聯網行業(yè)對技術的要求又有什么差異點?技術架構本身都是非常虛化的,很多經驗豐富的架構師都是從多年的業(yè)務和技術發(fā)展過程中錘煉出來,那如何讓更多的同學了解當面對業(yè)務需求的時候,選擇什么樣的架構方案呢?
帶著這些問題,我想需要讓同學們了解到更多不同業(yè)務場景下的典型案例,讓經驗豐富的架構師講解架構設計的取舍,或許能夠幫助大家少走一些彎路。所以出品這個專題的核心思路就是選擇典型案例,既包括銀行這樣的傳統(tǒng)行業(yè),還包括快手、百度地圖、微博等國內知名的互聯網產品,同時還有谷歌大規(guī)模索引系統(tǒng)這樣超硬核的技術分享。
鄭然,現任基礎架構部主任架構師,負責百度分布式集群管理系統(tǒng)和云原生架構。有著近 10 年的搜索引擎架構研發(fā)經驗,先后研發(fā)了 3 代 PaaS 系統(tǒng)以及基礎的微服務架構中間件,幫助百度搜索引擎提升集群的資源利用率和研發(fā)效率。積極參與技術社區(qū)的分享活動, 多次擔任 QCon 等技術大會的講師和出品人。
聯系客服