<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走在架構(gòu)師的大道上 Jack.Wang's home

    Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks

    本人作為一位web工程師,著眼最多之處莫過(guò)于 性能與架構(gòu),本次幸得參與sd2.0大會(huì),得以與同行廣泛交流,于此二方面,有些心得,不敢獨(dú)享,與眾博友分享,本文是這次參會(huì)與眾同撩交流的心得,有興趣者可以查看視頻

    架構(gòu)設(shè)計(jì)的幾個(gè)心得:


    一,不要過(guò)設(shè)計(jì):never over design

    這是一個(gè)常常被提及的話題,但是只要想想你的架構(gòu)里有多少功能是根本沒有用到,或者最后廢棄的,就能明白其重要性了,初涉架構(gòu)設(shè)計(jì),往往傾向于設(shè)計(jì)大而化一的架構(gòu),希望設(shè)計(jì)出具有無(wú)比擴(kuò)展性,能適應(yīng)一切需求的增加架構(gòu),web開發(fā)領(lǐng)域是個(gè)非常動(dòng)態(tài)的過(guò)程,我們很難預(yù)測(cè)下個(gè)星期的變化,而又需要對(duì)變化做出最快最有效的響應(yīng)。。

    ebay的工程師說(shuō)過(guò),他們的架構(gòu)設(shè)計(jì)從來(lái)都不能滿足系統(tǒng)的增長(zhǎng),所以他們的系統(tǒng)永遠(yuǎn)都在推翻重做。請(qǐng)注意,不是ebay架構(gòu)師的能力有問題,他們?cè)O(shè)計(jì)的架構(gòu)總是建立舊版本的瓶頸上,希望通過(guò)新的架構(gòu)帶來(lái)突破,然而新架構(gòu)帶來(lái)的突破總是在很短的時(shí)間內(nèi)就被新增需求淹沒,于是他們不得不又使用新的架構(gòu)
    web開發(fā),是個(gè)非常敏捷的過(guò)程,變化隨時(shí)都在產(chǎn)生,用戶需求千變?nèi)f化,許多方面偶然性非常高,較之軟件開發(fā),希望用一個(gè)架構(gòu)規(guī)劃以后的所有設(shè)計(jì),是不現(xiàn)實(shí)的

    二,web架構(gòu)生命周期:web architecture‘s life cycle


    既然要杜絕過(guò)設(shè)計(jì),又要保證一定的前瞻性,那么怎么才能找到其中的平衡呢?希望下面的web架構(gòu)生命周期能夠幫到你

    architecture_life_cycle

    設(shè)計(jì)的架構(gòu)需要在1-10倍的增長(zhǎng)下,通過(guò)簡(jiǎn)單的增加硬件容量就能夠勝任,而在5-10倍的增長(zhǎng)期間,請(qǐng)著手下一個(gè)版本的架構(gòu)設(shè)計(jì),使之能承受下一個(gè)10倍間的增長(zhǎng)

    google之所以能夠稱霸,不完全是因?yàn)樗阉骷夹g(shù)和排序技術(shù)有多先進(jìn),其實(shí)包括baidu和yahoo,所使用的技術(shù)現(xiàn)在也已經(jīng)大同小異,然而,google能在一個(gè)月內(nèi)通過(guò)增加上萬(wàn)臺(tái)服務(wù)器來(lái)達(dá)到足夠系統(tǒng)容量的能力確是很難被復(fù)制的


    三,緩存:Cache


    空間換取時(shí)間,緩存永遠(yuǎn)計(jì)算機(jī)設(shè)計(jì)的重中之重,從cpu到io,到處都可以看到緩存的身影,web架構(gòu)設(shè)計(jì)重,緩存設(shè)計(jì)必不可少,關(guān)于怎樣設(shè)計(jì)合理的緩存,jbosscache的創(chuàng)始人,淘寶的創(chuàng)始人是這樣說(shuō)的:其實(shí)設(shè)計(jì)web緩存和企業(yè)級(jí)緩存是非常不同的,企業(yè)級(jí)緩存偏重于邏輯,而web緩存,簡(jiǎn)單快速為好。。

    緩存帶來(lái)的問題是什么?是程序的復(fù)雜度上升,因?yàn)閿?shù)據(jù)散布在多個(gè)進(jìn)程,所以同步就是一個(gè)麻煩的問題,加上集群,復(fù)雜度會(huì)進(jìn)一步提高,在實(shí)際運(yùn)用中,采用怎樣的同步策略常常需要和業(yè)務(wù)綁定

    老錢為搜狐設(shè)計(jì)的帖子設(shè)計(jì)了鏈表緩存,這樣既可以滿足靈活插入的需要,又能夠快速閱讀,而其他一些大型社區(qū)也經(jīng)常采用類此的結(jié)構(gòu)來(lái)優(yōu)化帖子列表,memcache也是一個(gè)常常用到的工具

    錢宏武談架構(gòu)設(shè)計(jì)視頻 http://211.100.26.82/CSDN_Live/140/qhw.flv

    Cache的常用的策略是:讓數(shù)據(jù)在內(nèi)存中,而不是在比較耗時(shí)的磁盤上。從這個(gè)角度講,mysql提供的heap引擎(存儲(chǔ)方式)也是一個(gè)值得思考的方法,這種存儲(chǔ)方法可以把數(shù)據(jù)存儲(chǔ)在內(nèi)存中,并且保留sql強(qiáng)大的查詢能力,是不是一舉兩得呢?

    我們這里只說(shuō)到了讀緩存,其實(shí)還有一種寫緩存,在以內(nèi)容為主的社區(qū)里比較少用到,因?yàn)檫@樣的社區(qū)最主要需要解決的問題是讀問題,但是在處理能力低于請(qǐng)求能力時(shí),或者單個(gè)希望請(qǐng)求先被緩存形成塊,然后批量處理時(shí),寫緩存就出現(xiàn)了,在交互性很強(qiáng)的社區(qū)設(shè)計(jì)里我們很容易找到這樣的緩存

    四,核心模塊一定要自己開發(fā):DIY your core module


    這點(diǎn)我們是深有體會(huì),錢宏武和云風(fēng)也都有談到,我們經(jīng)常傾向于使用一些開源模塊,如果不涉及核心模塊,確實(shí)是可以的,如果涉及,那么就要小心了,因?yàn)楫?dāng)訪問量達(dá)到一定的程度,這些模塊往往都有這樣那樣的問題,當(dāng)然我們可以把問題歸結(jié)為對(duì)開源的模塊不熟悉,但是不管怎樣,核心出現(xiàn)問題的時(shí)候,不能完全掌握其代碼是非常可怕的


    五,合理選擇數(shù)據(jù)存儲(chǔ)方式:reasonable data storage


    我們一定要使用數(shù)據(jù)庫(kù)嗎,不一定,雷鳴告訴我們搜索不一定需要數(shù)據(jù)庫(kù),云風(fēng)告訴我們,游戲不一定需要數(shù)據(jù)庫(kù),那么什么時(shí)候我們才需要數(shù)據(jù)庫(kù)呢,為什么不干脆用文件來(lái)代替他呢?
    首先我們需要先承認(rèn),數(shù)據(jù)庫(kù)也是對(duì)文件進(jìn)行操作。我們需要數(shù)據(jù)庫(kù),主要是使用下面這幾個(gè)功能,一個(gè)是數(shù)據(jù)存儲(chǔ),一個(gè)是數(shù)據(jù)檢索,在關(guān)系數(shù)據(jù)庫(kù)中,我們其實(shí)非常在乎數(shù)據(jù)庫(kù)的復(fù)雜搜索的能力,看看一個(gè)統(tǒng)計(jì)用的tsql就知道了(不用仔細(xì)讀,掃一眼就可以了)

    select   c.Class_name,d.Class_name_2,a.Creativity_Title,b.User_name,(select   count(Id)   from   review   where   Reviewid=a.Id)   as   countNum   from   Creativity   as   a,User_info   as   b,class   as   c,class2   as   d   where   a.user_id=b.id   and   a.Creativity_Class=c.Id   and   a.Creativity_Class_2=d.Id
    select   a.Id,max(c.Class_name),(max(d.Class_name_2),max(a.Creativity_Title),max(b.User_name),count(e.Id)   as   countNum   from   Creativity   as   a,User_info   as   b,class   as   c,class2   as   d,review   as   e   where   a.user_id=b.id   and   a.Creativity_Class=c.Id   and   a.Creativity_Class_2=d.Id   and   a.Id=e.Reviewid   group   by   a.Id ..............................................

    我們可以看出需要數(shù)據(jù)庫(kù)關(guān)聯(lián),排序的能力,這個(gè)能力在某些情況下非常重要,但是如果你的網(wǎng)站的常規(guī)操作,全是這樣復(fù)雜的邏輯,那效率一定是非常低的,所以我們常常在數(shù)據(jù)庫(kù)里加入許多冗余字段,來(lái)減小簡(jiǎn)單查詢時(shí)關(guān)聯(lián)等操作帶來(lái)的壓力,我們看看下面這張圖,可以看到數(shù)據(jù)庫(kù)的設(shè)計(jì)重心,和網(wǎng)站(指內(nèi)容型社區(qū))需要面對(duì)的問題實(shí)際是有一些偏差的

    database

    同樣其他一些軟件產(chǎn)品也遇到同樣的問題所以具我了解,有許多特殊的運(yùn)用都有自己設(shè)計(jì)的特殊數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)與方法,比如有的大型服務(wù)程序采取樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),lucene使用文件來(lái)存儲(chǔ)索引和文件

    從另外一個(gè)角度上看,使用數(shù)據(jù)庫(kù),意味著數(shù)據(jù)和表現(xiàn)是完全分離的(這當(dāng)然是經(jīng)典的設(shè)計(jì)思路),也就是說(shuō)當(dāng)需要展示數(shù)據(jù)時(shí),不得不需要一個(gè)轉(zhuǎn)換的過(guò)程,也可以說(shuō)是綁定的過(guò)程,當(dāng)網(wǎng)站具備一定規(guī)模的時(shí)候,數(shù)據(jù)庫(kù)往往成為效率的瓶頸,所以許多網(wǎng)站也采用直接書寫靜態(tài)文件的方法來(lái)避免讀取操作時(shí)的綁定

    這并不是說(shuō)我們從今天起就可以把我們親愛的數(shù)據(jù)庫(kù)打入冷宮,而是我們?cè)谠O(shè)計(jì)數(shù)據(jù)的持久化時(shí),需要根據(jù)實(shí)際情況來(lái)選擇存儲(chǔ)方式,而數(shù)據(jù)庫(kù)不過(guò)是其中一個(gè)選項(xiàng)


    六,搞清楚誰(shuí)是最重要的人:who's the most important guy


    在用例需求分析的時(shí)候常常講到涉眾,就是和你的設(shè)計(jì)息息相關(guān)的人,在web中我們一定以為最重要的涉眾莫過(guò)于用戶了。,在一個(gè)傳統(tǒng)的互動(dòng)社區(qū)開發(fā)中,最重要的東西是內(nèi)容,用戶產(chǎn)生內(nèi)容,所以用戶就是上帝,至于內(nèi)容挑選工具,不就是給坐我后面三排的妹妹們用的嗎?湊或行了,實(shí)在有問題我就在數(shù)據(jù)里手動(dòng)幫你加得了。。這大概是眼下許多小型甚至中型網(wǎng)站技術(shù)人員的普遍想法。錢宏武在他的講座里談到了這個(gè)問題:實(shí)際上網(wǎng)站每天產(chǎn)生的內(nèi)容非常的多,普通人是不可能看完的,而編輯負(fù)責(zé)把精華的內(nèi)容推薦到首頁(yè)上,所以很多用戶讀到的內(nèi)容其實(shí)都依賴于編輯的推薦,所以設(shè)計(jì)讓編輯工作方便的工具也是非常重要,有時(shí)甚至是最重要的。


    七,不要執(zhí)著于文檔:don't be crazy about document


    web開發(fā)的文檔重要嗎?什么文檔最重要?我的看法是web開發(fā)中交流>文檔,

    現(xiàn)在大的軟件公司比較流行的做法是:
    注重產(chǎn)品設(shè)計(jì)文檔,在這種方法里,產(chǎn)品文檔非常詳盡,并且沒有歧義,開發(fā)人員基于設(shè)計(jì)文檔開發(fā),測(cè)試人員基于設(shè)計(jì)文檔制定測(cè)試方案,任何新人都可以通過(guò)閱讀產(chǎn)品設(shè)計(jì)文檔來(lái)了解項(xiàng)目的概況

    而web項(xiàng)目從概念到實(shí)現(xiàn)的時(shí)間是非常短的,而且越短越好,并且由于變化迅速,要想寫出完整的產(chǎn)品和需求文檔是幾乎不可能的,大多數(shù)情況是等你寫出完備的文檔,項(xiàng)目早就是另外一個(gè)樣子,但是沒有文檔的問題是,如果團(tuán)隊(duì)發(fā)生變化,添加新成員怎樣才能了解軟件的結(jié)構(gòu)和概念呢,一種是每個(gè)人都了解軟件的整個(gè)結(jié)構(gòu),除非你的團(tuán)隊(duì)整體消失,否則任何一個(gè)人都能夠擔(dān)當(dāng)培養(yǎng)新人的責(zé)任,這種face2face交流比文檔有效率很多。

    于是就有了前office開發(fā)者,現(xiàn)任yahoo中國(guó)某產(chǎn)品開發(fā)負(fù)責(zé)人的劉振飛所感覺到的落差,他說(shuō),我們的項(xiàng)目是吵出來(lái)的,我聽完會(huì)心一笑


    八,團(tuán)隊(duì):team


    不要專家團(tuán)隊(duì),而要外科手術(shù)式的團(tuán)隊(duì),你的團(tuán)隊(duì)里一定要有清道夫,需要有弓箭手,讓他們和項(xiàng)目一起成長(zhǎng),才是項(xiàng)目負(fù)責(zé)人的最大成就

     

    總結(jié):

    0)架構(gòu)是一種權(quán)衡

    architecture

    1)web開發(fā)的特點(diǎn)是是:沒有太復(fù)雜的技術(shù)難點(diǎn),一切在于迅速的把握需求,其實(shí)這正式敏捷開發(fā)的要旨所在,一切都可以非常快速的建立,非常快速的重構(gòu),我們的開發(fā)工具,底層庫(kù)和框架,包括搜索引擎和web文檔提供的幫助,都提我們供給了敏捷的能力。

    2)此外,相應(yīng)的,最有效率的交流方式必須留給web開發(fā),那就是face2face(面對(duì)面),不要太擔(dān)心你的設(shè)計(jì)不能被完備的文檔所保留下來(lái),他們會(huì)以交流,代碼和小卡片的方式保存下來(lái)

    3)人的因素會(huì)更加重要,無(wú)論是對(duì)用戶的需求,還是開發(fā)人員的素質(zhì)。

     

    另:有關(guān)web效率,有著名的14條規(guī)則,由yahoo性能效率小組所總結(jié),并廣為流傳。業(yè)已出現(xiàn)相關(guān)插件(YSlow),針對(duì)具體網(wǎng)頁(yè)按彼規(guī)則評(píng)分,這次該小組負(fù)責(zé)人Tenni Theurer也受邀來(lái)到此次大會(huì),我把Tenni小姐(之前真的沒有想到她是個(gè)女孩,并且如此年輕)和她的團(tuán)隊(duì)的14 rules列在下面

  • Make Fewer HTTP Requests
  • Use a Content Delivery Network
  • Add an Expires Header
  • Gzip Components
  • Put CSS at the Top
  • Move Scripts to the Bottom
  • Avoid CSS Expressions
  • Make JavaScript and CSS External
  • Reduce DNS Lookups
  • Minify JavaScript
  • Avoid Redirects
  • Remove Duplicate Scripts
  • Configure ETags
  • Make Ajax Cacheable

     

    通過(guò)安裝firebugYSlow這兩個(gè)firefox插件(請(qǐng)注意要先安裝firebug再安裝yslow,下載后拖動(dòng)到firefox里即可)我們可以看到你的網(wǎng)頁(yè)根據(jù)下面的規(guī)則的評(píng)分,這是我在博客園博客首頁(yè)的評(píng)分截圖,上面D表示總分,下面是單項(xiàng)評(píng)分,A最好F最差,不知道還有沒有G :)

    YSlow

     

    文章來(lái)源: http://blog.csdn.net/yizhu2000/archive/2007/12/04/1915554.aspx

    相關(guān)連接

    yahoo性能團(tuán)隊(duì):http://developer.yahoo.com/performance/


  •  

    程序開發(fā)是一方面,系統(tǒng)架構(gòu)設(shè)計(jì)(硬件+網(wǎng)絡(luò)+軟件)是另一方面。

    中國(guó)的網(wǎng)絡(luò)分南北電信和網(wǎng)通,訪問的ip就要區(qū)分南北進(jìn)入不同的網(wǎng)絡(luò);

    然后是集群,包括應(yīng)用服務(wù)器集群和web服務(wù)器集群,應(yīng)用服務(wù)器集群可以采用apache+tomcat集群和weblogic集群等,web服務(wù)器集群可以用反向代理,也可以用NAT的方式,或者多域名解析都可以;

    軟件架構(gòu)方面,做網(wǎng)站首先需要很多web服務(wù)器存儲(chǔ)靜態(tài)資源,比如圖片、視頻、靜態(tài)頁(yè)等,千萬(wàn)不要把靜態(tài)資源和應(yīng)用服務(wù)器放在一起;

    頁(yè)面數(shù)據(jù)調(diào)用更要認(rèn)真設(shè)計(jì),一些數(shù)據(jù)查詢可以不通過(guò)數(shù)據(jù)庫(kù)的方式,實(shí)時(shí)性要求不高的可以使用lucene來(lái)實(shí)現(xiàn),即使有實(shí)時(shí)性的要求也可以用lucene,lucene+compass還是非常優(yōu)秀的;

    不能用lucene實(shí)現(xiàn)的可以用緩存,分布式緩存可以用memcached,如果有錢的話用10來(lái)臺(tái)機(jī)器做緩存,>10G的存儲(chǔ)量相信存什么都?jí)蛄耍蝗绻麤]錢的話可以在頁(yè)面緩存和數(shù)據(jù)緩存上下功夫,多用OSCACHE和EHCACHE,SWARMCACHE也可以,不過(guò)據(jù)說(shuō)同步性不是很好;

    然后很重要的一點(diǎn)就是數(shù)據(jù)庫(kù),大型網(wǎng)站要用oracle,數(shù)據(jù)方面操作盡量多用存儲(chǔ)過(guò)程,絕對(duì)提升性能;同時(shí)要讓DBA對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化,優(yōu)化后的數(shù)據(jù)庫(kù)與沒優(yōu)化的有天壤之別;同時(shí)還可以擴(kuò)展分布式數(shù)據(jù)庫(kù),以后這方面的研究會(huì)越來(lái)越多;

    新聞?lì)惖木W(wǎng)站可以用靜態(tài)頁(yè)存儲(chǔ),采用定時(shí)更新機(jī)制減輕服務(wù)器負(fù)擔(dān);首頁(yè)每個(gè)小模塊可以使用oscache緩存,這樣不用每次都拉數(shù)據(jù);

    最后是寫程序了,一個(gè)好的程序員寫出來(lái)的程序會(huì)非常簡(jiǎn)潔、性能很好,一個(gè)初級(jí)程序員可能會(huì)犯很多低級(jí)錯(cuò)誤,這也是影響網(wǎng)站性能的原因之一。





    本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見可給我留言,愿共同學(xué)習(xí)進(jìn)步。
    posted on 2008-04-27 21:10 Jack.Wang 閱讀(13002) 評(píng)論(4)  編輯  收藏 所屬分類: 架構(gòu)師篇

    Feedback

    # re: web架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)分享 2008-04-27 23:16 和風(fēng)細(xì)雨
    留個(gè)記號(hào)先  回復(fù)  更多評(píng)論
      

    # re: web架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)分享 2008-04-28 10:57 王能
    http://www.tudousee.cn 土豆網(wǎng)電視劇前線 這個(gè)網(wǎng)站的web設(shè)計(jì)如何呢?  回復(fù)  更多評(píng)論
      

    # re: web架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)分享 2008-04-29 13:46 過(guò)河卒
    拜讀,先前在那看過(guò),今天又一次看 很有啟發(fā)。  回復(fù)  更多評(píng)論
      

    # re: web架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)分享 2008-05-26 22:41 葉澍成
    這個(gè)文章理想大于實(shí)踐  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲精品亚洲人成人网| 亚洲国产aⅴ综合网| 爽爽日本在线视频免费| 国产aa免费视频| 久久久久国产成人精品亚洲午夜| 亚洲熟妇中文字幕五十中出| 亚洲一区免费观看| 亚洲精品二三区伊人久久| 精品无码专区亚洲| 好湿好大好紧好爽免费视频| 4虎1515hh永久免费| 天天摸夜夜摸成人免费视频| 亚洲日韩精品无码专区网站 | 免费专区丝袜脚调教视频| 最近中文字幕无免费视频| 亚洲成a人片在线播放| 久久久久久亚洲精品| 精品久久亚洲中文无码| 免费人成视频在线播放| 一区二区三区观看免费中文视频在线播放 | 亚洲kkk4444在线观看| 国产精品亚洲专区在线播放| eeuss影院免费直达入口| 久久99热精品免费观看动漫| 免费高清资源黄网站在线观看| 亚洲人成图片小说网站| 亚洲最大天堂无码精品区| 国产日韩精品无码区免费专区国产| 亚洲免费观看网站| 亚洲国产精品国产自在在线 | 日韩亚洲产在线观看| 中文日本免费高清| 一个人看的www在线观看免费 | 亚洲国产a级视频| 91亚洲自偷手机在线观看| 免费大片黄在线观看| 午夜免费1000部| 中文字幕专区在线亚洲| 亚洲精品福利你懂| 久久免费精品视频| 免费a级毛片在线观看|