ArchSummit 2012第二天實(shí)錄
原創(chuàng)以下為2012年全球架構(gòu)師峰會(huì)ArchSummit第二天早上的文字實(shí)錄。
【主持人】大家早上好!我叫鄭柯,今天上午有三個(gè)主題演講:
第一,Pinterest的架構(gòu)衍變過(guò)程。
第二,網(wǎng)絡(luò)架構(gòu)疑難雜癥解析。
第三,郁悶的架構(gòu)師。
第一,Pinterest是繼Facebook之后成長(zhǎng)最快的社交平臺(tái),兩位講師Marty Weiner、Evrhet Milam都是Pinterest的工程師,在Pinterest整個(gè)架構(gòu)里面起到很大的作用,有相應(yīng)的體驗(yàn)教訓(xùn)分享,跟大家分享現(xiàn)在遇到的問(wèn)題以及未來(lái)的規(guī)劃。
第二,由ChinaNetCloud創(chuàng)始人兼CEO、CTO,Steve Mushero帶來(lái)的疑難雜癥解析?,F(xiàn)在中國(guó)網(wǎng)絡(luò)環(huán)境在硬件基礎(chǔ)設(shè)施層面上某些方面可能是退步了,Steve Mushero給我們講一講有哪些問(wèn)題可以解決,做好不同的規(guī)劃。包括不同的地區(qū)怎么做、不同行業(yè)的特點(diǎn)需求不一樣、單線多線的接入也是談到的東西。還有怎么利用國(guó)外的服務(wù)做國(guó)內(nèi)的網(wǎng)站。
第三,Simon Brown是獨(dú)立的軟件工程師,創(chuàng)了Coding the Architecture,標(biāo)題是郁悶的架構(gòu)師,更多從思維方式的角度講,作為一個(gè)架構(gòu)師是怎樣的要求或者應(yīng)該怎么思考問(wèn)題。他的要點(diǎn),架構(gòu)師需不需要敏捷起來(lái)呢?浮現(xiàn)式設(shè)計(jì)的真正意義是什么?做軟件有什么意義?這些意義對(duì)世界賴講會(huì)怎樣?
今天下午有三場(chǎng)專題,第一個(gè)是海量數(shù)據(jù)之快準(zhǔn)狠,主持人友友天宇COO張矩,接下來(lái)由張矩來(lái)跟大家介紹!
【張矩】大概在一個(gè)月以前我看到了一個(gè)非常震驚的地圖,最近160年以來(lái)所有地震分布的圖,用點(diǎn)的顏色和大小表示地震的強(qiáng)度以及造成的破壞的程度。當(dāng)這張地圖呈現(xiàn)在你面前的時(shí)候,你會(huì)非常清晰地看得出來(lái),地震的分布和地球地塊的形狀有非常高的吻合程度,毋庸置疑證明了絕大多數(shù)地震的發(fā)生由地殼運(yùn)動(dòng)沖撞導(dǎo)致的。有時(shí)候有很多的規(guī)律和研究的成果,通過(guò)數(shù)據(jù)的量很清晰的呈現(xiàn)出來(lái)。
大數(shù)據(jù)的課題大家不陌生,而且聽(tīng)說(shuō)過(guò)很多次,大數(shù)據(jù)從數(shù)據(jù)產(chǎn)生的量變到質(zhì)變,給大家?guī)?lái)嶄新的問(wèn)題。計(jì)算機(jī)科學(xué)在大數(shù)據(jù)量成長(zhǎng)到一定程度后變成一個(gè)全新的領(lǐng)域。
今天下午請(qǐng)到了業(yè)內(nèi)非常前沿的四位從業(yè)者為大家介紹關(guān)于大數(shù)據(jù)存儲(chǔ)處理上嶄新的思路,相信會(huì)給大家?guī)?lái)很多的驚喜。
我覺(jué)得大數(shù)據(jù)這件事,可能在一定程度上是技術(shù)上的挑戰(zhàn),我更希望看到、更相信大數(shù)據(jù)的發(fā)展為各個(gè)行業(yè)打開(kāi)一扇更高更多的可能性。相信在座的很多都是大數(shù)據(jù)從業(yè)者,堅(jiān)信我們的工作有一天對(duì)整個(gè)社會(huì)有非常大的推動(dòng)作用。有可能利用數(shù)據(jù)的量發(fā)現(xiàn)現(xiàn)在不能治愈疾病的治愈辦法,有可能更有效地避免經(jīng)濟(jì)危機(jī)或者戰(zhàn)爭(zhēng)。或者說(shuō)沒(méi)有找到更好的辦法規(guī)劃星球的發(fā)展。正是這些可能性是促使大家在這么炎熱的季節(jié)跑到這么炎熱的城市參加這么熱門的討論。
下面我介紹一下今天下午四位演講者的情況。
第一,來(lái)自EMC研究院的陶雋,介紹MapReduce在數(shù)據(jù)處理的應(yīng)用,深度分析如何處理好數(shù)據(jù)的使用。
第二,雅虎研究院的資深架構(gòu)師韓軼平帶來(lái)的基于Hadoop的海量數(shù)據(jù)工作流平臺(tái)。
第三個(gè)是Linkedin高級(jí)工程師Lei Gao帶來(lái)的Linkedin的數(shù)據(jù)處理架構(gòu),從數(shù)據(jù)總線到消息系統(tǒng)到數(shù)據(jù)的剖析。
最后壓軸的是Pinterest著名社交網(wǎng)站中的工程師,Marty Weiner、Evrhet Milam,他們介紹對(duì)于數(shù)據(jù)庫(kù)的使用,以及大數(shù)據(jù)下分片如何做到的。
希望大家踴躍參加,下午見(jiàn)!
【主持人】今天下午第二個(gè)專題是移動(dòng)互聯(lián)網(wǎng)的案例分享,主持人是騰訊手機(jī)游覽器后臺(tái)開(kāi)發(fā)組總監(jiān)張凱。
【張凱】各位嘉賓、各位朋友、各位行業(yè)內(nèi)的技術(shù)牛牛們,大家早上好!剛才上一個(gè)主持人說(shuō)了,非常炎熱的城市,歡迎大家到深圳來(lái),我是騰訊無(wú)線游覽器傳輸?shù)募夹g(shù)總監(jiān)張凱,加入騰訊已經(jīng)有8年時(shí)間了,不光看到了移動(dòng)互聯(lián)網(wǎng)從2G到3G,甚至到3.5G、4G的發(fā)展,同樣也看到了在整個(gè)行業(yè)的發(fā)展過(guò)程中,全國(guó)各地很多的團(tuán)隊(duì)、很多的架構(gòu)師們一起在風(fēng)生水起的行業(yè)里拼搏。如果傳統(tǒng)行業(yè)30年河?xùn)|、30年河西,在移動(dòng)互聯(lián)網(wǎng)行業(yè)就是三年河?xùn)|、三年河西。這幾年看到了安卓的新生、蘋果的崛起,也看到了諾基亞的沒(méi)落。在這樣一個(gè)行業(yè)里會(huì)有非常多的機(jī)會(huì)和挑戰(zhàn)。記得09年1月份3G牌照正式發(fā)放。從09年4月份,IT時(shí)代周刊有一句話說(shuō)下一座金礦是移動(dòng)互聯(lián)網(wǎng)。09年到現(xiàn)在3年半的時(shí)間,3年半的時(shí)間行業(yè)發(fā)生了哪些變化,有哪些歷程。今天非常有幸邀請(qǐng)到四位架構(gòu)師做分享:
第一個(gè)是大眾點(diǎn)評(píng)網(wǎng)應(yīng)用架構(gòu)師屠毅敏。
第二位是由我來(lái)給大家分享一下手機(jī)QQ瀏覽器X架構(gòu)的歷程和演變。
第三位是網(wǎng)易杭州研究院的高級(jí)工程師李武先生分享網(wǎng)易移動(dòng)應(yīng)用的架構(gòu)。
最后,由東軟集團(tuán)UniSDP首席架構(gòu)師、產(chǎn)品運(yùn)營(yíng)經(jīng)理孫廣宇為大家分享HTML5的技術(shù)以及基于HTML5構(gòu)建統(tǒng)一的智能設(shè)備應(yīng)用平臺(tái)。
我們?cè)谝惶?hào)分會(huì)場(chǎng)不見(jiàn)不散。
【主持人】第三個(gè)專題是系統(tǒng)安全設(shè)計(jì)面面觀,主持人是殷鈞鈞。
【殷鈞鈞】架構(gòu)師們?cè)谧黾軜?gòu)權(quán)取舍的時(shí)候,安全性是一個(gè)非常讓人感到頭疼的問(wèn)題,非常不好的量化,現(xiàn)實(shí)中變化非常多,種類非常多,新技術(shù)層出不窮,傳統(tǒng)的管理方式很難做一個(gè)量化。今天下午邀請(qǐng)到兩位非常資深的兩位安全架構(gòu)師以及非常資深的黑客。一方面如何滿足系統(tǒng)的要求,另一方面如何更好的面對(duì)安全威脅,這兩個(gè)角度做一些分享。下面介紹一下今天下午的演講嘉賓和主題。
第一位,Coding the Architecture的創(chuàng)始人Simon Brown,演講的題目是“如何設(shè)計(jì)安全的架構(gòu)”,分享過(guò)往的架構(gòu)里面會(huì)有怎樣的安全考量,面對(duì)不同的場(chǎng)景怎么做安全威脅的分析,更好實(shí)現(xiàn)安全的架構(gòu)。
第二位,來(lái)自于支付寶團(tuán)隊(duì)的苗霖,支付寶要求非常高的線上系統(tǒng),大家非常好奇如何在設(shè)計(jì)里面更好保障架構(gòu)權(quán)衡和演變過(guò)程中確保安全性。今天下午跟大家分享支付寶的安全交易架構(gòu)。
第三位,非常有藝術(shù)家氣質(zhì)的方小頓,是黑客組織80sec創(chuàng)始人、wooyun漏洞報(bào)告平臺(tái)創(chuàng)始人,江湖人稱劍心,今天下午分享的淺談甲方安全建構(gòu)建設(shè)之道,分享在某著名的互聯(lián)網(wǎng)企業(yè)如何推行他的架構(gòu)措施的血和淚,有非常多的干貨和亮點(diǎn)。
第四位,方興,是南京瀚海源CEO和創(chuàng)始人,方總的名字年輕一點(diǎn)不太熟悉,往回推個(gè)N年在黑客里面鼎鼎大名。方總是獨(dú)立發(fā)現(xiàn)高危級(jí)別發(fā)現(xiàn)漏洞最多的一個(gè),微軟聘去當(dāng)顧問(wèn),現(xiàn)在為很多一線的互聯(lián)網(wǎng)廠商提供安全資源和服務(wù)。今天下午的演講是“基于安全漏洞的攻防對(duì)抗技術(shù)”,講很多現(xiàn)實(shí)的東西,出現(xiàn)問(wèn)題的案例,同時(shí)談到了現(xiàn)在最流行的威脅攻擊的方式。
更多干貨、更多分享,盡在安全架構(gòu)專場(chǎng)!安全架構(gòu)專場(chǎng),喜歡您來(lái),喜歡您再來(lái)!
【主持人】10月份的QCon已經(jīng)組織了,邀請(qǐng)了谷歌、Facebook工程師過(guò)來(lái),歡迎關(guān)注,今天上午首先帶來(lái)的演講是Pinterest工程師Marty Weiner和Evrhet Milam,大家歡迎!
#p#
【Marty Weiner】大家好!我是Marty Weiner,Pinterest一年之內(nèi)游覽量達(dá)到非常驚人的數(shù)字,去年是比較年輕的公司,快速的增長(zhǎng),不知道用什么樣的技術(shù)講講戰(zhàn)略故事,有很多的選擇。Pinterest網(wǎng)上的貼圖板讓我們組織分享帶來(lái)靈感的圖片,現(xiàn)在看到的是我自己Pinterest的主頁(yè),有一些畫板,可以貼圖。結(jié)合了圖形和照片,非常特別,不管在什么地方找到圖形,比如說(shuō)一個(gè)產(chǎn)品很喜歡,追溯到哪里買的。為什么用戶覺(jué)得很特別,可以關(guān)注他們的畫板,關(guān)注的時(shí)候如果貼一張圖,也可以獲得這張圖。他們貼圖我們也會(huì)收到。
如果進(jìn)入數(shù)據(jù)庫(kù)的模式,現(xiàn)在看到的是數(shù)據(jù)的結(jié)構(gòu),有一個(gè)用戶有畫板,可以貼圖,其他的用戶自己有自己的畫板,另外還有其他一些關(guān)系的方法,可以轉(zhuǎn)貼,表示喜歡他的貼圖。2011年5月剛剛推出這個(gè)網(wǎng)站,很多意義上來(lái)說(shuō),可以看到我們做了一些設(shè)計(jì)的功能,那個(gè)時(shí)候找RockSpace來(lái)托管,一個(gè)工程師就夠了,網(wǎng)站開(kāi)發(fā)我們也不知道開(kāi)發(fā)到哪個(gè)階段,保持靈活,不大量投資。2001年1月,我們的創(chuàng)始人說(shuō)現(xiàn)在還是處于一個(gè)隱身模式,大家沒(méi)有聽(tīng)過(guò)我們的名字。這時(shí)稍稍有一點(diǎn)知名度,我們用了Amazon,他們給我們做托管。接下來(lái)的的9個(gè)月已經(jīng)忘了睡覺(jué)是什么滋味了,加強(qiáng)建設(shè),網(wǎng)站發(fā)展太快,每天翻倍,每天有各種失誤,我們要保障很多問(wèn)題,很快問(wèn)題一發(fā)不可收拾。
我們不想看這里有多少的東西,可以感受一下這里有多少的技術(shù)、多少?gòu)?fù)雜性,把PPT所示的技術(shù)結(jié)合在一起,都有自己微妙的工作方式,每天帶來(lái)各種頭疼、各種麻煩,有三名工程師處理惡夢(mèng),因?yàn)閿U(kuò)張?zhí)?,肯定有?wèn)題。我們第一個(gè)經(jīng)驗(yàn)教訓(xùn)是這個(gè)系統(tǒng)會(huì)有問(wèn)題的,所以盡量保持簡(jiǎn)單。
對(duì)未來(lái)的架構(gòu)來(lái)說(shuō),一定要保障我們的架構(gòu),我們不想用一些太復(fù)雜的技術(shù)和方法,希望能夠讓過(guò)程變得簡(jiǎn)單,比較容易去修改或者維修。
2012年的時(shí)候,我們架構(gòu)不斷的演變,這時(shí)基本上已經(jīng)成形了,大量的簡(jiǎn)化,用了66個(gè)MySQL的數(shù)據(jù)庫(kù),這時(shí)已經(jīng)成形了,從這個(gè)模式上進(jìn)行增長(zhǎng),不會(huì)有太多的問(wèn)題。我們有MySQL和Memcache,有6名工程師,也做了分片的服務(wù)器。幾個(gè)月之后,比較接近今天的現(xiàn)狀,我們?cè)黾恿艘恍┰O(shè)備,但是目前來(lái)說(shuō)架構(gòu)已經(jīng)從1月份以來(lái)成型固定了,有25名工程師。重點(diǎn)是擴(kuò)大我們的團(tuán)隊(duì)。
Amazon很好用,有很多周邊有很多工具幫助管理公司,不想管理也可以做緩存,幫助你做數(shù)據(jù)庫(kù)管理。也許在以后我們也可以讓Amazon來(lái)幫我們做周邊的管理。更重要的一點(diǎn)是如果要再做一此第三個(gè)原因用Amazon,因?yàn)閹酌腌娭畠?nèi)生成一個(gè)實(shí)力,發(fā)展很快不知道用什么東西,5秒鐘形成一個(gè)新的實(shí)力。缺點(diǎn)是選擇比較少,可能就幾個(gè)設(shè)備,就這些選擇,比如說(shuō)26G,那時(shí)買不了X60或者更快的選擇。但是選擇不多也是好處,不需要太多的動(dòng)心,不需要挑亂眼。
MySQL也是系統(tǒng)的基石,一致的為我們帶來(lái)很好的表現(xiàn),26年的歷史了,非常成熟,非常多人知道,很喜歡,工程師有自己的經(jīng)驗(yàn),我自己也做MySQL,我也經(jīng)常使用也做管理,很多人是這方面的專家,我也為MySQL編過(guò)碼,幾乎很少有大量數(shù)據(jù)缺失,這是硬件問(wèn)題不是軟件問(wèn)題,反應(yīng)時(shí)間可以隨著請(qǐng)求率進(jìn)行增長(zhǎng)。有一定的技術(shù)到一定的量響應(yīng)時(shí)間是掉下來(lái)了。但是MySQL可以隨著線性擴(kuò)張的,對(duì)明天有所預(yù)見(jiàn),而且社區(qū)非?;钴S,搜MySQL肯定有很多東西幫忙,很多公司給支持,而且MySQL是免費(fèi)的。當(dāng)然,作為一個(gè)小的網(wǎng)頁(yè)公司,當(dāng)初的資金有限,用MySQL資金是一個(gè)解決條件。
Memcache非常成熟,功能表現(xiàn)非常好,而且很多人喜歡,也知道怎么用,很少有失效和崩潰的時(shí)候,而且失效模式非常少。因?yàn)楸容^簡(jiǎn)單,沒(méi)有什么可以出錯(cuò)的地方,還有一點(diǎn)非常好,免費(fèi),免費(fèi)誰(shuí)不喜歡呢?
Redis是新的公司,有自己的一些小玩意,有自己的復(fù)制和持續(xù)性,而且結(jié)構(gòu)非常好,想進(jìn)行分類、進(jìn)行散列都有這個(gè)功能。很多功能都可以用得上,而且這還是比較新的公司,但是很多人都非常喜歡它。我在社區(qū)里面聽(tīng)過(guò)很多人表示好評(píng),也進(jìn)行大量的使用。我們聽(tīng)了好評(píng)聲去使用,表現(xiàn)非常好,有一定的失效模式,比MySQL稍微多一點(diǎn),但至少還是可以的。另外,還是免費(fèi)。
到底用集群還是分片,我們肯定要調(diào)整架構(gòu)的,網(wǎng)站發(fā)展有太多的技術(shù)可以進(jìn)行全自動(dòng)化的調(diào)整。很多人說(shuō)買了這個(gè)設(shè)備可以自動(dòng)的進(jìn)行分配,如果這個(gè)盒子壞了,另外一個(gè)盒子能夠備用。我們到底是不是真的想要集群呢?后來(lái)用分片,發(fā)現(xiàn)分片手動(dòng)性強(qiáng)一點(diǎn),集群和分片是非常多的選擇,對(duì)于集群來(lái)說(shuō),是自動(dòng)化的數(shù)據(jù),數(shù)據(jù)可以遷移的,可以重新分配裝載容量。另外一端是分片,是用手工進(jìn)行數(shù)據(jù)的。換句話說(shuō),必須要用編碼,一定不是自動(dòng)化的,這是一個(gè)決定。數(shù)據(jù)進(jìn)入某個(gè)分片以后,基本上不再移動(dòng)了。同時(shí)數(shù)據(jù)進(jìn)行分解,數(shù)據(jù)一半放這個(gè)片,一半放那個(gè)片,每一片有更多的容量分配數(shù)據(jù)。而且結(jié)點(diǎn)之間不了解,不會(huì)互相溝通的。
所以,用集群有什么樣的好處,我列出了一些例子,比如說(shuō)像集群的技術(shù)。比如說(shuō)Cassandra、MemBase等可以自動(dòng)擴(kuò)展,非常容易設(shè)置,5分鐘就可以設(shè)置了??梢钥臻g分配來(lái),數(shù)據(jù)有非常高的可用性,均衡而且沒(méi)有單一的失效點(diǎn)。
如果一切美夢(mèng)成真的話,什么事都不用干了,但是會(huì)有什么事出錯(cuò)呢?如果什么都好的話為什么不用集群呢?做了幾年之后還是非常復(fù)雜的,而且比較復(fù)雜、歷史也不長(zhǎng),社區(qū)支持也比較少。沒(méi)有太多人推動(dòng)這個(gè)技術(shù),尋找?guī)椭鐓^(qū)對(duì)你的幫助非常有限,現(xiàn)在有這個(gè)知識(shí)的工程師為數(shù)不多。比如說(shuō)我了解的Clustering的工程師不多。
有時(shí)候會(huì)覺(jué)得非常害怕,原來(lái)從0.8到0.3有一點(diǎn)步驟要做,做了又不一定會(huì)成功,運(yùn)氣好做好,運(yùn)氣不好突然會(huì)失效,我覺(jué)得比較不幸的是影響到我們好幾次的。首先看我們集群,所有東西都是綠色的,大家很開(kāi)心,但是突然服務(wù)器不行了,一般來(lái)說(shuō)找一個(gè)替代的服務(wù)器換上去,把所有的東西分到新的服務(wù)器。出現(xiàn)什么問(wèn)題呢?看到里面的服務(wù)器每個(gè)都使用同樣的算法來(lái)計(jì)算,之前也是前期溝通的,希望服務(wù)器有問(wèn)題和漏洞的話,所有的服務(wù)器都有問(wèn)題,項(xiàng)目溝通的漏洞也會(huì)轉(zhuǎn)移到其他的服務(wù)器上。
你寫的一條比較復(fù)雜的代碼影響到所有的節(jié)點(diǎn),出現(xiàn)的問(wèn)題首先包括數(shù)據(jù)在均衡會(huì)失效。很多個(gè)盒子,把東西分到不同的盒子里,發(fā)現(xiàn)鏡頭80%停下來(lái),只能取消。另外,所有的節(jié)點(diǎn)都有數(shù)據(jù)的損壞,托管層有漏洞的話會(huì)影響下面的成績(jī)。每個(gè)漏洞導(dǎo)致每個(gè)服務(wù)器出現(xiàn)數(shù)據(jù)損壞。另外,無(wú)法有效治愈的錯(cuò)誤的平衡。不同的服務(wù)器加了90%的數(shù)據(jù),剩下1%不到,怎么辦呢?可能需要一個(gè)技術(shù)手動(dòng)進(jìn)行分布。另外數(shù)據(jù)授權(quán)的失靈,其中有一個(gè)盒子可以說(shuō)是主本,做一個(gè)副本,大概做了80%的時(shí)候副本才能決定到底數(shù)據(jù)從哪來(lái)的。副本拿80%的時(shí)候,其他覺(jué)得80%的副本是主服務(wù)器,把信息再拉進(jìn)來(lái),導(dǎo)致主服務(wù)器出現(xiàn)偏移,從而無(wú)法進(jìn)行正確的傳輸。這些技術(shù)發(fā)展的時(shí)間比較短,現(xiàn)在有些問(wèn)題讓人比較害怕。為什么要做分片的,分片是手動(dòng)操作的,把數(shù)據(jù)庫(kù)分開(kāi)來(lái)增加容量,可以在空間上進(jìn)行分布,高可用性進(jìn)行負(fù)載均衡。我們放置數(shù)據(jù)的算法非常簡(jiǎn)單,寫下來(lái)之后有一天在進(jìn)行測(cè)試,非常小的算法。我們用很簡(jiǎn)單的機(jī)制來(lái)生成ID,下面有請(qǐng)我的搭檔Evrhet Milam講一講什么時(shí)候該做分片,怎么做分片。
【Evrhet Milam】首先,要做分片的話,板式設(shè)計(jì)、模式設(shè)計(jì)更加困難,要放對(duì)地方才行,等穩(wěn)定了才能分辨,等太久,轉(zhuǎn)移數(shù)據(jù)更困難。所以要選擇一個(gè)合適的時(shí)機(jī),把你的數(shù)據(jù)從一個(gè)模式轉(zhuǎn)到另外一個(gè)模式。另外,在做分片的時(shí)候,設(shè)計(jì)靠得住的,就像我們有的用戶以及圖板、貼圖等。這就是我們網(wǎng)站的設(shè)計(jì),網(wǎng)站設(shè)計(jì)先確定下來(lái),還要確定后端的架構(gòu)怎么樣。
下面所有的連接和復(fù)雜的查詢要取消掉?,F(xiàn)在很多連接非常麻煩,分片是獨(dú)立開(kāi)的數(shù)據(jù)庫(kù),加上復(fù)雜的查詢不行。加上緩存會(huì)好很多。讓分片發(fā)揮系統(tǒng)的功效。我們的數(shù)據(jù)庫(kù)、系統(tǒng)中有很多不同的貼圖,貼圖放到數(shù)據(jù)庫(kù)里面,讓不同的分片發(fā)揮功效。另外,如果你的網(wǎng)站不斷發(fā)展、不斷增長(zhǎng)的話,最好用分片的技術(shù)。有些人網(wǎng)站到了一定技術(shù),不用分片,如果量不斷增加,用分片比較好。
這是不斷遷移不斷發(fā)展的過(guò)程。
先是有一個(gè)服務(wù)器,有外件、有很多的連接,比如說(shuō)有一個(gè)用戶通過(guò)連接和貼圖連接在一起,把數(shù)據(jù)進(jìn)行非正規(guī)化做得更快一點(diǎn)。很多數(shù)據(jù)重復(fù)的,我們也做了很多的高速緩存。我們還有讀取的倉(cāng)庫(kù),再把數(shù)據(jù)分片,分成不同功能范圍的分片。比如說(shuō)有一個(gè)分片里面專門放用戶信息,有些是專門放貼圖的,還有專門放客戶用戶的評(píng)論的。
我們當(dāng)時(shí)比較早的采用分片來(lái)應(yīng)對(duì)我們的數(shù)據(jù),如果做得稍微遲一點(diǎn)的話,分片就比較困難了,畢竟有很多外件牽涉到其中。我們做了最后一個(gè)跨越,通過(guò)ID進(jìn)行數(shù)據(jù)庫(kù)的分片。不同的數(shù)據(jù)庫(kù)能夠更好以一種水平的,而非垂直的方式把數(shù)據(jù)進(jìn)行分類,放到不同的分片里。
如果做分片,會(huì)發(fā)現(xiàn)原來(lái)有這么多的連接必須要拿走,不能放在里面去了。當(dāng)然,做分片無(wú)法實(shí)現(xiàn)數(shù)據(jù)交易。不用分片方式可以實(shí)現(xiàn)其中的交易,現(xiàn)在做分片不可能了。另外,確保一些獨(dú)特的約束,比如說(shuō)有一些特殊的數(shù)據(jù)庫(kù),用戶的信息、電子郵件等。必須要有特別的系統(tǒng)確保不同的分片、不同的運(yùn)輸。更換擺設(shè)的話要很長(zhǎng)時(shí)間,要做非常多的工作才行。
另外,報(bào)告。原來(lái)選擇一個(gè)搜索把數(shù)據(jù)找出來(lái),現(xiàn)在有上千個(gè)數(shù)據(jù)庫(kù),寫一些腳本反復(fù)執(zhí)行找到查詢的結(jié)果。下面看一看我們?cè)趺捶制摹?/p>
現(xiàn)在看到的這張圖,所有的數(shù)據(jù)庫(kù)都放在這里,我們一開(kāi)始有八個(gè)物理服務(wù),每個(gè)上面都有512個(gè)數(shù)據(jù)庫(kù),都是DB0001和00513、3072數(shù)據(jù)量都一樣,里面ID分開(kāi)不同的數(shù)據(jù),包括用戶數(shù)據(jù)、貼圖的數(shù)據(jù)。另外,多主庫(kù)的應(yīng)用。每一個(gè)服務(wù)器都有它的主庫(kù),有很高的可用性,非常的強(qiáng)大。不同的會(huì)崩潰,如果有問(wèn)題的話,把里面導(dǎo)出來(lái)傳輸其他的服務(wù)器就可以了。
我們有八個(gè)服務(wù)器,但是服務(wù)器上面有太多的用戶信息了,數(shù)據(jù)負(fù)載太大怎么辦?有512個(gè)數(shù)據(jù)庫(kù),可以把數(shù)據(jù)分開(kāi)放到數(shù)據(jù)庫(kù)里面。比如說(shuō)DB0001放到其他的服務(wù)器上。我們做同樣的工作,分開(kāi)來(lái)放進(jìn)去就可以了。
下面看怎么改變ID的,對(duì)我們ID的分片非常重要的,我們的對(duì)象有獨(dú)特的ID,64位的,根據(jù)不同的類型進(jìn)行分片、進(jìn)行分離。比如說(shuō)剛才講的數(shù)據(jù)庫(kù)有不同的編號(hào),有它的類別,要么是圖板、要么貼圖、要么評(píng)論、要么用戶。是不同類型,類型也是能夠給他專業(yè)性??磾?shù)據(jù)看有沒(méi)有把東西放混了,把用戶的數(shù)據(jù)放到評(píng)論的數(shù)據(jù)里面了。
分片的ID到底放在哪個(gè)數(shù)據(jù)庫(kù)里,現(xiàn)在用的表里面我們屬于哪個(gè)位置的。本地ID看這個(gè)表里面具體的放置信息有什么作用,是關(guān)于評(píng)論還是用戶信息的。我們看看有簡(jiǎn)單的映射,整個(gè)管理數(shù)據(jù)庫(kù),還有反向的圖。我們的系統(tǒng)代碼可以有效的找到相關(guān)的過(guò)濾信息。如果想找用戶信息,就看一看到底分片的ID在哪里。找到后在分片的ID里面具體找到1057,再在1057里面找到具體需要的類別,找用戶。這樣的分片使到我們工作非常的簡(jiǎn)單。從這樣ID的結(jié)構(gòu),新的用戶就是隨機(jī)分布在不同的分片里面,希望能夠根據(jù)不同類型的信息放到不同的分片里面。至少在本地你把用戶需要的東西和需求連接在一起會(huì)比較簡(jiǎn)單。
我們可以使用自動(dòng)增量放在本地ID上,系統(tǒng)里面每個(gè)分片就是根據(jù)ID在里面存儲(chǔ)信息的具體情況。如果建立好ID能有6萬(wàn)個(gè)不同的分片?,F(xiàn)在只用了4096個(gè)。所以現(xiàn)在還有很多的ID空間可以使用,而且可以能夠以水平的方式進(jìn)行不斷擴(kuò)張。
在數(shù)據(jù)庫(kù)中,有一些比較簡(jiǎn)單的模式或者板式,每個(gè)角色都有它的ID,通過(guò)映射對(duì)應(yīng)到圖表里面,進(jìn)行序列化。有索引表和映射表,用戶喜歡哪些圖板,建了哪些圖。就像傳統(tǒng)的系統(tǒng)一樣,很快找到表的有效信息。重點(diǎn)是這些映射從一個(gè)完整的ID到另一個(gè)ID產(chǎn)生映射。對(duì)于系統(tǒng)來(lái)說(shuō),喜歡某個(gè)貼圖或者喜歡某一個(gè)用戶的貼圖,整個(gè)ID都是完整的,把所有的連接在一起,當(dāng)然時(shí)間戳也非常有價(jià)值,分類的時(shí)候確保ID是獨(dú)一無(wú)二的。我們的查詢都是組件查找和索引的查找。如果數(shù)據(jù)庫(kù)過(guò)于擁擠可以進(jìn)行分移,但是不會(huì)移動(dòng)分片上的數(shù)據(jù)。所有的分片上都會(huì)裝在所有的映射表。這樣的話不需要進(jìn)行范式的更改。因?yàn)椴恍枰獡?dān)心有任何的改變,比如說(shuō)增加一些新的索引的話,就可以使用索引來(lái)形成新的映射表。所有的分片上都有映射表。比如說(shuō)我們網(wǎng)站是怎樣運(yùn)作的,看某個(gè)用戶的主頁(yè),想提取用戶的數(shù)據(jù),渲染用戶主頁(yè),抽取畫板和貼圖,從此來(lái)渲染。很多一兩次查找進(jìn)行搜索就可以了。而且因?yàn)檫@些非常容易,可以在本地進(jìn)行連接。很多工作是重復(fù)性的,可以進(jìn)行大量高速緩存。一些很簡(jiǎn)單的MySQL的操作,在高速緩存中提取就可以了。而且我們還可以去抵消一些操作。
如果是提取150個(gè)貼圖,可以根據(jù)這些操作取消一些對(duì)沖和抵消的操作。另外,還要編寫腳本,這些數(shù)據(jù)需要進(jìn)行清理,數(shù)據(jù)庫(kù)設(shè)置的時(shí)候有不同的格式,我們需要把這些不同的格式進(jìn)行整理才能放入分片里面。我們用的Pyres,這個(gè)工具比較容易,可以簡(jiǎn)單進(jìn)行數(shù)據(jù)調(diào)整。我們有5億的貼圖,16億的關(guān)注者,我們做一些腳本,不斷測(cè)試,把這么多的數(shù)據(jù)進(jìn)行分片。另外,考慮數(shù)據(jù)怎么產(chǎn)生,用簡(jiǎn)單的腳本來(lái)進(jìn)行所有分片的過(guò)濾。
從這點(diǎn)往后,MySQL將會(huì)成為主流,而且也會(huì)成為正確的選擇,集群會(huì)慢慢成熟。目前來(lái)說(shuō),這個(gè)技術(shù)還是分配在幾個(gè)不同的公司當(dāng)中,我們的公司比較關(guān)注于自動(dòng)的分片。MySQL上面進(jìn)行自動(dòng)的分片,我們覺(jué)得這個(gè)是可行的。另外,集群將在以后會(huì)大有作為,但是不是現(xiàn)在?,F(xiàn)在集群技術(shù)目前來(lái)說(shuō),對(duì)數(shù)據(jù)來(lái)說(shuō)還是有各種問(wèn)題的,還是要等個(gè)五到十年才能硬化。原來(lái)有一個(gè)單片的系統(tǒng),我們開(kāi)始進(jìn)行分片的系統(tǒng),轉(zhuǎn)為一個(gè)基于服務(wù)的架構(gòu)。有幾個(gè)不同的原因,因?yàn)橐?guī)模不斷擴(kuò)大的時(shí)候,會(huì)有越來(lái)越多連接上限,不斷達(dá)到連接上限。還需要把所有的盒子連接在一起,連接的上限也是一個(gè)很大的問(wèn)題。比如說(shuō)100多個(gè)ATI要連上緩存的服務(wù)器,使到服務(wù)器癱瘓,而且功能要進(jìn)行隔離和分離,比如說(shuō)把某些服務(wù)進(jìn)行分區(qū)。當(dāng)然,這也是我們繼續(xù)做的方向,幫助我們清理系統(tǒng)。同時(shí),安全的隔離也是很重要的,因?yàn)榘踩院苡蟹椒āR驗(yàn)楦綦x之后有安全性了。如果在一個(gè)單片或者非常復(fù)雜的環(huán)境中很難跟蹤的,最重要在未來(lái)不斷擴(kuò)大團(tuán)隊(duì)的人數(shù),現(xiàn)在有很多的工程師,隨著用戶的增加、人力也要增加。除了提供基于服務(wù)的架構(gòu),確保架構(gòu)簡(jiǎn)單?,F(xiàn)在不斷招人,現(xiàn)在的工程師招人絕對(duì)是簡(jiǎn)單易用的,隔離開(kāi)來(lái)區(qū)別對(duì)待,這樣工程師不用面對(duì)整套的大攤子,工程師上手非常容易的。
最后一個(gè)跟大家分享的經(jīng)驗(yàn),要保持樂(lè)趣。
工作當(dāng)中有很多壓力,每天晚上熬夜加班肯定不好玩,如果網(wǎng)站運(yùn)行非常順暢,帶來(lái)大量的滿足。一定要讓工作保持樂(lè)趣,而且讓這一切能夠井井有條。
【Marty Weiner】我們5點(diǎn)10分有另外的講座,比較深入講一下怎么分片的。如果大家想了解怎么緩存、怎么分片具體的內(nèi)容,大家可以在下午來(lái)到分會(huì)場(chǎng)?,F(xiàn)在還沒(méi)有問(wèn)題?
【提問(wèn)】講個(gè)非常精彩,有幾個(gè)問(wèn)題,您可以選擇是不是回答。在設(shè)計(jì)當(dāng)中有哪些設(shè)計(jì)功能?第二個(gè)問(wèn)題,擴(kuò)展性是你現(xiàn)在容量的16倍,因?yàn)殚_(kāi)放了4000多個(gè)ID,總量6萬(wàn)多個(gè)空間,只開(kāi)放到4000多個(gè),擴(kuò)展空間有16倍,是不是要重新設(shè)計(jì)架構(gòu)呢?第三,有沒(méi)有考慮要設(shè)計(jì)自己的存儲(chǔ)架構(gòu)?會(huì)不會(huì)用一些開(kāi)源的解決方案。因?yàn)橛幸恍┚帉懘a不是特別好用,用別人編寫的代碼可能有問(wèn)題,未來(lái)會(huì)不會(huì)考慮自己的一些編程,編寫自己的。
【Marty Weiner】第一個(gè)沒(méi)太聽(tīng)清楚,先回答第二個(gè)和第三個(gè)。第二個(gè)問(wèn)題是擴(kuò)展16倍,我們有4096個(gè)分片是分布在8個(gè)數(shù)據(jù)庫(kù),也就是說(shuō),8個(gè)數(shù)據(jù)庫(kù)都可以能夠在進(jìn)行擴(kuò)張。所以,我們可以每一個(gè)數(shù)據(jù)庫(kù)都可以擴(kuò)展512倍。我們的擴(kuò)展實(shí)際上可以進(jìn)行幾千倍的擴(kuò)展性。第三個(gè)問(wèn)題,怎么編寫自己的數(shù)據(jù)庫(kù)和存儲(chǔ)的數(shù)據(jù)庫(kù),我們也在考慮這個(gè)問(wèn)題,如果一個(gè)地方出了問(wèn)題,是不是用自己的方法解決呢?首先我們要組建我們的團(tuán)隊(duì),有這樣的人力才這樣做。因?yàn)橐獙懽约旱男畔?、基礎(chǔ)設(shè)施。我們用的公司也非常好,可以把不同的日志放在不同的地方。自己考慮編寫一些編碼,或者優(yōu)化一些編碼,加入了一些結(jié)構(gòu)。第一個(gè)問(wèn)題?
【提問(wèn)】現(xiàn)在的設(shè)計(jì)當(dāng)中,會(huì)不會(huì)有新的功能進(jìn)行調(diào)整的架構(gòu)呢?如果有一些新的功能,但是現(xiàn)在架構(gòu)不支持這個(gè)功能會(huì)不會(huì)調(diào)整呢?
【Marty Weiner】我們有幾種想法,只是要增加一些緩存、增加一些功能問(wèn)題就不大了,因?yàn)榉制幸粋€(gè)好處,很靈活,我們用分片的時(shí)候也有幾個(gè)是熱點(diǎn),這時(shí)可以考慮一下剛好分到分片上,問(wèn)題得到解決。
【提問(wèn)】我們流量有大幅度的增長(zhǎng),如果有自動(dòng)的擴(kuò)展就簡(jiǎn)單了。但實(shí)際上我們用一些腳本進(jìn)行數(shù)據(jù)的遷移。很快電腦節(jié)點(diǎn)就超載了,要考慮其他的問(wèn)題。其實(shí)我們有很多的自動(dòng)擴(kuò)展,不光是數(shù)據(jù)庫(kù)。系統(tǒng)層面上有自動(dòng)擴(kuò)展的功能。如果負(fù)載增長(zhǎng)的太快,網(wǎng)站在ATI的盒子可以自動(dòng)伸縮,這是網(wǎng)站級(jí)別、系統(tǒng)級(jí)別的自動(dòng)擴(kuò)展能力。
【Evrhet Milam】數(shù)據(jù)庫(kù)還是比較穩(wěn)定一致的,兩到四個(gè)星期就要把數(shù)據(jù)庫(kù)進(jìn)行一次分割,這是比較穩(wěn)定的。對(duì)我們來(lái)說(shuō)也很容易去觀察、跟蹤。比如說(shuō)我們應(yīng)用多了,ATI多了,復(fù)雜性強(qiáng)了,我們就選擇用自己的系統(tǒng)進(jìn)行自動(dòng)的擴(kuò)展。不知道有沒(méi)有回答你的問(wèn)題。
【Marty Weiner】我們的網(wǎng)站也會(huì)做一個(gè)擴(kuò)展。
【提問(wèn)】選擇架構(gòu)不僅要看是不是免費(fèi)的,在中國(guó)選擇合適的架構(gòu),要看優(yōu)先級(jí)怎樣才行。
【Marty Weiner】免費(fèi)不是最重要的,甲骨文如果做好的話,肯定會(huì)選擇甲骨文,跟MySQL差不多,甲骨文要費(fèi)用,MySQL不用費(fèi)用,肯定用MySQL。我們選擇免費(fèi)的軟件,是因?yàn)樵谶@樣的條件下,必須要選擇在預(yù)算之內(nèi)開(kāi)源的軟件,而且發(fā)揮不錯(cuò)的效用。
【主持人】接下來(lái)用熱烈的掌聲感謝兩位工程師,休息十分鐘,十點(diǎn)帶來(lái)第二個(gè)主題演講!
#p#
【主持人】接下來(lái)是ChinaNetCloud的創(chuàng)始人Steve Mushero,為大家介紹網(wǎng)絡(luò)架構(gòu)疑難雜癥解析。
【Steve Mushero】大家上午好!我是Steve Mushero,接下來(lái)講一講互聯(lián)網(wǎng)出現(xiàn)問(wèn)題的應(yīng)對(duì)以及一些有意思的事情,互聯(lián)網(wǎng)的結(jié)構(gòu)以及與客戶打交道遇到的問(wèn)題,現(xiàn)在的工作和以前的工作,戰(zhàn)略戰(zhàn)術(shù)實(shí)踐以及怎么更好的解決問(wèn)題和吸取的教訓(xùn)。
我在上海管理ChinaNetCloud,在中國(guó)已經(jīng)待了七年了,我原來(lái)在硅谷,在系統(tǒng)基礎(chǔ)架構(gòu)設(shè)施開(kāi)發(fā)等方面有很多經(jīng)驗(yàn)。當(dāng)年我和各位一樣負(fù)責(zé)建造開(kāi)發(fā)系統(tǒng)。大家剛才聽(tīng)了Pinterest的演講,他講的內(nèi)容我舉雙手贊成,對(duì)中國(guó)客戶講是非常有用、非常不錯(cuò)的信息。換個(gè)角度來(lái)看,看整個(gè)中國(guó)互聯(lián)網(wǎng)的架構(gòu),ChinaNetCloud08年由硅谷的技術(shù)人員在上海成立,我們管理中國(guó)互聯(lián)網(wǎng)及游戲的服務(wù)系統(tǒng),有性能數(shù)據(jù)庫(kù)、系統(tǒng)數(shù)據(jù)庫(kù)、服務(wù)器數(shù)據(jù)庫(kù),有上千個(gè)服務(wù)器、上百個(gè)客戶,說(shuō)實(shí)話林子大了什么鳥(niǎo)都見(jiàn)過(guò)。包括服務(wù)器系統(tǒng)、電商、體育系統(tǒng)、金融系統(tǒng)、IPTV,看到所有的這些相關(guān)的問(wèn)題。
我以前在土豆網(wǎng)做過(guò)CTO,對(duì)中國(guó)的互聯(lián)網(wǎng)提供一些游戲、視頻以及基礎(chǔ)架構(gòu)有非常豐富的經(jīng)驗(yàn)。中國(guó)是世界上最大的互聯(lián)網(wǎng)群體。雖然說(shuō)量很大,用戶數(shù)量是美國(guó)的四倍,但是問(wèn)題會(huì)多很多。尤其在提供高交付性的用戶體驗(yàn)非常困難。比如說(shuō)電子商務(wù)、網(wǎng)上交易以及在游戲方面。為什么會(huì)出現(xiàn)這些問(wèn)題呢?有非常先進(jìn)的ipad、手機(jī)應(yīng)用,需要不同的基礎(chǔ)架構(gòu)。有些好,有些做的差一些。在中國(guó)這方面的運(yùn)作比較困難一點(diǎn),最重要的是提供性能、服務(wù),是我們利潤(rùn)所在。在美國(guó)也是一樣,如果更快的下載,網(wǎng)絡(luò)上傳速度越快,賺的更多,這一塊中國(guó)做得不怎樣,極待提高。
中國(guó)互聯(lián)網(wǎng)群體超過(guò)5億的用戶,每年增加一到兩千萬(wàn),可以說(shuō)互聯(lián)網(wǎng)遍布世界各地。但是看用戶分布在哪里,有年輕人有老人,中國(guó)互聯(lián)網(wǎng)發(fā)展很先進(jìn)的,在家一二兆,在辦公室五到十兆,在美國(guó)帶寬都比不上中國(guó)。從基礎(chǔ)設(shè)施講,有區(qū)域問(wèn)題、網(wǎng)絡(luò)堵塞問(wèn)題,帶來(lái)很多的麻煩。
我們確實(shí)很快,但是另外一方面發(fā)展路走得不是特別順。到底遇到什么樣的問(wèn)題?
在中國(guó)分成不同區(qū),有中國(guó)電信、中國(guó)網(wǎng)通,北方主要是網(wǎng)通,遼寧省、河南省、山東省網(wǎng)通為主,南方用中國(guó)電信,21個(gè)省市自治區(qū),像浙江、廣東等。這個(gè)問(wèn)題是分離的問(wèn)題。另外,中國(guó)移動(dòng)的GPS,中國(guó)聯(lián)通iphone和賽爾網(wǎng)絡(luò)等。很多客戶不理解為什么中國(guó)的網(wǎng)絡(luò)格局如此分裂,進(jìn)入中國(guó)市場(chǎng)就是一個(gè)問(wèn)題。如果西部的話,成都、新疆甚至用不同的IP。去年移動(dòng)買了鐵通、電信買了CDMA業(yè)務(wù),外國(guó)的公司越來(lái)越搞不清楚互聯(lián)網(wǎng)的格局了。
有什么問(wèn)題?非常差的連接性,很多人在網(wǎng)上看視頻,喜歡用BT下載、迅雷下載,占用很多帶寬,對(duì)我們游戲來(lái)講,復(fù)雜度太高了。在中國(guó)不同的區(qū)域之內(nèi),甚至在區(qū)域之間。像深圳、廣州、東莞,不同的區(qū)域之間的聯(lián)系成了大問(wèn)題。每一個(gè)ISP是區(qū)域性的,比如說(shuō)中國(guó)電信分布每個(gè)省市自治區(qū)的子公司,但是這些可以說(shuō)沒(méi)有交集的。因此向全國(guó)性的服務(wù)太困難了,要買數(shù)據(jù)中心、買帶寬。知道帶寬從哪來(lái)的。到中國(guó)電信買沒(méi)問(wèn)題,但是要知道從哪個(gè)中國(guó)電信買的。在某個(gè)地方可能很便宜,在西安很便宜,可能在長(zhǎng)沙就很貴。在昆明買的話,服務(wù)能不能用到長(zhǎng)沙、北京呢?所以要了解哪個(gè)ISP買,到底能不能聯(lián)系。
瓶頸是區(qū)域之內(nèi)、區(qū)域之間南方和北方有連接的問(wèn)題。在廣東深圳有一些服務(wù)器,但是提供到北京很難了,但是南方提供到北京天津,必須有好的策略。很多公司不管這個(gè)。在深圳廣東有一些服務(wù)器,這里的帶寬便宜,提供這里的客戶就行了。但是有野心、有抱負(fù),在全國(guó)范圍內(nèi)開(kāi)展用戶,來(lái)自于廈門、福州、北京、上海、天津的用戶有效的使用這個(gè)服務(wù)器才行。
另外,移動(dòng)互聯(lián)的問(wèn)題。原來(lái)GPRS玩簡(jiǎn)單的游戲沒(méi)問(wèn)題,現(xiàn)在iphone來(lái)了,iphone是聯(lián)通和移動(dòng)的連接就有些問(wèn)題了。或者說(shuō)可以用wifi,移動(dòng)互聯(lián)網(wǎng)上發(fā)現(xiàn)移動(dòng)網(wǎng)絡(luò)公司不想買帶寬,如果是聯(lián)通的話,找一個(gè)運(yùn)營(yíng)商買帶寬才行?,F(xiàn)在不想買。當(dāng)然有些情況出現(xiàn)改變,有些用移動(dòng)IDC,但是提供服務(wù)太糟了,所以有一些瓶頸需要克服。一些問(wèn)題解決不會(huì)帶來(lái)太多的錢,就不管的。
很多系統(tǒng)使用代理、賽爾網(wǎng),服務(wù)器在北京很偏的地方,放一個(gè)服務(wù)器,每個(gè)月付很少的錢就行了,才不管這些東西。在很多地方都有BGP,在中國(guó)不是很常見(jiàn)。五年前BGP幾乎不可用,但是現(xiàn)在的BGP,中國(guó)五個(gè)地方在用了,但是才五個(gè)地方。相對(duì)價(jià)格會(huì)高一點(diǎn),所以很多人不愿意用??赡軙?huì)用多重線路。在天津可以用,網(wǎng)通用電信或者中國(guó)移動(dòng)幾條線共用。BGP現(xiàn)在還是慢慢受人的青睞。但是有很多客戶不太清楚BGP,只會(huì)找中國(guó)電線,會(huì)帶來(lái)一些問(wèn)題。從全球的角度講,和世界各地進(jìn)行互聯(lián)的角度講,中國(guó)這方面的連接做的非常差。有很強(qiáng)的聯(lián)系。另外,光線通道非常繁忙,很多東西根本傳不過(guò)來(lái)。有些時(shí)候上美國(guó)的網(wǎng)站行,后來(lái)突然發(fā)現(xiàn)未來(lái)的一小時(shí),甚至一天、一個(gè)禮拜、一個(gè)月服務(wù)器用不了,如何上美國(guó)的網(wǎng)站??赡軙?huì)有一些例外的情況,但是真的使用海外的服務(wù)器,確實(shí)非常麻煩,必須要找到海外相對(duì)比較好的供應(yīng)商才行。
有很多客戶、電商,要求越來(lái)越高,學(xué)生非常時(shí)尚、消費(fèi),但是很難接觸,學(xué)生使用的賽爾網(wǎng),比如說(shuō)網(wǎng)游肯定不可能和賽爾網(wǎng)連接在一起。像一些大的品牌,像諾基亞,可以通過(guò)手機(jī)信息傳輸給學(xué)生。
移動(dòng)也是很大的問(wèn)題,大家都跟移動(dòng)有關(guān)。有三大運(yùn)營(yíng)商,中國(guó)電信、移動(dòng)、聯(lián)通。都是分開(kāi)來(lái)的,有些用智能手機(jī),但是用一類,另一類的客戶只做奢侈品,只用iphone,別的看都不看,是另外一群人,分割是一個(gè)問(wèn)題,把服務(wù)放在移動(dòng)IDC上是可以。但是今天只針對(duì)移動(dòng)的話,60%都用wifi,離開(kāi)了這個(gè)房間就沒(méi)有wifi了,必須用中國(guó)電信、中國(guó)移動(dòng)了。所以三通必須配才可以,我覺(jué)得三通非常常見(jiàn)的。包括北京上海越來(lái)越多。這個(gè)行業(yè)來(lái)自不同的行業(yè)有自己的挑戰(zhàn),包括電子商務(wù)如何響應(yīng)時(shí)間、可靠性、速度,快速得到服務(wù)很重要。稍候會(huì)講到廣告,廣告關(guān)系到表現(xiàn)。
游戲有不同的響應(yīng)時(shí)間,有一個(gè)多用戶的分區(qū),以及有大數(shù)據(jù)的下載。BGP已經(jīng)談到了,如果能夠付得起錢就用。如果買BGP必須要理解買的是什么,不是所有的BGP都一樣,有兩線、三線、八線BGP,八線BGP非常少。必須要知道買的是什么,而且非常貴,中國(guó)的價(jià)差最便宜到最貴可能相差十倍。兩通到八通,在哪里買。在北京買八通要貴十倍,必須要考慮花得起多高的價(jià)錢。帶寬是你最重要的考慮。買BGP的話,不一定往往是有效的,有的時(shí)候看到帶寬的限制,買了100G后來(lái)發(fā)現(xiàn)不是100G,5G和10G,有些有想不到驚嚇。數(shù)據(jù)中心每天都有問(wèn)題。部署架構(gòu)的時(shí)候,每天會(huì)碰到新的問(wèn)題。在哪里選擇數(shù)據(jù)中心,這些很重要。包括移動(dòng)資金都很重要。而且?guī)捵兓芏嗟摹:芏鄷r(shí)候有些帶寬很好,但是表現(xiàn)非常差。
我們的顧客有一半在數(shù)據(jù)中心受到攻擊。選擇什么樣的數(shù)據(jù)中心呢?是不是信任他們管理的服務(wù)呢?服務(wù)也是大的問(wèn)題,擴(kuò)展也是大的問(wèn)題,比如說(shuō)有十個(gè)服務(wù)器,兩個(gè)服務(wù)器。本來(lái)有兩個(gè)服務(wù)器,突然之間一下子全部堵住了,再打電話加服務(wù)器,沒(méi)了。必須要考慮一下,一旦火了怎么擴(kuò)展,會(huì)帶來(lái)架構(gòu)的問(wèn)題。再找一個(gè)數(shù)據(jù)中心,兩三天內(nèi)增加數(shù)據(jù)中心非常復(fù)雜的。這是數(shù)據(jù)中心的問(wèn)題。服務(wù)也是很大的麻煩。
這么多的問(wèn)題該怎么解決?我從運(yùn)營(yíng)的角度談一下,而不是從互聯(lián)網(wǎng)的架構(gòu)角度。我們覺(jué)得這個(gè)建議很簡(jiǎn)單的,但是我們的顧客往往不太理解該怎么做。當(dāng)一個(gè)新的顧客第一問(wèn)題就是問(wèn),你在什么地方?用戶在哪里?電子商務(wù)游戲的占點(diǎn),可能突然發(fā)現(xiàn)用的移動(dòng)中心根本就不搭的,所以地點(diǎn)非常重要,選了一個(gè)地點(diǎn)要搬就不容易了,看單點(diǎn)還是多點(diǎn)。作為一個(gè)架構(gòu)師兩三個(gè)點(diǎn),但是公司要去做兩三個(gè)數(shù)據(jù)中心的布點(diǎn),在中國(guó)是非常不容易的。
當(dāng)然,我知道有些游戲可能有不同的分區(qū),有不同的故障恢復(fù)的站點(diǎn)。剛才講到一定要挑好的地點(diǎn),盡量保持簡(jiǎn)單。選一個(gè)地點(diǎn)一定要發(fā)展之后占點(diǎn)多了在有新的站點(diǎn)。我們的選擇是花得起錢的最好的站點(diǎn)。不一定找一個(gè)三級(jí)城市挑一個(gè)三級(jí)的IDC。我看很多人找不到地方,是哪個(gè)叔叔舅舅認(rèn)識(shí)什么人,找一個(gè)三級(jí)的數(shù)據(jù)中心。
有多少錢都要避免三級(jí)城市,避免三級(jí)的IDC,現(xiàn)在考慮到怎么樣應(yīng)對(duì)移動(dòng)的應(yīng)用,考慮到怎么樣擴(kuò)展,而且我們要考慮到云。云往往有一些新的因素。在中國(guó)對(duì)于云來(lái)說(shuō)比較早的,云的選擇要考慮,目前來(lái)說(shuō)不太現(xiàn)實(shí)。
選擇IDC的地點(diǎn)之后,看買什么,買能花得起錢的。不光是帶寬,還要考慮連接性。認(rèn)真對(duì)待業(yè)務(wù)要看數(shù)據(jù)中心會(huì)不會(huì)受到攻擊,數(shù)據(jù)中心有沒(méi)有保護(hù),如果公司火了之后,很多人會(huì)幫助你,有沒(méi)有提醒防護(hù)。所以,一定要考慮在哪里花錢。同時(shí),要獲得好的服務(wù),很多IDC的服務(wù)真的不怎樣。很多數(shù)據(jù)公司不接受你的到訪,要體現(xiàn)預(yù)約。要去數(shù)據(jù)中心的話,要提前預(yù)約,打電話就可以來(lái)。突然跟北方連接不上了,打電話打不通,幫不上忙。
另外,連接性和帶寬,還是那句話,只要花得起錢,就買最好的。要保持簡(jiǎn)單,但是要買你能夠花得起錢最好的。在你的資金范圍內(nèi),買最好的數(shù)據(jù)中心、最好的硬件、最好的帶寬??赡苁菐浊K一個(gè)月,要考慮錢花在什么地方,要考慮對(duì)用戶的地點(diǎn)。單線、多線,有移動(dòng)要考慮wifi。從績(jī)效來(lái)說(shuō),很多用戶說(shuō)基本工夫沒(méi)做到位。比如說(shuō)網(wǎng)上的架構(gòu)、網(wǎng)上的編碼。但是很多顧客很基本的主頁(yè)就有20兆,主頁(yè)上的照片太大了。所以你覺(jué)得要做到完美,但實(shí)際上并不完美,所以一定要考慮到,有快速的表現(xiàn)。所以一定要以終端用戶為中心,考慮怎么樣讓它滿意。要考慮怎么樣小心化、快速化,用什么樣的圖形。
有些東西做得很漂亮,但是太漂亮做得太大了。而且應(yīng)該遵循一下最佳實(shí)踐,進(jìn)行測(cè)試。有很多網(wǎng)站、書籍幫助你進(jìn)行這樣的測(cè)試,很多人忘了做測(cè)試,可以很清晰通過(guò)測(cè)試得到報(bào)告,有什么樣的問(wèn)題。這種測(cè)試服務(wù)是很有用的,會(huì)帶來(lái)終端用戶體驗(yàn)巨大的差別。
有可能的話用AJAX,很多人可能在用AJAX,每頁(yè)是動(dòng)態(tài)的渲染,每天閱讀幾百個(gè)頁(yè)面,是動(dòng)態(tài)的,有大量的服務(wù)器,用AJAX系統(tǒng),這種系統(tǒng)可以做出很大的轉(zhuǎn)變了。首先把這個(gè)網(wǎng)頁(yè)搞好之后,AJAX是真正幫助你的第二步,可以幫助你更好的上傳。在中國(guó)很有用的,真正幫助提升用戶體驗(yàn)。如果不能用AJAX,還是要考慮一下怎么用緩存。盡量一個(gè)頁(yè)面是電商的頁(yè)面,可能五分鐘、十五分鐘,一個(gè)小時(shí)才能夠渲染出來(lái)的畫面。高速緩存確實(shí)真正能夠提高表現(xiàn)。如果很大流量,上網(wǎng)買東西的話,速度一定要快。所以AJAX的緩存是很有用的,而且要考慮其他的對(duì)象。
最新的趨勢(shì)是有更多的Push和Async,我們是推送給顧客的方法,特別是一些動(dòng)態(tài)的游戲,顧客可以下載一些靜態(tài)的數(shù)據(jù),可以把動(dòng)態(tài)的數(shù)據(jù)推送給他們,這個(gè)體驗(yàn)是很好的,我們靜態(tài)的數(shù)據(jù)都已經(jīng)緩存下來(lái)很固定了,推送給用戶的體驗(yàn)是非常流暢非常好的。聽(tīng)起來(lái)很簡(jiǎn)單,架構(gòu)、編碼、資料庫(kù)都有很大的工夫要做,但是最終的效果是很好的。比如說(shuō)頁(yè)面是靜態(tài)頁(yè)面,動(dòng)態(tài)推送給客戶。但是需要時(shí)間理解掌握。每個(gè)用戶PCB連接到你的網(wǎng)站。在香港有300萬(wàn)個(gè)同步用戶,應(yīng)該來(lái)說(shuō)不是很多,但是同時(shí)300萬(wàn)都連上網(wǎng)站沒(méi)有多少人做到了,實(shí)際上要考慮你的拓展性。所以這個(gè)系統(tǒng)要考慮到擴(kuò)展,每個(gè)服務(wù)器接待多少用戶??梢宰龅降脑?,可以得到非常令人驚訝的效果和滿意的用戶體驗(yàn)。這是最終極追求,進(jìn)行高響應(yīng)的界面。剛剛進(jìn)入中國(guó),沒(méi)有多少人用,但是非常期待的。
我們講了最佳實(shí)踐,講了(英文)網(wǎng)站,可以找一些基本的問(wèn)題,很多都可以做。我們看太遺憾了,網(wǎng)頁(yè)非常慢,自己應(yīng)該做檢查,不通過(guò)檢查CDI做得再好都不能解決主頁(yè)只有5兆的事實(shí)。
我是CDN很大的粉絲,在中國(guó)CDN很有用的,可以帶來(lái)兩大好處:第一,提升用戶的體驗(yàn),有一個(gè)緩存。第二,靜態(tài)用戶、終端用戶體驗(yàn)快速流暢,而且可以降低帶的價(jià)格,如果帶寬的價(jià)格降下來(lái),就可以買一些高質(zhì)量的帶寬了。
比如說(shuō)錢不是很多,把錢有效的拿出來(lái),到八通的BGP,是中國(guó)最好的,大概一兆是800塊錢,可以把其他部分降下來(lái),用到BGP上面,性能非常高,花的總錢數(shù)沒(méi)有多多少?;烁噱X在視頻和圖片上,不可能花錢來(lái)應(yīng)對(duì)帶寬的要求。所以要看到全局里面看怎么區(qū)分我們帶寬。一方視頻可以多一點(diǎn),簡(jiǎn)單圖片少一點(diǎn),分配使用成本。
稍候我會(huì)講到云端計(jì)算,講云也用了CDN,很多人沒(méi)有意識(shí)到云計(jì)算的時(shí)候,用CDN。監(jiān)控也非常的重要,重要性不言而喻,因?yàn)樵谶\(yùn)營(yíng)過(guò)程中我們會(huì)監(jiān)控。我們要監(jiān)控200到300個(gè)服務(wù)器,要有安全的情況。另外,非常重要的一點(diǎn),有錢要監(jiān)控服務(wù)器之外的情況,中國(guó)最好多游戲網(wǎng)站、最好的電商,看看做得怎么樣。比如說(shuō)我在深圳有服務(wù)器,在成都做得怎么樣?昆明做得怎么樣?武漢做得怎么樣?可以跳出自己的框框,按照CDN和不同的運(yùn)營(yíng)商了解整個(gè)市場(chǎng)的情況。當(dāng)然,有些做起來(lái)是比較貴的,比如說(shuō)電商公司在中國(guó)各地賣我的產(chǎn)品,肯定想知道我的網(wǎng)站對(duì)于成都那些客戶來(lái)講 網(wǎng)站響應(yīng)速度怎么樣,產(chǎn)品賣不賣得出去等,如果不去了解,永遠(yuǎn)不不知道他們的想法怎樣。這樣的服務(wù)雖然花點(diǎn)錢,但是可以了解到客戶對(duì)你的網(wǎng)站和服務(wù)怎么看的。
我們也非常喜歡云計(jì)算,ChinaNetCloud提供云計(jì)算很多年,是市場(chǎng)先行者,現(xiàn)在跟阿里云等開(kāi)展合作,最終希望達(dá)到AWS的水平,向中國(guó)提供。當(dāng)然還有上海的世紀(jì)互聯(lián)也很有前景,尤其是阿里云。可以隨便加服務(wù)器,使用不同的服務(wù),存儲(chǔ)非常簡(jiǎn)單,甚至可以使用云來(lái)為服務(wù)器存儲(chǔ)一些相關(guān)的服務(wù)。在美國(guó)沒(méi)有人在服務(wù)器里面存圖片,都存到云端。在中國(guó)也可以考慮這個(gè)方法。如果沒(méi)有存儲(chǔ),不知道怎么分享相應(yīng)的資產(chǎn),可以了解一下其他人是怎么做的,直接放到云端就行了,而且成本很低,在中國(guó)原來(lái)做不了,今年有機(jī)會(huì)。希望大家考慮一下云端存儲(chǔ)、云端服務(wù)器,基礎(chǔ)設(shè)施等。我們認(rèn)為未來(lái)會(huì)非常流行,希望越來(lái)越多的公司上云。這也是很好的消息,目前只能說(shuō)限制在中國(guó)大陸之內(nèi)的。
另外,使用云計(jì)算的時(shí)候,要知道你的目標(biāo)怎樣,像阿里云一樣成為AWS還是有其他的目標(biāo)。如果只是一個(gè)服務(wù)器,用起來(lái)比較簡(jiǎn)單,PHP就夠了。如果更大的1到21個(gè)服務(wù)器,帶來(lái)什么問(wèn)題。列表告訴大家什么最重要,帶寬等小問(wèn)題都會(huì)產(chǎn)生舉足輕重的影響。阿里云做得也還不錯(cuò)。如果用云計(jì)算、云服務(wù)的話,千萬(wàn)不要因?yàn)樾〉膯?wèn)題給你嚇了一跳。當(dāng)然,如果用公共IP的話,還要為此付費(fèi)等。這些都要搞清楚。我會(huì)把我們?cè)u(píng)估的標(biāo)準(zhǔn)、關(guān)于中國(guó)的云計(jì)算的相關(guān)評(píng)判標(biāo)準(zhǔn),正式公布,大家就可以了解到了。
我想在座很多都希望不僅僅在國(guó)內(nèi)金融服務(wù),還希望走出過(guò)門。可以跟亞馬遜、rackspace合作。有些客戶既要滿足國(guó)內(nèi)需求還要滿足國(guó)外的需求。很多又要搞中國(guó)的系統(tǒng),又要搞美國(guó)的系統(tǒng),很困難。很多把服務(wù)器放在香港,在香港放服務(wù)器,給中國(guó)大陸的客戶提供服務(wù),再給美國(guó)客戶提供服務(wù)。如果是一個(gè)小公司、小系統(tǒng)放在香港沒(méi)問(wèn)題。但是,如果是一個(gè)大公司,有合適的架構(gòu)同步所有的信息。確保美國(guó)信息和中國(guó)信息是同步的,比如說(shuō)總部信息和子公司信息一樣。這里很難說(shuō)你用一個(gè)簡(jiǎn)單的系統(tǒng)來(lái)支持美國(guó)、中國(guó)的市場(chǎng)。中國(guó)的服務(wù)器支持美國(guó)市場(chǎng)、日本市場(chǎng)的話,很困難的。
在香港沒(méi)有Amazon,在東京用Amazon,可以更好的接觸客戶。這個(gè)問(wèn)題看起來(lái)還沒(méi)有起色。
中國(guó)的互聯(lián)網(wǎng)是很大的產(chǎn)業(yè),很多的事態(tài)發(fā)展,變化很快。雖然電信業(yè)的巨頭買了另外一個(gè)公司,行業(yè)格局出現(xiàn)變化,BGP、CDN都可以改變行業(yè)的格局,必須有更好的經(jīng)驗(yàn)監(jiān)控行業(yè),另外選IDC位置地點(diǎn)非常重要。在中國(guó)看性能怎么樣,關(guān)鍵因素是IDC放在哪里,怎么更好的提供服務(wù)。像架構(gòu)編寫等都可以影響到CDN使用的成效,還要監(jiān)控服務(wù)器的作用性能。確保在市場(chǎng)產(chǎn)生足夠的影響,而且在中國(guó)賺到錢。在中國(guó)只要做得快,客戶滿意就開(kāi)心了。我就講到這里!
【主持人】謝謝Steve,剛才講了中國(guó)網(wǎng)絡(luò)服務(wù),云計(jì)算服務(wù)哪些難處,我有一個(gè)問(wèn)題是關(guān)于亞馬遜云服務(wù)的,我覺(jué)得亞馬遜在中國(guó)沒(méi)有數(shù)據(jù)中心吧!有沒(méi)有一些中國(guó)公司使用亞馬遜云計(jì)算的成功案例,可以針對(duì)中國(guó)用戶和國(guó)際用戶。
【Steve Mushero】亞馬遜目前在中國(guó)沒(méi)有公開(kāi)的服務(wù)中心,最近在日本,未來(lái)會(huì)在香港設(shè)一個(gè),可能也會(huì)在中國(guó)大陸有,目前來(lái)講還沒(méi)有。我不太清楚有哪些大的公司使用亞馬遜的云服務(wù)。就算中國(guó)用的話,只是一小部分,很難擴(kuò)展,不可能復(fù)制出來(lái)做出更大的成功案例。現(xiàn)在阿里云和亞馬遜的云服務(wù)是可以借用的,在中國(guó)用阿里云就可以了。
【提問(wèn)】找數(shù)據(jù)中心和買房一樣,地點(diǎn)、位置最重要的。在中國(guó)做網(wǎng)站成功的話,還面對(duì)一個(gè)問(wèn)題是政府的限制。
【Steve Mushero】不好意思能不能再重復(fù)一下。
【提問(wèn)】中國(guó)的網(wǎng)站,國(guó)外的服務(wù)器用中國(guó)的網(wǎng)站。
【Steve Mushero】對(duì)我來(lái)講,在中國(guó)打開(kāi)美國(guó)的網(wǎng)站蠻快,在美國(guó)打開(kāi)中國(guó)的非常慢,可能有一些限制,路由的優(yōu)先級(jí)不一樣。中國(guó)很多人喜歡看美國(guó)、歐洲的網(wǎng)站,相對(duì)講有這樣的流量促進(jìn),所以快一點(diǎn)。美國(guó)歐洲沒(méi)人看中國(guó)網(wǎng)站,自然打開(kāi)慢。另外,防火墻是不是會(huì)影響到這個(gè)呢?出去容易進(jìn)來(lái)來(lái)?不知道是不是這個(gè)。之前沒(méi)有具體了解過(guò),有時(shí)候在香港放一個(gè)東西。香港帶寬也會(huì)受限,效果也不是很好,謝謝!
【主持人】大家用熱烈的掌聲感謝Steve。休息十分鐘,11點(diǎn)帶來(lái)第三個(gè)主題演講!
#p#
【主持人】接下來(lái)有請(qǐng)Coding the Architecture創(chuàng)始人Simon Brown為我們帶來(lái)“郁悶的架構(gòu)師”。
【Simon Brown】大家上午好!首先,講一下軟件架構(gòu)師的認(rèn)知是什么意思?如果你是一個(gè)架構(gòu)師,往往有人覺(jué)得做大型前端設(shè)計(jì)、懂UML就是架構(gòu)師。
我不是一個(gè)很有力的架構(gòu)師,不會(huì)畫出大量的架構(gòu)圖解,我的工作不是做畫大量的圖。其實(shí)有很多的熱門詞匯來(lái)描述軟件架構(gòu)師的角色。最近聽(tīng)過(guò)一些熱門詞,比如說(shuō)架構(gòu)師是“業(yè)務(wù)技術(shù)戰(zhàn)略家”,業(yè)務(wù)、技術(shù)、戰(zhàn)略家三個(gè)詞我懂,放一塊我不懂了。我有一次開(kāi)會(huì),有人問(wèn)我,怎么樣把MongoDB放在當(dāng)中,他們高層告訴我MongoDB是什么。有很多的熱門詞,熱門詞有必要的,用術(shù)語(yǔ)、用熱門詞。往往太多了,就忘了軟件開(kāi)發(fā)基本的知識(shí)了,我們離軟件學(xué)問(wèn)越來(lái)越遠(yuǎn)。所以我是一個(gè)軟件程序員,是架構(gòu)師,是團(tuán)隊(duì)一樣。也喜歡編寫代碼,大家舉手有誰(shuí)喜歡編代碼的。挺多的。
我們考慮架構(gòu)師是什么地位。我入行的時(shí)候是一個(gè)工程師,是一個(gè)軟件程序員,慢慢晉升到架構(gòu)、團(tuán)隊(duì)領(lǐng)導(dǎo)的工作。我有兩個(gè)很有意思的時(shí)期,在UML的時(shí)候,我最早開(kāi)始做架構(gòu)的工作,主要是畫UML的設(shè)計(jì)圖。6個(gè)月寫UML的文檔,對(duì)我來(lái)說(shuō)我覺(jué)得是一種浪費(fèi)。
我在一個(gè)大型的管理咨詢公司服務(wù),他們招我進(jìn)來(lái)做軟件架構(gòu)師,每天也編寫代碼,他們不理解,讓做軟件工程師為什么要編寫代碼呢?在大型企業(yè)往往是事業(yè)的階梯,你是一個(gè)高級(jí)程序員、架構(gòu)師,慢慢升上去,離開(kāi)了這個(gè)隊(duì)伍,進(jìn)入了管理團(tuán)隊(duì),這是很令人遺憾的。大部分的技術(shù)人員,最好在這個(gè)團(tuán)隊(duì)里還是發(fā)揮作用的。在團(tuán)隊(duì)里面,很多時(shí)候英國(guó)一些公司,因?yàn)榧夹g(shù)源做得好進(jìn)入了管理層,公司反而失去了動(dòng)力。
我有一個(gè)網(wǎng)站叫Coding the Architecture,覺(jué)得架構(gòu)離不開(kāi)這個(gè)編碼范疇的。很多人說(shuō)軟件架構(gòu)師是一個(gè)名片上的職位、頭銜,拿到這個(gè)頭銜工資高一點(diǎn)。但是這是一個(gè)角色,是慢慢發(fā)展才能進(jìn)入的角色。
大家進(jìn)入Linked討論的話,說(shuō)是一個(gè)高級(jí)程序員晉升到架構(gòu)師,說(shuō)我該干什么,有些人進(jìn)入到架構(gòu)師反而不知所措。
誰(shuí)想做到敏捷?有些人喜歡敏捷,敏捷是未來(lái)大的理想。軟件開(kāi)發(fā)做到敏捷,是很酷。但是,我覺(jué)得我們是不是忘了一些什么?特別是軟件架構(gòu)的時(shí)候是不是忘了什么?
我們講一下敏捷這個(gè)詞,敏捷有很多相關(guān)的熱門詞:自動(dòng)測(cè)試、精簡(jiǎn)、瘦,這些都相關(guān),而他們都是很好。其他表現(xiàn)、擴(kuò)展性、安全、團(tuán)隊(duì)的共同目標(biāo),很多人忘了這些其他的重點(diǎn)。
很多人把敏捷強(qiáng)加在很多的名詞前面。我看到很多都會(huì)把什么詞前面都加一個(gè)敏捷,說(shuō)賣什么東西就賣敏捷的什么東西,聽(tīng)起來(lái)很酷。到底什么是一個(gè)敏捷的架構(gòu)師呢?敏捷的架構(gòu)師是不是不用UML的架構(gòu)師呢?這種概念有些時(shí)候沒(méi)有什么意義,但是聽(tīng)起來(lái)很酷吧。
Hi,大家好!我是一個(gè)敏捷的架構(gòu)師,聽(tīng)起來(lái)很棒!
這是敏捷的架構(gòu)嗎?在我培訓(xùn)過(guò)程中,有人畫圖的時(shí)候用即時(shí)貼進(jìn)行畫圖,這就敏捷了嗎?架構(gòu)在敏捷的方式當(dāng)中,架構(gòu)在什么位置呢?用不同的Skills時(shí)間框。按照項(xiàng)目的過(guò)程在不同的階段進(jìn)行不同的設(shè)計(jì),這是不是也是一種敏捷呢?
很多人認(rèn)為只是做了一個(gè)架構(gòu),希望最好的結(jié)果。很多人覺(jué)得敏捷是一個(gè)借口,做了敏捷看效果好不好。
很多人跟我說(shuō),我們不需要軟件架構(gòu),因?yàn)槲覀冏龅氖菧y(cè)試驅(qū)動(dòng)開(kāi)發(fā)。TDD就是一種測(cè)試驅(qū)動(dòng)開(kāi)發(fā),但是跟軟件架構(gòu)不是一會(huì)事,TDD是大的代碼,從基層的角度講,架構(gòu)從高層角度。
最后負(fù)責(zé)時(shí)刻,這個(gè)詞我不太喜歡,很多人作為一種借口,遲遲不做決定,這就是敏捷,最后負(fù)責(zé)的時(shí)候做決定,往往最后的負(fù)責(zé)時(shí)刻成為不負(fù)責(zé)時(shí)刻。很多的敏捷書籍,要自我組織的團(tuán)隊(duì)是一個(gè)扁平式的組織,沒(méi)有組長(zhǎng),大家通力合作,這個(gè)聽(tīng)起來(lái)很好,因?yàn)楸馄绞降暮献鞲涌旖?,但是有些時(shí)候這種團(tuán)隊(duì)不行,但是沒(méi)有人告訴你有些自我組織的團(tuán)隊(duì),他們可能有幾個(gè)有經(jīng)驗(yàn)的人,比如說(shuō)有高級(jí),如果把高級(jí)和低級(jí)放在一起自我組織不行了。有時(shí)候有些人說(shuō),你為什么對(duì)敏捷有這么大的意見(jiàn)呢?其實(shí)我喜歡敏捷,并不是要抨擊敏捷,有些人覺(jué)得敏捷太多讓我們覺(jué)得很酷的東西,但是忘了一些最基本的工夫。
我覺(jué)得我們應(yīng)該要回顧一下,回顧也是敏捷的熱門詞。我覺(jué)得我們忘的東西比學(xué)的更多。在軟件行業(yè)來(lái)說(shuō),學(xué)的不如忘的多。有多少人在項(xiàng)目當(dāng)中還在用UML的?數(shù)量很少。在歐洲的比例也差不多,如果五年、十年前問(wèn)這個(gè)問(wèn)題,每個(gè)人都舉手。今天用這個(gè)問(wèn)題很少人舉手。不是有什么取代它,而是很多人忘了它。
15年前出了一本書《顏色編碼》,用顏色編碼的UML的工作方式,這個(gè)很好,很多人忘了。因?yàn)橛妙伾梢郧宄淖鲆恍﹫D解,還有CLC,類-責(zé)任-協(xié)作,很好的方式,可以做分析儲(chǔ)存的分配,找一些人做了一塊,找了一個(gè)用力,進(jìn)行分解。滿足用力的特點(diǎn),跟每個(gè)類分配一些責(zé)任,同時(shí)找到不同工作中協(xié)作的過(guò)程。這是軟件系統(tǒng)進(jìn)行分解很好的方法。用團(tuán)隊(duì)分解,現(xiàn)在很少人用這個(gè)方法了。
邊界、控制器和實(shí)體,這是系統(tǒng)結(jié)構(gòu)很好的方法,面向服務(wù)的架構(gòu)方法。同樣還有基于組件的開(kāi)發(fā)、面向模式的軟件架構(gòu)。整本書都會(huì)講面向模式的軟件架構(gòu),這種書出版很久了,雖然是一本老書,里面的內(nèi)容在今天來(lái)說(shuō)跟當(dāng)時(shí)出版同樣有意義,但很多人沒(méi)有讀這本書了。
Rational統(tǒng)一過(guò)程,是一種增量式很直觀的過(guò)程方法。敏捷也是增量式的過(guò)程方法。Rational的統(tǒng)一過(guò)程是圍繞架構(gòu)做一個(gè)核心,以這個(gè)核心做各種活動(dòng),讓架構(gòu)不斷的演變。
剛才跟大家突出強(qiáng)調(diào)了一些過(guò)去的方法,這些方法很不錯(cuò)的,不是讓大家回去按照這個(gè)做,我們要實(shí)際一點(diǎn)考慮,看看老的工作里面有哪些經(jīng)驗(yàn)教訓(xùn)和訣竅給我們用。覺(jué)得可用的話,可以在具體的工作里面可用一下。
這些經(jīng)典的東西誰(shuí)在教你?沒(méi)有人教你,因?yàn)榻?jīng)典的東西看上去不酷。我們書架里面有書,有看板、有經(jīng)義、有程序設(shè)計(jì)等?,F(xiàn)在人不講了,覺(jué)得沒(méi)有意思了。
很多人是做軟件架構(gòu)師的,實(shí)際上沒(méi)有搞清楚做軟件架構(gòu)師是干什么。我在倫敦工作的時(shí)候,招日招軟件架構(gòu)師,面談看簡(jiǎn)歷情況。這時(shí)有一個(gè)企業(yè)的架構(gòu)師,描述他的工作,做得工作就是大企業(yè)里面做一個(gè)軟件架構(gòu)師,給自己加上一個(gè)實(shí)際上根本沒(méi)有負(fù)責(zé)的頭銜,讓人聽(tīng)起來(lái)感覺(jué)很不舒服。
經(jīng)常發(fā)生這樣的情況,人們發(fā)現(xiàn)軟件開(kāi)發(fā)像接力賽一樣,實(shí)際上解決方案的架構(gòu)師會(huì)問(wèn)一些情況,或者要求之后,會(huì)做一些架構(gòu)把它以文件的形式記錄下來(lái),非常厚的文件,文件交給團(tuán)隊(duì)就跑掉了。
團(tuán)隊(duì)拿到文件之后,要負(fù)責(zé)把架構(gòu)真正付諸于實(shí)施,我不喜歡這種方式,這個(gè)人做了架構(gòu)跑掉了,團(tuán)隊(duì)不知道怎么做出來(lái)的,內(nèi)容團(tuán)隊(duì)有問(wèn)題的話,不可能問(wèn)原來(lái)設(shè)計(jì)的人。我給它起了一個(gè)名字,AaaS,讀音是屁股的意思,把架構(gòu)服務(wù)交給團(tuán)隊(duì)不對(duì)的。就像接力賽一樣,一個(gè)棒給下一個(gè)運(yùn)動(dòng)員就跑掉了,其實(shí)不行的。
項(xiàng)目的成功不僅僅是關(guān)注與實(shí)施,很多人認(rèn)為實(shí)施好就行了,并不是這樣的。
現(xiàn)在看到的圖里面有非常多的圖表,人們非常愚蠢的期待結(jié)果,做了價(jià)格,不知道能不能行通就丟給別人。有一次有人讓我們來(lái)看一個(gè)項(xiàng)目,當(dāng)時(shí)架構(gòu)里面就一個(gè)軟件架構(gòu)師,做技術(shù)指導(dǎo)工作的。我看架構(gòu)的時(shí)候發(fā)現(xiàn)了軟件系統(tǒng)里面的問(wèn)題、難處,其中有安全的問(wèn)題,還有功能根本用不上,另外做了負(fù)載測(cè)試結(jié)果不好,文件的記載也不怎么樣。這個(gè)項(xiàng)目不小,是戰(zhàn)略平臺(tái)的第一步,要先做了價(jià)格,未來(lái)幾個(gè)月、幾年把服務(wù)加在上面。
對(duì)我來(lái)講,一個(gè)軟件架構(gòu)師,要杜絕PPT上列的這些問(wèn)題。我覺(jué)得做文件記載非常重要,但是現(xiàn)在講所謂的敏捷的軟件架構(gòu)設(shè)計(jì),很多人不記錄文件,敏捷的人不會(huì)把文件記錄下來(lái),根本不增值、只做增值的事情。當(dāng)然厚厚一疊文件給別人也不行。我們需要提供文件,而且精簡(jiǎn),不用太多,搞清楚問(wèn)題就行了。
在英國(guó)以及在歐洲,我發(fā)現(xiàn)有些人根本不了解干什么,尤其是大團(tuán)隊(duì)里面,大家對(duì)決策不清楚,剛才Pinterest講到團(tuán)隊(duì)擴(kuò)展,團(tuán)隊(duì)擴(kuò)展會(huì)帶來(lái)一些問(wèn)題,大的團(tuán)隊(duì)在一片混亂中工作,不知道自己在構(gòu)建什么,而且不知道怎么樣構(gòu)建,根本沒(méi)有藍(lán)圖,大家都是隨心所欲,根本沒(méi)有指導(dǎo)性的目標(biāo)。出現(xiàn)這種情況的話,在這樣一個(gè)混亂的系統(tǒng)里面,最關(guān)鍵的是把它停下來(lái),在系統(tǒng)里面工作非常慢,無(wú)法擴(kuò)展,沒(méi)有任何安全感,感覺(jué)編碼像一灘爛泥一樣做不好。我希望編碼非常清楚、有好的結(jié)構(gòu)和次序做出什么。要打破混亂,有好的愿景,讓寫代碼的時(shí)候知道方向,按照這個(gè)方向來(lái)走。原來(lái)哪些人做項(xiàng)目有很大的文件,就是讓大家分享他的想法。但是如果這么多的文件,會(huì)太長(zhǎng)沒(méi)人看。既然沒(méi)人讀你的文件,初衷沒(méi)有得到實(shí)現(xiàn),大家也是失去了方向。
現(xiàn)在我們做敏捷了,有些文件可能在白板上畫一些東西,但是別人不知道畫什么,就像無(wú)稽之談一樣,沒(méi)有共享的愿景,別人畫的東西搞不清楚。
給大家舉一個(gè)例子,來(lái)自于有一次我看到的系統(tǒng)的圖示,我覺(jué)得完全沒(méi)有意義,根本不知道這里面硬件還有軟件以及不同的節(jié)點(diǎn)發(fā)揮什么作用。這個(gè)比較典型,一片混亂搞不清楚做什么。所以我們必須要把我們所工作的方式可視化。我們看敏捷、看板、故事強(qiáng)。用易貼紙?jiān)趬ι?,就知道流程是什么樣的。我們不可能系統(tǒng)用圖的方式來(lái)做。還是要考慮用UML來(lái)畫出來(lái)。
以上是我演講的第一部分,作為軟件架構(gòu)師對(duì)行業(yè)感到的挫敗感。
我們希望團(tuán)隊(duì)成員共享愿景,知道發(fā)展方向怎樣,很多時(shí)候在公司里面會(huì)請(qǐng)一個(gè)軟件架構(gòu)師,會(huì)成為這個(gè)架構(gòu)師的頭頭。開(kāi)發(fā)人員接受架構(gòu)師的指令,團(tuán)隊(duì)就是這樣工作的。我們感覺(jué)軟件架構(gòu)師在象牙塔里面使令,在開(kāi)發(fā)團(tuán)隊(duì)做的事情沒(méi)有任何交集。軟件程序員不會(huì)理會(huì)架構(gòu)師的建議,覺(jué)得建議是一派胡言,用不上,要避免這種情況。
怎么做呢?
我們請(qǐng)一個(gè)軟件架構(gòu)師,把他當(dāng)成領(lǐng)導(dǎo)安排工作,希望與團(tuán)隊(duì)合作,能夠提供指導(dǎo),提供相應(yīng)的輔助性的工作。要把軟件架構(gòu)師和軟件程序員放在一起,縮小差距,慢慢實(shí)現(xiàn)共鳴,這樣的話非常有意思了。在一個(gè)結(jié)構(gòu)里面大家可能都是軟件架構(gòu)師,這是一個(gè)非常樂(lè)觀的情況。不讓他們都成架構(gòu)師的話,縮小差距,慢慢也會(huì)實(shí)現(xiàn)工作中的互聯(lián)互通。
我們要請(qǐng)一個(gè)軟件架構(gòu)師選什么樣的人?
T型的人,首先要有深度,T下面的一豎,有扎實(shí)的技術(shù)功底,至少懂基礎(chǔ)的語(yǔ)言來(lái)做。打交道知道技術(shù)怎么回事才知道技術(shù)。T下面的一橫,要知道不同的方式,知道不同的結(jié)構(gòu),解決代碼問(wèn)題、擴(kuò)展問(wèn)題,要看不同的系統(tǒng)怎么做出來(lái)。Pinterest兩位發(fā)言人講得非常有意思,可以從那里學(xué)出來(lái)。架構(gòu)的詞英文到底來(lái)自于什么意思?最原始的意思是建筑師。原來(lái)建筑師拿一些石頭、磚頭蓋房子。架構(gòu)師也是一樣,我們也是蓋東西,成為這方面的大師、專家,成為通才化的專才,是軟件架構(gòu)師應(yīng)該有的角色。有專業(yè)的專才同時(shí)有不同的領(lǐng)域。
有一位英國(guó)的先生jasongorman加入了軟件的運(yùn)動(dòng),在微博里面寫,我現(xiàn)在不寫代碼了,覺(jué)得行業(yè)里面資深的人有奇怪的想法,已經(jīng)很資深,不寫代碼了,會(huì)不會(huì)雇一個(gè)不會(huì)編碼的架構(gòu)師?
現(xiàn)在看到的是從比較高端的角度界定一下軟件架構(gòu)師做一些什么東西,保證了解要求、組織的約束到核心的技術(shù)、設(shè)計(jì)軟件、評(píng)估軟件設(shè)計(jì),確保用得上至少信心滿滿說(shuō)肯定用起來(lái)。編碼,軟件架構(gòu)師核心的工作。軟件架構(gòu)師不是做一件事情就固定不動(dòng)了,遇到新的要求就要不斷的演進(jìn),根據(jù)不同的需求滿足不同的變化。質(zhì)量保證也非常重要。教練和指導(dǎo),這是之前講過(guò)的,找一個(gè)架構(gòu)師與團(tuán)隊(duì)協(xié)作,提供輔導(dǎo)的機(jī)會(huì)帶領(lǐng)前進(jìn)。
軟件程序員看一些代碼、測(cè)試、軟件的編制,架構(gòu)師不太一樣,架構(gòu)師要后退一步看看全局。所以這個(gè)時(shí)候并不只是看代碼級(jí)別的內(nèi)容,為什么呢?想象一下有一項(xiàng)要求,做一個(gè)軟件架構(gòu)來(lái)解這個(gè)要求,怎么做?要把要求進(jìn)行分解,從功能性和非功能性分解。所以,可能在環(huán)境當(dāng)中有一些局限性,在工作大部分的情況下,技術(shù)選型有限制許可證和軟件等都有一些局限性。不知道架構(gòu)有哪些局限性,而且有一些原則要進(jìn)行。有些要在整個(gè)軟件開(kāi)發(fā)當(dāng)中,從始到終遵守一致的原則。解決問(wèn)題有不同的方案。從編程語(yǔ)言到選擇技術(shù)案例。找到一個(gè)最好的方法,找到最好的選擇。不同的要求,不同的局限扔到一個(gè)盒子里,找出最合理的一項(xiàng)。至于在軟件編成的過(guò)程中,敏捷可以看到很多時(shí)候大家不用UML的工具,我也會(huì)用UML的工具,用它來(lái)做一些圖解,需要一些正規(guī)的流程圖,可以用它來(lái)做流程圖。但是在設(shè)計(jì)軟件的時(shí)候可能就不會(huì)做這么正規(guī)的流程圖,可能會(huì)用白板、易貼紙等。如果三四個(gè)人擠在我的電腦前用UML工具,就很麻煩,但是可以在大的白板前面一起合作就很簡(jiǎn)單了。
我很喜歡畫畫,很多人不喜歡畫畫,不用UML,我是怎么畫畫的?基本上按常理出牌,畫一個(gè)高層的概念,把它分解,在分解筐子里進(jìn)行考慮,分解數(shù)據(jù)服務(wù)、數(shù)據(jù)庫(kù)、架構(gòu)等。在每個(gè)服務(wù)器又把服務(wù)器進(jìn)行分解。更多的細(xì)節(jié)可以按不同的類來(lái)分解。所以這叫做C4的方法,是非常有效的草圖法,可以很簡(jiǎn)單非常精益的做出非常好的草圖。
為什么說(shuō)架構(gòu)師是一個(gè)總的建筑師呢?如果是你會(huì)不會(huì)把系統(tǒng)進(jìn)行編碼?是的話還好,如果據(jù)的編碼不合胃口就麻煩了。如果架構(gòu)師不懂背后的編碼,會(huì)問(wèn)出這個(gè)不合理的問(wèn)題。
文件很麻煩,有時(shí)候會(huì)做厚厚的技術(shù)文檔,很快過(guò)時(shí)。從另外一個(gè)角度來(lái)看,從精益角度來(lái)看文檔說(shuō)明。我們把它看成旅行手冊(cè),如果看任何的旅行指南,會(huì)有地圖告訴你怎么走,這就是我們的代碼基礎(chǔ)了。有這個(gè)草圖就是我們的地圖了。我們看一下景點(diǎn),哪些地方不可錯(cuò)過(guò)要看一番,要看有歷史文化的景點(diǎn)。比如說(shuō)這個(gè)地方怎么慢慢演變到今天的局面的,使用的信息,怎么建立和配置我們的系統(tǒng)。所以我們說(shuō)精益想敏捷要減少浪費(fèi)、增加價(jià)值。關(guān)鍵是要言簡(jiǎn)意賅把要說(shuō)的東西說(shuō)出來(lái),而且要增加價(jià)值。如果畫出一些類的圖解。本身看代碼就能知道,本身也能夠理解,他們是程序員,看代碼就看得懂了。所以要描述一些代碼沒(méi)有的東西。通過(guò)示意圖像地圖一樣,幫助程序員或者別人通過(guò)你這個(gè)找出文檔當(dāng)中所要的東西。
這是不是大型的程序設(shè)計(jì)呢?其實(shí)并不是的。如果你看十年前,我們會(huì)有一些非常糟糕的方法。另一方面,我們有敏捷的方法,比如說(shuō)極端的編成,Scrum等,這是演變性的價(jià)格設(shè)計(jì)方法。但不幸的是,有些人覺(jué)得兩者都不做是最好的,左邊前期什么都做好,另外一個(gè)極端什么都不做最好的。實(shí)際上我們不一定要走極端,可以兩者取其中。比如說(shuō)像RUP統(tǒng)一過(guò)程,這是兩者之間的做法。是輕量級(jí)的,同時(shí)也是增量型的,對(duì)架構(gòu)不放過(guò)。我的答案是剛好夠用。做的前端設(shè)計(jì)是剛好夠用,符合你的項(xiàng)目,而且是合理的,這是非常好的項(xiàng)目,這是一個(gè)好的指引,但是并沒(méi)有告訴你,多少才算是夠用,這就是我們回答重要的問(wèn)題了,多少才是夠用呢?
Scott Ambler是在IBM工作的人,倡導(dǎo)敏捷包,有一個(gè)網(wǎng)站倡導(dǎo)一句話可以概括了,你的架構(gòu)應(yīng)該建立在要求上,要輕裝上陣。輕裝上陣是一個(gè)敏捷要?jiǎng)倓倝蛴?,同時(shí)要用實(shí)實(shí)在在的經(jīng)驗(yàn)和實(shí)驗(yàn)來(lái)證明你的架構(gòu)。
什么叫做實(shí)實(shí)在在的實(shí)驗(yàn)?zāi)兀坑靡粋€(gè)圓形和概念證明的方法,做一個(gè)薄薄的切片,把軟件切出薄片測(cè)試軟件的功能、擴(kuò)展性。你怎么知道應(yīng)該做哪一種的概念原形證明呢。必須要知道,哪些部分在架構(gòu)上是有重要意義的。架構(gòu)當(dāng)中哪些是重要的,進(jìn)行這些測(cè)試。我們圍繞著核心架構(gòu)有很多的其他內(nèi)容,我們必須要把核心的架構(gòu)搞對(duì)。這就回到我們說(shuō)一定要把主要的風(fēng)險(xiǎn)排除在外,消除我們的風(fēng)險(xiǎn)。
有些時(shí)候發(fā)生了風(fēng)險(xiǎn)就會(huì)有不利的效果,當(dāng)然要在軟件的項(xiàng)目當(dāng)中避免這種風(fēng)險(xiǎn)發(fā)生。當(dāng)然,風(fēng)險(xiǎn)可以量化的,只要把它在一個(gè)概率和影響的舉證就可以進(jìn)行量化了。如果是非常低概率的風(fēng)險(xiǎn)以及非常小影響的風(fēng)險(xiǎn),只要知道就行了,不需要做什么。如果有一個(gè)風(fēng)險(xiǎn)是高概率、很可能發(fā)生的風(fēng)險(xiǎn),而且影響破壞很大,這種情況下,高影響,整個(gè)系統(tǒng)架構(gòu)要重?fù)Q。整個(gè)風(fēng)險(xiǎn)因素就要提早進(jìn)行考慮。所以很多不同的風(fēng)險(xiǎn)優(yōu)先次序不一樣。我發(fā)現(xiàn)一個(gè)問(wèn)題,軟件團(tuán)隊(duì)不太善于列出風(fēng)險(xiǎn),覺(jué)得很無(wú)聊,把風(fēng)險(xiǎn)給寫下來(lái),這個(gè)可以解決。在我的培訓(xùn)當(dāng)中,網(wǎng)站里面有一個(gè)內(nèi)容,有一個(gè)風(fēng)險(xiǎn)的腦力風(fēng)暴。讓他們?nèi)プR(shí)別風(fēng)險(xiǎn),會(huì)畫一些草圖,讓他們就這個(gè)架構(gòu)草圖放在墻上,然后把團(tuán)隊(duì)、程序員、測(cè)試員,所有的人員坐在一塊,讓它看架構(gòu)草圖。你們覺(jué)得系統(tǒng)有什么風(fēng)險(xiǎn)?哪里有風(fēng)險(xiǎn)?升級(jí)性、擴(kuò)展性、技術(shù)的選型還是可用性?每個(gè)人有自己的想法,把這個(gè)想法匯總在草圖上,這樣的話可以視覺(jué)化的通過(guò)貼紙的形式看到大家的想法。所以風(fēng)險(xiǎn)也可以是主觀性的。
當(dāng)然,我們找到風(fēng)險(xiǎn)之后,必須要處理、緩解風(fēng)險(xiǎn),不是找到風(fēng)險(xiǎn)就完了。我們舉一個(gè)例子,什么叫風(fēng)險(xiǎn)。我在丹麥去年開(kāi)了一次會(huì)議,他們說(shuō),我們對(duì)敏捷項(xiàng)目的一個(gè)回顧,Linda Rising會(huì)有不斷的回顧,發(fā)現(xiàn)什么問(wèn)題的時(shí)候,會(huì)把問(wèn)題寫在一個(gè)卡片上,粘在墻上,不同顏色的卡片代表不同的感受,有些是快樂(lè)的卡片,有些是挑戰(zhàn)困惑的卡片。紅色的卡片是憤怒的卡片。當(dāng)他們覺(jué)得問(wèn)題是非常憤怒就寫一張紅卡片。Linda Rising把所有的卡片鋪在地上,一邊是起點(diǎn),一邊是終點(diǎn)。在項(xiàng)目的終點(diǎn)時(shí),用技術(shù)用得實(shí)在很惱火,但是應(yīng)該在項(xiàng)目開(kāi)始提出來(lái),而不是終點(diǎn)找到痛點(diǎn)。
我今天講得是軟件架構(gòu)師的過(guò)程和角色不是一回事。軟件架構(gòu)師的角色根據(jù)不同的團(tuán)隊(duì)各有不同,角色不一樣,有個(gè)人寫了一本書《從混亂到自組團(tuán)隊(duì)》,列出不同風(fēng)格的團(tuán)隊(duì),有的團(tuán)隊(duì)是混亂型的,有的是自我組織型的。不同團(tuán)隊(duì)有不同的領(lǐng)導(dǎo)力,在混亂團(tuán)隊(duì)當(dāng)中有非常嚴(yán)明的領(lǐng)導(dǎo)把混亂加以控制,但是在自組團(tuán)隊(duì)當(dāng)中每個(gè)人都可以是領(lǐng)導(dǎo),當(dāng)然中間有不同的階段。這就是軟件架構(gòu)師的角色,這個(gè)角色在團(tuán)隊(duì)當(dāng)中跟不同人之間的關(guān)系不一樣。軟件架構(gòu)師的過(guò)程又不一樣。一方面前期設(shè)計(jì),另一個(gè)極端做了之后也不管,看最后的效果如何。如果想把這兩個(gè)極端用圖描繪出來(lái)的話,剛剛夠用的架構(gòu)剛好處在中間。并沒(méi)有大型的前期設(shè)計(jì),沒(méi)有什么都不管,講的是中庸之道。架構(gòu)有哪些結(jié)構(gòu)的重要要素,在前端設(shè)計(jì)要關(guān)注的。這時(shí)前端要識(shí)別主要的風(fēng)險(xiǎn)、消除風(fēng)險(xiǎn)。但是要有共同的愿景,讓團(tuán)隊(duì)圍繞這個(gè)愿景合作。在自組團(tuán)隊(duì)每個(gè)人可以做領(lǐng)導(dǎo)。
敏捷軟件開(kāi)發(fā)的項(xiàng)目是不是需要軟件架構(gòu)師呢?我的答案是肯定的。你的項(xiàng)目就是敏捷或者不同的結(jié)構(gòu),但是架構(gòu)是不可回避的。就算敏捷的項(xiàng)目也可能是很復(fù)雜,也可能有高安全性、高擴(kuò)展性、高性能的要求,這些都是希望從架構(gòu)師的角度解決的。
或者我們可以把這個(gè)問(wèn)題反過(guò)來(lái)問(wèn),敏捷性怎么影響到軟件架構(gòu)行業(yè)的?很多公司做大型的前期設(shè)計(jì),設(shè)計(jì)上帶來(lái)系統(tǒng)分析、帶來(lái)癱瘓,想得特別多,敏捷性搭不上的。有什么建議呢?如果團(tuán)隊(duì)處于混亂之中,沒(méi)有共同的愿景,回到一開(kāi)始,重新界定一下到底軟件架構(gòu)師做什么的,至少團(tuán)隊(duì)中有一個(gè)人是技術(shù)的領(lǐng)導(dǎo)者,他來(lái)確定方向。你規(guī)劃出他到底做一些什么東西。比如說(shuō)八個(gè)盒子,每個(gè)框里面到底哪些工作是怎么做的。另外,軟件架構(gòu)師中一些手工活,別老用電腦來(lái)做,一些草圖用手里畫,畫的比較簡(jiǎn)單一點(diǎn),貼在墻上,要想敏捷行動(dòng)要快,行動(dòng)快的話和別人很好的溝通,很好構(gòu)圖的方式就是畫草圖。我們要做的軟件系統(tǒng)是發(fā)揮作用的,能夠工作的、能夠擴(kuò)展的,能夠不斷的升級(jí)的。
作為一個(gè)軟件架構(gòu)師,實(shí)際上就是一個(gè)技術(shù)方面的領(lǐng)導(dǎo)者,要非常積極主動(dòng),帶動(dòng)團(tuán)隊(duì)而且以身作則。如果看到一個(gè)問(wèn)題,直接上去解決就行,其他人就會(huì)效仿你,看到問(wèn)題也會(huì)解決。
我們要為未來(lái)做好準(zhǔn)備,未來(lái)有其他的軟件架構(gòu)師,要提供管理、培訓(xùn),確保未來(lái)成功出師,能夠培養(yǎng)出來(lái)。不管做什么,只要適合你就行。因?yàn)槲覀兠鎸?duì)不同方案、不同技術(shù),要做的是選擇一個(gè)用起來(lái)最舒服,發(fā)揮最大效用的,所有的團(tuán)隊(duì)都一樣。像敏捷性是熱門詞匯,很吸引人。但是敏捷對(duì)于你來(lái)說(shuō)沒(méi)有四海而皆準(zhǔn)的方法幫你解決問(wèn)題。
我就講到這里,謝謝各位!
【主持人】由于時(shí)間關(guān)系,只提一個(gè)問(wèn)題。
【提問(wèn)】謝謝!剛才在您的幻燈片里面,我想起來(lái)以前聽(tīng)說(shuō)過(guò)雅虎的軟件架構(gòu)師跟雅虎的CEO說(shuō),如果說(shuō)我們要炒人的話,最先要炒的就是職位里面有架構(gòu)師或者有所謂的項(xiàng)目管理人員、職業(yè)頭銜的人,你是怎么看的?
我是這么看的,不是把這些架構(gòu)師炒掉,而是架構(gòu)師要挑合適的人才行,有非常扎實(shí)的技術(shù)功底,而且也能夠做不同的事情。因?yàn)榧軜?gòu)師選對(duì)人才能有好的領(lǐng)導(dǎo)。
【主持人】掌聲感謝Simon Brown!上午到此結(jié)束!