程立談架構(gòu)、敏捷和SOA實(shí)踐
作者 霍泰穩(wěn) 發(fā)布于 2008年7月17日 上午1時43分
據(jù)支付寶公司官方數(shù)據(jù),截止到2008年5月6日,使用支付寶的全球用戶已經(jīng)超過8000萬,支付寶每日交易總額超過3.5億人民幣,日交易筆數(shù)超過150萬筆。看到這兒,我想很多軟件開發(fā)者朋友可能會問的問題是:這么龐大的支付平臺是誰設(shè)計的,如何設(shè)計的,有什么經(jīng)驗(yàn)和教訓(xùn)?在2008年5月份阿里巴巴舉辦的第二屆網(wǎng)絡(luò)工程師俠客行大會上,InfoQ中文站有幸認(rèn)識了支付寶首席架構(gòu)師程立先生,并邀請其分享了軟件架構(gòu)設(shè)計心得,對當(dāng)前熱門技術(shù)的看法,以及在自己團(tuán)隊(duì)中對這些熱門技術(shù)的實(shí)踐經(jīng)驗(yàn)等。
InfoQ中文站:請給InfoQ中文站的讀者介紹一下您自己。
程立:InfoQ中文站的讀者,大家好,我叫程立,來自支付寶架構(gòu)團(tuán)隊(duì)。和大家一樣,我也是InfoQ的忠實(shí)讀者。從2004年起,我開始參與淘寶網(wǎng)與支付寶系統(tǒng)的建設(shè),并于2005年正式加入支付寶,此后一直從事支付寶系統(tǒng)的研發(fā)工作。現(xiàn)階段,我的興趣在于適合電子支付行業(yè)的敏捷、高可用、可伸縮的面向服務(wù)架構(gòu)與開放架構(gòu)。非常高興InfoQ中文站提供了這樣的機(jī)會,讓我能夠代表支付寶的工程技術(shù)人員和大家進(jìn)行交流,希望這樣的交流能增進(jìn)我們的相互了解。
InfoQ中文站:支付寶技術(shù)架構(gòu)的發(fā)展過程是什么樣的?
程立:三年多前的支付寶系統(tǒng)只有一個應(yīng)用程序,而今天,僅僅在你點(diǎn)擊支付寶支付按鈕的一瞬間,取決于你選擇支付方式,很可能調(diào)動了數(shù)十個獨(dú)立的系統(tǒng)同時為你提供服務(wù):有的幫你聯(lián)系銀行,有的幫你支付貨款,有的推進(jìn)你的交易,有的幫你聯(lián)系商家發(fā)貨,有的警惕地盯著這一切,為這個過程保駕護(hù)航……支付寶系統(tǒng)從一個樸素的輕量級Java應(yīng)用程序,發(fā)展到現(xiàn)在由很多自主的服務(wù)系統(tǒng)構(gòu)成的全分布式系統(tǒng),是一個朝著明確的方向、邁著小而快的步伐、與業(yè)務(wù)齊肩并進(jìn)的發(fā)展過程。這個過程大致分為兩個大的階段。
第一階段是基于良好的業(yè)務(wù)邊界,將一根粗煙囪似的應(yīng)用程序拆成若干個細(xì)一些的煙囪。這種切分方式,可以使應(yīng)用程序間的通信盡量小,只有少量的頁面跳轉(zhuǎn)與組合,以及基于JMS的異步消息交換。這種簡單的分布就帶來一些相當(dāng)直接的好處,如單個系統(tǒng)的復(fù)雜性降低了,研發(fā)的并行度提高了,每個系統(tǒng)可以單獨(dú)進(jìn)行伸縮。公共的業(yè)務(wù),比如賬務(wù)與交易的處理等,被實(shí)現(xiàn)成可共享的類庫,打包在每一個應(yīng)用程序中,這樣,可以仍然使用單數(shù)據(jù)源上簡單、低成本的本地事務(wù)來保證業(yè)務(wù)處理所要求的原子性、一致性、隔離性與持久性。在這個階段,新業(yè)務(wù)只要是自成體系的,都盡量作為單獨(dú)的應(yīng)用程序?qū)崿F(xiàn)。
在第二階段,為了使業(yè)務(wù)核心更加專業(yè)化,前端應(yīng)用能夠輕裝上陣,我們將原來類庫形式的業(yè)務(wù)核心一個接一個地拿出來,做成了自主的服務(wù)系統(tǒng)。這是一個充滿業(yè)務(wù)與技術(shù)挑戰(zhàn)的過程。僅從技術(shù)架構(gòu)上說,為了使服務(wù)能夠快速構(gòu)建、靈活擴(kuò)展,我們研發(fā)了組件式平臺,使服務(wù)自身能夠通過插件式體系進(jìn)行靈活擴(kuò)展;為了提供電子支付業(yè)務(wù)所要求的嚴(yán)格事務(wù)一致性、快速響應(yīng)與高并發(fā)處理能力,發(fā)展了分布式服務(wù)系統(tǒng)中事務(wù)協(xié)調(diào)技術(shù);我們也發(fā)展了企業(yè)服務(wù)總線技術(shù),以提供統(tǒng)一、易于功能擴(kuò)展、滿足各種服務(wù)質(zhì)量要求與集成模式的服務(wù)通信機(jī)制。每個服務(wù)系統(tǒng)連同它操作的數(shù)據(jù)都是一個自主的業(yè)務(wù)單元、系統(tǒng)單元與研發(fā)單元,很好地支持了業(yè)務(wù)模型創(chuàng)新、系統(tǒng)伸縮、研發(fā)組織小型化與專業(yè)化。
總體說來,雖然發(fā)展速度較快,但支付寶的技術(shù)架構(gòu)仍然處于一個布局與打基礎(chǔ)的階段,對技術(shù)高度重視的態(tài)度,和緊緊抓住“服務(wù)”不放、持續(xù)小步快跑的執(zhí)行策略,使我們在這個階段打下了一個良好的發(fā)展基礎(chǔ)。面對前方業(yè)務(wù)發(fā)展的巨大空間,架構(gòu)與技術(shù)大有用武之地,在這里歡迎有志之士加入我們,共同開拓未來。
InfoQ中文站:請談一談您對架構(gòu)的認(rèn)識。
程立:老子說“道生一、一生二、二生三、三生萬物”。在業(yè)務(wù)愿景的技術(shù)實(shí)現(xiàn)過程中,假設(shè)“道”為愿景、一為方向、二為戰(zhàn)略的話,三就應(yīng)該是架構(gòu)了,架構(gòu)既出,萬物化生可矣。戰(zhàn)略是整體的、長期的,讓架構(gòu)直接承接戰(zhàn)略,帶來的最大好處是可以得到一個整體的可持續(xù)發(fā)展的系統(tǒng)平臺。而如果只是讓架構(gòu)從屬于項(xiàng)目或者產(chǎn)品,很可能產(chǎn)生的系統(tǒng)也是煙囪型的,短視的。
這是支付寶公司內(nèi)部對架構(gòu)的定位。作為技術(shù)人員,常常遇到的問題是“提供一個X產(chǎn)品,它的流程為Y,高峰期處理量達(dá)到Z。”;也有一些問題的提法有所不同,比如“我們希望進(jìn)入X市場,Y是我們的主要價值點(diǎn),這個市場未來三年可能有Z倍的增長,系統(tǒng)能幫我們做什么?”。在我所在的團(tuán)隊(duì)中,第二類問題總是由架構(gòu)師出馬,而第一類問題,只要X、Y、Z不太離譜,基本不需要架構(gòu)師操心。當(dāng)然,如果現(xiàn)有架構(gòu)難以支撐這個需求的話,那架構(gòu)師也是責(zé)無旁貸的。
InfoQ中文站:一個成功的架構(gòu)應(yīng)該具備什么特點(diǎn)?
程立:架構(gòu)必須能夠達(dá)到功能與質(zhì)量要求,以合理的研發(fā)、運(yùn)行與管理成本產(chǎn)生使客戶滿意的系統(tǒng),這是一個基本要素,否則是不及格的。但僅僅滿足功能與質(zhì)量要求的架構(gòu),還談不上成功。
在長距離賽跑中,能夠讓系統(tǒng)以輕松的步伐始終跑在業(yè)務(wù)前面,是成功架構(gòu)的一個顯著特點(diǎn)。為了支持這幾年業(yè)務(wù)的快速發(fā)展,支付寶的每個重要子系統(tǒng)都?xì)v經(jīng)了若干個大的版本升級。這些升級有些是沿著事先規(guī)劃好的迭代式發(fā)展路線進(jìn)行的,在保持整體架構(gòu)穩(wěn)定的情況下,通過增加功能、擴(kuò)展數(shù)據(jù)模型、引入新的處理模式、不斷地擴(kuò)展著功能與性能,持續(xù)給予業(yè)務(wù)強(qiáng)勁的支撐;但也有一些系統(tǒng)的升級則是接近于返工,架構(gòu)重新設(shè)計、代碼重寫、數(shù)據(jù)模型重新設(shè)計、已有數(shù)據(jù)大遷移。路遙知馬力,雖然這些系統(tǒng)在上線的當(dāng)時都達(dá)到了功能與質(zhì)量要求,但時間可以判定架構(gòu)成功與否。
成功架構(gòu)的另一個顯著特點(diǎn)是能夠?qū)镜暮诵母偁幜π纬捎辛Φ闹巍W罱R云先生在一次公開演講中,舉了一個例子,沃爾瑪要增加一萬個買家,需要買面積巨大的地,需要買很多的設(shè)備,需要很多的倉儲;而淘寶只需要增加一臺電腦就可以了。這個優(yōu)勢是商業(yè)模式帶來的,但其背后,是需要有一個高度可伸縮的技術(shù)架構(gòu)來支撐的。
InfoQ中文站:如何最大限度避免一個架構(gòu)設(shè)計的失敗?
程立:首先說點(diǎn)外因,架構(gòu)設(shè)計的失敗不全是架構(gòu)師的責(zé)任。假如一個企業(yè)戰(zhàn)略不清,或者雖然定義了清晰的戰(zhàn)略,但沒有很好的溝通機(jī)制讓架構(gòu)師了解戰(zhàn)略,很難設(shè)計出全局上下一盤棋、富有生命力的架構(gòu)。當(dāng)發(fā)現(xiàn)看不清全局、看不清未來時,架構(gòu)師應(yīng)該設(shè)法多溝通、推動改進(jìn)。如果始終推而不進(jìn)、溝而不通,就該考慮換個舞臺去發(fā)展了。不過,對于處于創(chuàng)業(yè)期的企業(yè),這一條不大適用,這類企業(yè)中,架構(gòu)發(fā)展與業(yè)務(wù)發(fā)展在開始階段往往是一個快速犯錯、快速調(diào)整的試錯過程,這樣的企業(yè)走向成功的同時,也常常能夠培養(yǎng)出好的架構(gòu)師。
在做架構(gòu)設(shè)計時必須以業(yè)務(wù)為本。不是說讓架構(gòu)師去摳業(yè)務(wù)的枝節(jié),比如流程中的某個環(huán)節(jié)究竟應(yīng)該有幾個分支、或者某個業(yè)務(wù)參數(shù)應(yīng)該是多少,而是將精力放在理解業(yè)務(wù)本質(zhì),看清不同業(yè)務(wù)之間的關(guān)系上。在一個業(yè)務(wù)思想混亂的頭腦中產(chǎn)生的系統(tǒng)也一定是結(jié)構(gòu)模糊、行為混亂的。
業(yè)務(wù)清晰之后,架構(gòu)師就像導(dǎo)演讀透了劇本,可以在腦海中構(gòu)思與創(chuàng)作了。擬定時空結(jié)構(gòu)、選擇風(fēng)格樣式、物色演員、規(guī)劃每一幕的內(nèi)容以及幕與幕之間的銜接等等。待一切可以在頭腦中栩栩如生、流暢地上演之后,架構(gòu)其實(shí)就出來了。這一步工作做得是好是壞,主要取決于架構(gòu)師長期以來積累的能力、知識與素養(yǎng),沒有太多的捷徑。
有幾個算不上新鮮的經(jīng)驗(yàn)還是值得提一下。首先,架構(gòu)師要建立自己的QA工具,比如一個質(zhì)量檢查表,能夠全方位地從研發(fā)、運(yùn)行、管理等維度,對架構(gòu)的質(zhì)量屬性進(jìn)行客觀地評估,這個檢查表中各項(xiàng)指標(biāo)的值范圍與權(quán)重需要針對實(shí)際情況進(jìn)行個性化定制。到了一個新環(huán)境中的架構(gòu)師往往需要一個適應(yīng)期,在這個適應(yīng)期中除了熟悉新公司的現(xiàn)有業(yè)務(wù)與系統(tǒng)之外,很重要的一個工作就是調(diào)整原來的質(zhì)量評估體系,使之新公司的業(yè)務(wù)相匹配。其次,在架構(gòu)師頭腦中的虛擬舞臺上,演員是一個個系統(tǒng),對每種系統(tǒng)的能力與特性的理解會決定他構(gòu)思出來的劇情在真實(shí)上演時能在多大程度上符合期望,這需要在實(shí)踐中關(guān)注并積累,如果引入了全新的演員,一定得讓他試鏡。還有一個是習(xí)慣問題:不要把腦海中出現(xiàn)的第一個設(shè)計當(dāng)作最終版本,只要時間允許,要多創(chuàng)作幾個版本,其間多與同事討論、做些換換腦筋的事,避免陷于某種定式跳不出來。這需要架構(gòu)師養(yǎng)成習(xí)慣,也需要公司研發(fā)流程的支持,比如讓架構(gòu)師盡量早地介入項(xiàng)目,有充分的時間醞釀與斟酌。
最后,架構(gòu)設(shè)計不可能不犯錯,因此很重要一點(diǎn)是當(dāng)發(fā)現(xiàn)架構(gòu)設(shè)計有錯誤時,一定不要嘗試掩蓋或者固執(zhí)地堅(jiān)持自己的錯誤,調(diào)整得越早,付出的代價就越低。好的企業(yè)一定有一個非常寬容的氛圍、允許犯錯并且鼓勵及時改正。我曾經(jīng)有過幾次在開發(fā)已經(jīng)進(jìn)行到三分之一甚至更久時,發(fā)現(xiàn)架構(gòu)設(shè)計有嚴(yán)重缺陷的經(jīng)歷,由于及時調(diào)整,加上團(tuán)隊(duì)的理解與配合,最終項(xiàng)目仍然取得成功,因此對這一點(diǎn)感受很深。
InfoQ中文站:在支付寶的技術(shù)團(tuán)隊(duì)中,也采用了敏捷的方法,請談?wù)勥@方面的經(jīng)驗(yàn)。
程立:支付寶的研發(fā)體系是從自身實(shí)際出發(fā)制定的,既要保障產(chǎn)品的高品質(zhì),又要保持對業(yè)務(wù)變化的快速響應(yīng),加上協(xié)調(diào)多個團(tuán)隊(duì)高度并行開發(fā)的需要,整套研發(fā)體系是一個精心設(shè)計的嚴(yán)謹(jǐn)結(jié)構(gòu),也是比較重量型的。但我們還是可以從中找到敏捷方法中的一些重要元素。
首先談?wù)劦_@里,以我所熟悉的支付寶架構(gòu)團(tuán)隊(duì)的研發(fā)模式舉一些例子。之前提到,支付寶技術(shù)架構(gòu)是采用與業(yè)務(wù)發(fā)展齊肩并進(jìn)的策略,這個過程就像給F1比賽中的賽車換輪胎,所有架構(gòu)改進(jìn)的實(shí)施必須安全、快速,盡量不打斷正常的產(chǎn)品研發(fā)的節(jié)奏。因此,在確定技術(shù)架構(gòu)的基本發(fā)展方向或者基礎(chǔ)設(shè)施產(chǎn)品的藍(lán)圖之后,我們會將研發(fā)工作切分成很短的迭代,每一個迭代的目標(biāo)明確,一般只解決少數(shù)幾個技術(shù)問題。
以引入企業(yè)服務(wù)總線為例,第一個迭代的任務(wù)是調(diào)研,目標(biāo)是概念驗(yàn)證與產(chǎn)品選型;第二個迭代是試水,我們選擇了一個新的業(yè)務(wù)產(chǎn)品作為服務(wù)總線應(yīng)用的小白鼠,當(dāng)時的目標(biāo)是解決高可用部署模式問題、以及集成邏輯的統(tǒng)一管理問題,架構(gòu)師進(jìn)入到該項(xiàng)目中,通過服務(wù)總線提供該產(chǎn)品與其它系統(tǒng)的集成方案,這個迭代與新產(chǎn)品發(fā)布的同時完成;以后的迭代是一系列推廣使用的迭代,幾次之后,我們完全替換了原來不夠靈活的商用JMS服務(wù)器集群,并且整個技術(shù)團(tuán)隊(duì)可以不依賴架構(gòu)組使用服務(wù)總線了;再以后的迭代是服務(wù)總線的自身的改進(jìn),如QoS的改進(jìn)、服務(wù)治理功能的增加等等。采用這種方式,每一次迭代都有實(shí)際可運(yùn)行的產(chǎn)出,并且其結(jié)果可以作為選擇下一輪迭代目標(biāo)的依據(jù)。以這種模式,架構(gòu)發(fā)展以一種穩(wěn)健的方式小步快跑著。但與有些敏捷方法學(xué)建議的固定迭代時長有些不同,當(dāng)“搭順風(fēng)車”時,是宿主項(xiàng)目的規(guī)模決定迭代的時長。
保證高效的溝通是另一個重要的問題,這通常是采用我們俗稱為“閉關(guān)”的形式來解決的。項(xiàng)目上到一定規(guī)模,就會包下一個會議室,項(xiàng)目經(jīng)理、架構(gòu)、系分、開發(fā)、測試等人員都會坐在一起,保持溝通的高效率,也減少不必要的干擾。對于長周期的項(xiàng)目、或者需求難以在初期完全確定時,在一個項(xiàng)目內(nèi)部也設(shè)計一些迭代,開發(fā)人員增量地交付功能,測試并行進(jìn)行功能驗(yàn)證,暢通無阻的溝通以及項(xiàng)目經(jīng)理在場的協(xié)調(diào)管理是這種工作模式能夠順暢運(yùn)轉(zhuǎn)的關(guān)鍵。
InfoQ中文站:阿里巴巴和淘寶網(wǎng)的很多架構(gòu)也是基于SOA的,請談一下選擇和實(shí)施SOA的前因后果。
程立:支付寶早期的單一應(yīng)用程序架構(gòu)只存在了很短一段時間就受到了挑戰(zhàn)。
首先對這種架構(gòu)發(fā)起挑戰(zhàn)的是團(tuán)隊(duì)組織結(jié)構(gòu)與分工的變化。隨著業(yè)務(wù)領(lǐng)域的拓展,并行的項(xiàng)目越來越多,研發(fā)團(tuán)隊(duì)也迅速擴(kuò)大,為了使團(tuán)隊(duì)更好地配合業(yè)務(wù),走向?qū)I(yè)化,我們內(nèi)部開始按照業(yè)務(wù)線分組。跨組之間的溝通成本的提高要求必須將各自負(fù)責(zé)的系統(tǒng)嚴(yán)格切開,降低相互間的耦合度。
另一個挑戰(zhàn)與支付寶業(yè)務(wù)特點(diǎn)密切相關(guān)。作為互聯(lián)網(wǎng)上的新型服務(wù),必須快速變化才能滿足需要,曾經(jīng)有很長一段時間,我們保持每周兩次的新版本發(fā)布速度;而作為電子支付服務(wù),它又必須絕對可靠、高度可用。為了解決這個穩(wěn)定與快速的矛盾,我們必須將系統(tǒng)中的業(yè)務(wù)核心獨(dú)立出來,由專業(yè)的團(tuán)隊(duì)、通過更嚴(yán)格的研發(fā)體系來支持它的發(fā)展;前端應(yīng)用程序則繼續(xù)以互聯(lián)網(wǎng)速度高速發(fā)展。
業(yè)務(wù)、技術(shù)、管理上同時提出了解耦的需要,而“服務(wù)”很好地統(tǒng)一了這三者,所以,選擇SOA作為技術(shù)架構(gòu)的發(fā)展方向是很自然的。
現(xiàn)在,我們已經(jīng)圍繞著公司的基礎(chǔ)業(yè)務(wù)建設(shè)了幾大核心服務(wù)系統(tǒng),并且搭建了以 ESB 為骨干、以服務(wù)框架為基礎(chǔ)的面向服務(wù)基礎(chǔ)設(shè)施。太極拳中講究腰功,拳論中說“腰為主宰,腰為軸,刻刻留意在腰間”。這些核心服務(wù)以及配套的基礎(chǔ)設(shè)施很像支付寶系統(tǒng)的“活腰”,它們的高可靠與高可用性是支付寶系統(tǒng)整體穩(wěn)定性的基礎(chǔ),它們的靈活性與可重用性支持前端業(yè)務(wù)有條不紊地創(chuàng)新、整合與優(yōu)化,它們的可伸縮性保證了系統(tǒng)能夠支撐持續(xù)的快速業(yè)務(wù)增長。
InfoQ中文站:現(xiàn)在你們也對外開放了很多服務(wù),在架構(gòu)設(shè)計上有做特殊的考慮,或者經(jīng)驗(yàn)嗎?
程立:支付寶很早就提供了外部API,為互聯(lián)網(wǎng)上的電子商務(wù)提供安全交易與資金流解決方案。現(xiàn)在支付寶已有上百個開放的API服務(wù),連接了數(shù)十萬大大小小的商戶系統(tǒng)。
我們覺得設(shè)計開放API平臺的思路與基于SOA原則進(jìn)行架構(gòu)設(shè)計很相似:業(yè)務(wù)上,需要理順業(yè)務(wù)關(guān)系、劃分清晰的企業(yè)業(yè)務(wù)邊界、并制定業(yè)務(wù)處理規(guī)范;從技術(shù)上說,需要制定統(tǒng)一的技術(shù)標(biāo)準(zhǔn)、建設(shè)統(tǒng)一的通信基礎(chǔ)設(shè)施。由于新產(chǎn)品會不斷推出,因此,支付寶在內(nèi)部建立了一個API容器,方便擴(kuò)展新產(chǎn)品。將SOA搬到互聯(lián)網(wǎng)上,SOA體系中固有的一些問題,如安全性、可靠性、接口契約的穩(wěn)定性等問題就會被放大,在架構(gòu)設(shè)計與標(biāo)準(zhǔn)制定時,必須很好地考慮這些問題。
出于安全與合規(guī)的需要,支付寶在制定API的業(yè)務(wù)規(guī)范與技術(shù)標(biāo)準(zhǔn)時,特別關(guān)注身份與安全體系;安全與方便是一對矛盾,為了更好地處理這兩者的關(guān)系,支付寶在架構(gòu)上支持靈活的安全體系,可以根據(jù)業(yè)務(wù)特性與商戶個性需要,在安全性與方便性之間進(jìn)行折衷。
互聯(lián)網(wǎng)上系統(tǒng)交互的非可靠性與交易與支付類業(yè)務(wù)的可靠性要求之間也是一對矛盾,因此,接口標(biāo)準(zhǔn)與統(tǒng)一的通信基礎(chǔ)設(shè)施中我們針對可靠性進(jìn)行了專門的設(shè)計。
從接口契約穩(wěn)定性上說,我們當(dāng)時的做法是將技術(shù)標(biāo)準(zhǔn)設(shè)計成允許API接口增加新參數(shù),提供版本參數(shù),提供API接口的個性化配置能力,允許商戶定義一部分API上交換的數(shù)據(jù)與處理行為等。
隨著支付寶業(yè)務(wù)領(lǐng)域不斷拓展,原來的從需求->解決方案->產(chǎn)品->API的方式,周期太長,已經(jīng)難以快速滿足大量合作伙伴的需求。因此,支付寶現(xiàn)在正在由產(chǎn)品式的開放轉(zhuǎn)向平臺式服務(wù)的開放,通過加強(qiáng)開放基礎(chǔ)設(shè)施的建設(shè),向合作伙伴提供更基礎(chǔ)、更可重用、更體系化的服務(wù),達(dá)到與合作伙伴充分協(xié)同,建設(shè)繁榮、共贏的電子商務(wù)生態(tài)圈的目標(biāo)。同時,開放的業(yè)務(wù)服務(wù)與開放的技術(shù)平臺也正在推動支付寶的業(yè)務(wù)與技術(shù)架構(gòu)向前發(fā)展,對構(gòu)建更大規(guī)模的分布式系統(tǒng)、更大規(guī)模的并行研發(fā)模式都帶來了積極而深遠(yuǎn)的影響。
InfoQ中文站:我們知道,支付寶的架構(gòu)平臺中采用了不少開源系統(tǒng),為何作此選擇?
程立:除了支付寶與阿里巴巴集團(tuán)自主研發(fā)的很多基礎(chǔ)系統(tǒng)與開發(fā)框架、以及一些商業(yè)系統(tǒng)之外,支付寶也使用了很多優(yōu)秀的開源軟件。具有蓬勃的生命力的開源軟件對支付寶的技術(shù)體系是一個很重要的補(bǔ)充。
在某些領(lǐng)域,一些開源軟件幾乎已經(jīng)是事實(shí)的標(biāo)準(zhǔn)了,它們的高質(zhì)量也是經(jīng)過社區(qū)的嚴(yán)格考驗(yàn)的,比如Spring和它的POJO編程模型。通過使用這些開源軟件,不但讓系統(tǒng)可以在開始階段就站在一個比較高的起點(diǎn)上,而且對于加入團(tuán)隊(duì)的新同事,一開始就可以在一個相對熟悉的環(huán)境下工作。
在另一些尚未形成標(biāo)準(zhǔn)的領(lǐng)域,在產(chǎn)品選型階段,我們一般會在開源系統(tǒng)與商業(yè)產(chǎn)品間進(jìn)行細(xì)致地選型,必須能夠滿足業(yè)務(wù)所要求的主要功能特性與關(guān)鍵質(zhì)量要求。在同樣能夠滿足主要功能特性與關(guān)鍵質(zhì)量要求的前提下,誰具有良好的可擴(kuò)展性,誰更簡單,誰具有長期發(fā)展的生命力,誰有好的服務(wù)支持,都是最后做出選擇的重要因素。其中,可擴(kuò)展性往往是一個選擇的關(guān)鍵因素。基于社區(qū)集體貢獻(xiàn)模式的開源軟件在可擴(kuò)展性方面往往做得很好。當(dāng)業(yè)務(wù)發(fā)展到一定階段,在技術(shù)上一定會有大量個性化的需求,所選擇的系統(tǒng)必須能夠支持快速滿足這些需求。開放的源代碼也使我們在問題響應(yīng)時,具有更大的主動性。隨著開源系統(tǒng)走向商業(yè)化運(yùn)作,在服務(wù)支持方面也開始做得更好,這些都進(jìn)一步增加了開源系統(tǒng)的競爭力。
InfoQ中文站:請談一下當(dāng)前架構(gòu)師所面臨的挑戰(zhàn)。
程立:“瞻前”、“顧后” ――這是我現(xiàn)在體會到的最大挑戰(zhàn)。
先談?wù)?#8220;瞻前”。當(dāng)業(yè)務(wù)個性不明顯、業(yè)務(wù)規(guī)模也不大時,架構(gòu)師還是有很多容易模仿的定式與先例的。但當(dāng)業(yè)務(wù)的個性與規(guī)模到達(dá)一定階段時,一定會有一些別人從未遇到過的非常困難的問題需要你去解決。作為站在企業(yè)技術(shù)金字塔塔尖上的一群人,當(dāng)過去的經(jīng)驗(yàn)用不上,搜索引擎也不能向你提供任何有用的答案,只有獨(dú)立去思考,去做出重大決定時,如果沒有充分的準(zhǔn)備,對企業(yè)對個人都是巨大的風(fēng)險。這需要架構(gòu)師建立未雨綢繆的意識,不斷推演未來可能的變化并思索應(yīng)對之策,持續(xù)而有方向地積累知識、發(fā)展能力,建立廣泛的技術(shù)交流圈子,并且“顧后”。
再談?wù)?#8220;顧后”。架構(gòu)師的另一個重要的職責(zé)是發(fā)掘團(tuán)隊(duì)中的好苗子,幫助他們,使他們趕上并超越自己。無論這一點(diǎn)是否寫入你的KPI,這樣做都是必須的。站在架構(gòu)師的立場看,架構(gòu)必須有一個好的技術(shù)梯隊(duì)一層層傳遞下去,才能夠有效、持續(xù)地貫徹執(zhí)行,如果只是架構(gòu)師們沖在前面,背后空了一大片,架構(gòu)永遠(yuǎn)只能停留在藍(lán)圖上。站在企業(yè)的立場看,企業(yè)真正的技術(shù)實(shí)力,不在于已經(jīng)有怎樣的系統(tǒng)或者平臺,而在于是否有一個強(qiáng)大而有生命力的技術(shù)團(tuán)隊(duì),通過快速復(fù)制架構(gòu)師的技術(shù)與經(jīng)驗(yàn),可以幫助發(fā)展并壯大這樣的團(tuán)隊(duì),而企業(yè)整體技術(shù)實(shí)力的提升也促進(jìn)了架構(gòu)師提升。
程立,支付寶(中國)網(wǎng)絡(luò)技術(shù)有限公司。2004年開始參與淘寶網(wǎng)與支付寶系統(tǒng)的建設(shè),2005年起進(jìn)入支付寶,一直從事于互聯(lián)網(wǎng)電子支付系統(tǒng)的研發(fā)工作。現(xiàn)任支付寶首席架構(gòu)師,專注于電子支付系統(tǒng)的分布式服務(wù)架構(gòu)與開放架構(gòu)。
注:支付寶數(shù)據(jù)架構(gòu)師馮大輝,InfoQ中文站編輯郭曉剛、賴翥翔和劉申對本文亦有貢獻(xiàn)
相關(guān)活動:7月26日QClub杭州站──程立與您分享“當(dāng)SOA遭遇現(xiàn)實(shí)”的心得