【转】为什么很多看起来不是很复杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发?...
先說(shuō)你看到的頁(yè)面上,最重要的幾個(gè):
【搜索商品】——這個(gè)功能,如果你有幾千條商品,完全可以用select * from tableXX where title like %XX%這樣的操作來(lái)搞定。但是——當(dāng)你有10000000000(一百億)條商品的時(shí)候,任何一個(gè)數(shù)據(jù)庫(kù)都無(wú)法存放了,請(qǐng)問(wèn)你怎么搜索?這里需要用到分布式的數(shù)據(jù)存儲(chǔ)方案,另外這個(gè)搜索也不可能直接從數(shù)據(jù)庫(kù)里來(lái)取數(shù)據(jù),必然要用到搜索引擎(簡(jiǎn)單來(lái)說(shuō)搜索引擎更快)。好,能搜出商品了,是否大功告成可以啵一個(gè)了呢?早著呢,誰(shuí)家的商品出現(xiàn)在第一頁(yè)?這里需要用到巨復(fù)雜的排序算法。要是再根據(jù)你的購(gòu)買行為做一些個(gè)性化的推薦——這夠一幫牛叉的算法工程師奮斗終生了。
【商品詳情】——就是搜索完畢,看到你感興趣的,點(diǎn)擊查看商品的頁(yè)面,這個(gè)頁(yè)面有商品的屬性、詳細(xì)描述、評(píng)價(jià)、賣家信息等等,這個(gè)頁(yè)面的每天展示次數(shù)在30億以上,同樣的道理,如果你做一個(gè)網(wǎng)站每天有10個(gè)人訪問(wèn),你絲毫感覺不到服務(wù)器的壓力,但是30億,要解決的問(wèn)題就多了去了。首先,這些請(qǐng)求不能直接壓到數(shù)據(jù)庫(kù)上,任何單機(jī)或分布式的數(shù)據(jù)庫(kù),承受30億每天的壓力,都將崩潰到完全沒有幸福感,這種情況下要用到的技術(shù)就是大規(guī)模的分布式緩存,所有的賣家信息、評(píng)價(jià)信息、商品描述都是從緩存里面來(lái)取到的,甚至更加極致的一點(diǎn)“商品的瀏覽量”這個(gè)信息,每打開頁(yè)面一次都要刷新,你猜能夠從緩存里面來(lái)取嗎?淘寶做到了,整個(gè)商品的詳情都在緩存里面。
【商品圖片】——一個(gè)商品有5個(gè)圖片,商品描述里面有更多圖片,你猜淘寶有多少?gòu)垐D片要存儲(chǔ)?100億以上。這么多圖片要是在你的硬盤里面,你怎么去查找其中的一張?要是你的同學(xué)想拷貝你的圖片,你需要他準(zhǔn)備多少塊硬盤?你需要配置多少大的帶寬?你們的網(wǎng)卡是否能夠承受?你需要多長(zhǎng)時(shí)間拷貝給他?這樣的規(guī)模,很不幸市面上已經(jīng)沒有任何商業(yè)的解決方案,最終我們必須自己來(lái)開發(fā)一套存儲(chǔ)系統(tǒng),如果你聽說(shuō)過(guò)google的GFS,我們跟他類似,叫TFS。順便說(shuō)一下,騰訊也有這樣的一套,也叫TFS。
【廣告系統(tǒng)】——淘寶上有很多廣告,什么,你不知道?那說(shuō)明我們的廣告做的還不錯(cuò),居然很多人不認(rèn)為它是廣告,賣家怎么出價(jià)去買淘寶的廣告位?廣告怎么展示?怎么查看廣告效果?這又是一套算法精奇的系統(tǒng)。
【BOSS系統(tǒng)】——淘寶的工作人員怎么去管理這么龐大的一個(gè)系統(tǒng),例如某時(shí)刻突然宣布某位作家的作品全部從淘寶消失,從數(shù)據(jù)庫(kù)到搜索引擎到廣告系統(tǒng),里面的相關(guān)數(shù)據(jù)在幾分鐘內(nèi)全部消失,這又需要一個(gè)牛叉的后臺(tái)支撐系統(tǒng)。
【運(yùn)維體系】——支持這么龐大的一個(gè)網(wǎng)站,你猜需要多少臺(tái)服務(wù)器?幾千臺(tái)?那是零頭。這么多服務(wù)器,上面部署什么操作系統(tǒng),操作系統(tǒng)的內(nèi)核能否優(yōu)化?Java虛擬機(jī)能否優(yōu)化?通信模塊有沒有榨取性能的空間?軟件怎么部署上去?出了問(wèn)題怎么回滾?你裝過(guò)操作系統(tǒng)吧,優(yōu)化過(guò)吧,被360坑過(guò)沒,崩潰過(guò)沒?這里面又有很多門道。
不再多寫了,除了上面提到的這些,還有很多很多需要做的技術(shù),當(dāng)然并不是這些東西有多么高不可攀,任何復(fù)雜的龐大的東西都是從小到大做起來(lái)的,里面需要牛叉到不行的大犇,也需要充滿好奇心的菜鳥,最后這一句,你當(dāng)我是別有用心好了。
===============================華麗的分割線====================================
?
不單局限于網(wǎng)站,對(duì)于所有的軟件來(lái)說(shuō),從軟件工程學(xué)的角度來(lái)說(shuō),其需求大體可以分為功能性需求(functional Requirements)和非功能性需求(nonfunctional Requirements)兩個(gè)大的部分。
功能性需求,一般是我們顯性易見的,就是一般實(shí)現(xiàn)了什么功能,提供了什么服務(wù),大體我認(rèn)為問(wèn)題中提到,或者我們?nèi)粘Kf(shuō)的:“看起來(lái)復(fù)雜不復(fù)雜”,基本上都會(huì)是針對(duì)功能性需求而言的。如果拿google的搜索服務(wù)舉例來(lái)說(shuō),那就是:
提供一個(gè)輸入框, 提供一個(gè)按鈕,用戶在輸入框里輸入關(guān)鍵字,按了按鈕以后,可以搜索出相應(yīng)結(jié)果。
功能性需求,會(huì)因?yàn)椴煌木W(wǎng)站,不同的軟件,不同的業(yè)務(wù)和使用目的,大相徑庭,五花八門,不一而論。
非功能性需求,以下應(yīng)用維基百科的定義(雖然有些晦澀和繞口,但是我認(rèn)為是比較精到和準(zhǔn)確的)
一般會(huì)在系統(tǒng)設(shè)計(jì)(英語(yǔ):Systems design)中詳細(xì)列出實(shí)現(xiàn)功能需求的計(jì)劃,而會(huì)在系統(tǒng)架構(gòu)(英語(yǔ):Systems architecture)中詳細(xì)列出實(shí)現(xiàn)非功能性需求的計(jì)劃。一般而言,功能需求會(huì)定義系統(tǒng)的行為,而非功能性需求會(huì)定義系統(tǒng)的特性。
非功能性需求一般會(huì)稱為系統(tǒng)的“品質(zhì)”,有時(shí)也會(huì)稱為“限制”、“品質(zhì)屬性”、“品質(zhì)目標(biāo)”、“品質(zhì)屬性”、“品質(zhì)服務(wù)需求”或“非行為性的需求”。有許多非功能性需求的英文都是以“ilitiy”結(jié)尾,例如穩(wěn)定性(stability)及可移植性(portability),因此非功能性需求有時(shí)也稱為“ilities”。
非功能性需求可以分為以下的二類:
運(yùn)行品質(zhì)(Execution qualities),可以在系統(tǒng)運(yùn)作時(shí)觀察到的品質(zhì),例如保安性及易用性等。
發(fā)展品質(zhì)(Evolution qualities),和軟件系統(tǒng)結(jié)構(gòu)及開發(fā)過(guò)程有關(guān)的品質(zhì),例如軟件可測(cè)試性(英語(yǔ):software testability)、可維護(hù)性、可擴(kuò)展性、可伸縮性(scalability)等
非功能性需求一般是隱性的,容易被菜鳥程序員,設(shè)計(jì)師們忽略。非功能性需求不同于功能性需求,它在不同的網(wǎng)站,軟件上,擁有一定的共性,就例如@子柳 提到的海量文件存儲(chǔ)的問(wèn)題上,淘寶,騰訊,google都遇到了一樣的問(wèn)題,研發(fā)了類似的解決方案(TFS,TFS和GFS)。
非功能性需求的分類方法較多,并沒有業(yè)界通行和一致的標(biāo)準(zhǔn),但是大多數(shù)殊途同歸,名稱/叫法以及分類方法上可能略有差異,但是其含義和指向一般是趨向一致的,我簡(jiǎn)單介紹一下我一般較多采用的分類:
事實(shí)上,從我的經(jīng)驗(yàn)來(lái)看,一般來(lái)說(shuō),很多軟件項(xiàng)目及產(chǎn)品,其在非功能性需求上的成本,難度和工作量,是要超過(guò)功能性需求的。在特定的軟件領(lǐng)域,例如網(wǎng)站(尤其是淘寶,facebook這樣海量用戶規(guī)模的網(wǎng)站),金融(銀行證券),電信領(lǐng)域,其非功能性需求實(shí)現(xiàn)的重要性,工作量,技術(shù)難度要遠(yuǎn)遠(yuǎn)遠(yuǎn)遠(yuǎn)大于功能性需求的實(shí)現(xiàn)。
而且,功能性的需求的實(shí)現(xiàn),其實(shí)在大多數(shù)情況下,更依賴于業(yè)務(wù)的高手(或者好的產(chǎn)品經(jīng)理)而不是技術(shù)的高手,而非功能性需求的實(shí)現(xiàn),恰恰是挑戰(zhàn)技術(shù)高手的重要課題。
一個(gè)最典型的極限非功能性需求的例子就是電信的計(jì)費(fèi)系統(tǒng),其實(shí)基本功能很簡(jiǎn)單,獲取通話時(shí)長(zhǎng),按照費(fèi)率公式算個(gè)錢出來(lái),但是放到海量的用戶,實(shí)時(shí)的計(jì)費(fèi)要求中來(lái)看,這是一個(gè)極具技術(shù)挑戰(zhàn)的活。
還有一個(gè)經(jīng)典的案例是,中國(guó)某地方性銀行(注意僅僅是地方性的銀行),想要引入一個(gè)柜面服務(wù)的系統(tǒng),找到了新家坡的一個(gè)廠商,他們?cè)跂|南亞銀行業(yè)有很多案例,而且功能設(shè)計(jì)非常完善合理和先進(jìn)。但是這家地方性銀行引入這個(gè)系統(tǒng)以后,2周之內(nèi)發(fā)行了幾十萬(wàn)張信用卡,這系統(tǒng)就頂不住崩潰了。這就是典型的功能性需求實(shí)現(xiàn)完美,但是非功能性缺陷的例子。
從我的經(jīng)驗(yàn)來(lái)看,一般來(lái)說(shuō),非功能性需求中,性能/容量,以及安全的要求,一般是技術(shù)挑戰(zhàn)最多,內(nèi)涵最豐富,成本最高,最值得關(guān)注的領(lǐng)域,當(dāng)然,現(xiàn)在易用性(UE)也是一個(gè)極度收到重視的領(lǐng)域。
有志于架構(gòu)師取向的IT技術(shù)人員,非功需求實(shí)現(xiàn)的領(lǐng)域,是一個(gè)必須關(guān)注,必須熟悉的領(lǐng)域。
而本問(wèn)題最大的根源在于,只看到了網(wǎng)站功能性需求的部分,而沒有注意到非功的部分,對(duì)于非專業(yè)的IT技術(shù)人員來(lái)說(shuō),這很正常,但是對(duì)于IT技術(shù)人員來(lái)說(shuō),是需要認(rèn)真關(guān)注的必修課。
最后,舉一個(gè)可能不太恰當(dāng)?shù)睦觼?lái)說(shuō)明一下:
100米的路,從這頭到那頭,看起來(lái)是件很簡(jiǎn)單的事情。
但是要求10秒之內(nèi)要從這頭跑到那頭,這就需要田徑高手了。
如果還要求,10秒之內(nèi)跑完,要連著反復(fù)跑好幾趟,路上可能有積水濕滑障礙物,那我覺得就只有去找博爾特劉翔之類的頂尖高手去聊聊了
轉(zhuǎn)載自:http://www.zhihu.com/question/20303645?group_id=46788351#answer-1324063
謝謝瀏覽!
轉(zhuǎn)載于:https://www.cnblogs.com/Music/p/what-you-see-is-not-what-you-get.html
總結(jié)
以上是生活随笔為你收集整理的【转】为什么很多看起来不是很复杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: EDM电子邮件营销策划常用创意
- 下一篇: 计算机认知矫正发展史,计算机认知矫正疗法