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