大型電子商務(wù)網(wǎng)站架構(gòu),摘抄 7.同一個網(wǎng)站的多語言該如何處理是好,使用配置文件然后cookie或url來判別?===客戶是自己公司,使用標準方法即可8.電子商務(wù)網(wǎng)站最多的就是 商品的打折方式和積分的贈送了,這里要怎么設(shè)計才好(工廠模式)?===采購成熟的規(guī)則引擎9.如果同一時間并發(fā)大量訂單的話,如果確保一個訂單的有效提交呢?==電子商務(wù)一般要使用MQ,推薦IBM MQ;使用MSMQ也可第一點是數(shù)據(jù)庫要設(shè)計好,要達到什么級別,你可能需要考慮哪些表需要拆分,哪些表的核心數(shù)據(jù)需要冗余,如果是mysql,還要考慮其他的問題,比如存儲引擎。新聞肯定是要生成純靜態(tài)頁,對數(shù)據(jù)庫壓力就小很多,不過靜態(tài)頁也有管理上的不方便,更新刪除添加都要對磁盤文件進行操作做一個自定義緩存層,對緩存邏輯進行控制,可以采用第三方緩存模塊,如果使用.net來做,可以層層緩存,頁面緩存,數(shù)據(jù)緩存(memcache,不過在win下效率不高)電子商務(wù)網(wǎng)站特點就是對事務(wù)的嚴格,需要數(shù)據(jù)庫設(shè)計的時候要求高性能,也需要合適的索引,支持高并發(fā),經(jīng)常對產(chǎn)品表用戶表等進行索引檢查,是否有很多索引掃描和表掃描(即使是局部的,也要將“局部”控制到最小范圍)mssql語句對不需要事務(wù)的查詢要附帶上with(nolock),以利于并發(fā)更新。有些功能模塊不能按照想當然的方式開發(fā),比如產(chǎn)品訪問次數(shù),切不可將這些更新非常頻繁的字段置于核心表內(nèi),明確的做法是將其剝離開來 還有就是切不可經(jīng)常性將字段設(shè)計成bool類型,這樣會給以后的擴展留出路,即使是男女這種字段,也建議采用tiny類型 其他還有就是在產(chǎn)品設(shè)計的時候充分考慮seo,網(wǎng)站目錄結(jié)構(gòu)清晰可讀,而不是帶著一串串的查詢參數(shù)。對安全要有整體的把握,最好全都是用存儲過程,在項目上線前將數(shù)據(jù)庫存儲過程全部導(dǎo)出再查找貌似exec的語句,查找是否需要替換成sp_executesql。另外,如果采用mssql,全文搜索直接用mssql fte就可以,速度和精確度都還是可以的,最重要的是維護和管理開發(fā)很簡單。打折的處理可以按照電信的一次,二次批價功能,如果你做過電信方面的系統(tǒng)。當然也可以設(shè)計得更簡單的一些。 靜態(tài)的頁面建議使用CDN加速,以解決網(wǎng)通和電信之間訪問速度的問題;數(shù)據(jù)的緩存方面建議考慮用memcache,另外也可以分別在表現(xiàn)層和數(shù)據(jù)層利用.net中的現(xiàn)存緩存機制作業(yè)可;簡單執(zhí)行的sql可以不用存儲過程,存儲過程會占用數(shù)據(jù)庫服務(wù)器的處理時間,造成死鎖;mvc建議還是做些CMS的項目上應(yīng)用,電子商城不是很適合,個人觀點。url上可以做轉(zhuǎn)義,使url顯示更友好;數(shù)據(jù)庫建議建立分布數(shù)據(jù)庫,這樣可以轉(zhuǎn)移查詢和大訪問量對數(shù)據(jù)庫帶來壓力;圖片可以考慮單獨放在一臺服務(wù)器上;1.三層架構(gòu)2.使用手寫sql,手寫entity(生成也可),緩存反射綁定(不是緩存數(shù)據(jù)哦,緩存映射關(guān)系),要考慮網(wǎng)站的長期發(fā)展還是手寫吧 靈活 性能也好3.沒有這種問題,商業(yè)驅(qū)動的,純購物就好了,千萬別搞什么圈子,wiki4.純.net的mvc不建議,webform不搞viewstate,不搞服務(wù)端控件(除repeater)再加點mvc的思想已足夠用了5.不需要緩存數(shù)據(jù)(除搜索產(chǎn)品部分),要考慮多臺服務(wù)器的程序快速部署,config文件會很多,config要序列化緩存6.當然是先生成好了,參照jd吧,按業(yè)務(wù)每張圖片對應(yīng)幾個不同大小的圖7.據(jù)經(jīng)驗,電子商務(wù)網(wǎng)站僅靠中英雙語來達到多語言是不靠譜的(文化 用戶習(xí)慣不是簡單的語言切換),如果想真正運營英語的就要重新開發(fā)一個版本8.不搞模式9.負載均衡(web,db)+ssb異步處理數(shù)據(jù)10.你是業(yè)務(wù)類型的日志還是異常日志? 前臺訂單流程上異常日志不需要了,找個工具錄個腳本不停的跑 保證隨時發(fā)現(xiàn)問題發(fā)郵件就可以了11.找第三方搜索組件 類似endeca的12.負載均衡挺簡單的,初期靠軟件就可以,一切圖片找第三方放cdn,前臺網(wǎng)站用到ajax的地方很少,如果用的話jquery 1,一個電子商務(wù)網(wǎng)站用戶99.5%的行為時Find2、對于商品檢索部分,能不用數(shù)據(jù)庫就不用數(shù)據(jù)庫(網(wǎng)上切詞等相關(guān)的開源平臺很多)3、分布式緩存(Memcached 、Volecity),個人測試volecity 3還是不錯的4、系統(tǒng)設(shè)計時必須要考慮可運營。從這個角度去設(shè)計系統(tǒng)5、對于電子商務(wù)網(wǎng)站改動很頻繁,必須考慮架構(gòu)設(shè)計如何適應(yīng)頻繁的版本更新6、必須設(shè)計一個好的單點登錄系統(tǒng)。7、建議能不用sqlserver就不用它。8、對于大型電子商務(wù)網(wǎng)站來說,系統(tǒng)的I/O是起決定因素而不是CPU和內(nèi)存。1.項目劃分是否會有問題,圖中分別是 實體層,數(shù)據(jù)訪問接口層,數(shù)據(jù)訪問層,業(yè)務(wù)邏輯接口層,業(yè)務(wù)邏輯,網(wǎng)站A,B,C項目劃分其實不重要,重要的的是你在寫代碼的時候是否能把代碼合理的分到對應(yīng)的項目里。2.數(shù)據(jù)訪問層是要開發(fā)效率(NBear,Linq,Nh等),還是訪問效率(直接使用sql等)?是否可以先使用開發(fā)效率高的,等日后訪問量大了,再重寫并替換數(shù)據(jù)訪問層?開發(fā)效率優(yōu)先,訪問量大了以后,我相信是有錢投到硬件上的,在你程序?qū)懙牟皇呛軤€的情況下,升級硬件遠比優(yōu)化程序節(jié)省成本。3.網(wǎng)站被切割成了多個子網(wǎng)站,有一些控件(如header,footer)是要共享的,如何跨網(wǎng)站項目共享這些控件呢?那就做成自定義控件啦。4.ms的mvc 1.0也出來不少時間了,是否已經(jīng)夠成熟運用到項目中?或者是網(wǎng)站后臺使用webform的,前臺使用mvc?推薦使用使用webform的,前臺使用mvc,對于前臺來說使用mvc能更好的提升性能,更方便的更換頁面表現(xiàn)形式。后臺界面相對穩(wěn)定,用webform可以提高開發(fā)效率。5.網(wǎng)站數(shù)據(jù)的緩存是自己開發(fā)一個hashtable什么的來維護呢,還是使用Memcached ?初期建議用hashtable,因為簡單,將來升級到Memcached 。6.縮略圖的處理,我看有的網(wǎng)站是在上傳圖片的時候直接生成,有的是在httpmodle里處理,訪問的時候生成.直接生成縮略圖的好處是節(jié)約性能。httpmodle相反,每次瀏覽圖片的時候都會生成新的圖片,服務(wù)器壓力大,建議直接生成。7.同一個網(wǎng)站的多語言該如何處理是好,使用配置文件然后cookie或url來判別?多語言建議使用asp.net自帶的資源文件的方式實現(xiàn),當前語言保存在cookie里面。8.電子商務(wù)網(wǎng)站最多的就是 商品的打折方式和積分的贈送了,這里要怎么設(shè)計才好(工廠模式)?規(guī)則引擎9.如果同一時間并發(fā)大量訂單的話,如果確保一個訂單的有效提交呢?使用MQ隊列10.日志方面,log4net?log4net只能記錄程序運行日志,主要目的是用來調(diào)試程序的,系統(tǒng)業(yè)務(wù)操作日志還你是得自己建一個表來保存。11.電子商務(wù)的全文檢索,這也是個頭疼的問題lucene,微軟索引服務(wù),sqlserver全文檢索,方案很多的。12.負載均衡方面,有什么好的文章推薦碼?可以看windows 2003 集群方面的文章 1.項目劃分是否會有問題,圖中分別是 實體層,數(shù)據(jù)訪問接口層,數(shù)據(jù)訪問層,業(yè)務(wù)邏輯接口層,業(yè)務(wù)邏輯,網(wǎng)站A,B,C目前我也是這樣分的,不過當數(shù)據(jù)表結(jié)構(gòu)有修改時,會帶動其它層的聯(lián)級修改,非常不方便,所以開發(fā)之前最好將數(shù)據(jù)庫設(shè)計地完善一點。另外,當網(wǎng)站分成多個以后,其它項目生成的DLL文件要部署到每個網(wǎng)站的bin文件夾里,更新一次都要重新部署,這也是個挺煩人的事,當然可以將DLL部署到GAC里來解決這個問題,不過這樣的話本地調(diào)試起來就不太方便了,因為項目一有改動,就要將生成的DLL重新拷貝到GAC里才能看到效果。2.數(shù)據(jù)訪問層是要開發(fā)效率(NBear,Linq,Nh等),還是訪問效率(直接使用sql等)?是否可以先使用開發(fā)效率高的,等日后訪問量大了,再重寫并替換數(shù)據(jù)訪問層?這個我也在考慮。目前我還沒有采用ORM框架,都是在DAL里直接訪問DB的。3.網(wǎng)站被切割成了多個子網(wǎng)站,有一些控件(如header,footer)是要共享的,如何跨網(wǎng)站項目共享這些控件呢?自定義控件。4.ms的mvc 1.0也出來不少時間了,是否已經(jīng)夠成熟運用到項目中?或者是網(wǎng)站后臺使用webform的,前臺使用mvc?正在學(xué)習(xí)這一塊。5.網(wǎng)站數(shù)據(jù)的緩存是自己開發(fā)一個hashtable什么的來維護呢,還是使用Memcached ?現(xiàn)在我用的比較多的是.net自帶的數(shù)據(jù)緩存。6.縮略圖的處理,我看有的網(wǎng)站是在上傳圖片的時候直接生成,有的是在httpmodle里處理,訪問的時候生成.直接生成好,快一點。7.同一個網(wǎng)站的多語言該如何處理是好,使用配置文件然后cookie或url來判別?我沒涉及到這一塊,不過我覺得資源文件應(yīng)該就是用來處理這個問題的。8.電子商務(wù)網(wǎng)站最多的就是 商品的打折方式和積分的贈送了,這里要怎么設(shè)計才好(工廠模式)?這些都放在邏輯層好了。9.如果同一時間并發(fā)大量訂單的話,如果確保一個訂單的有效提交呢?MSMQ10.日志方面,log4net?目前我是自已寫代碼存在庫里的。11.電子商務(wù)的全文檢索,這也是個頭疼的問題用lucene.net分詞建索引,再直接從索引庫里搜索,又快又準。12.負載均衡方面,有什么好的文章推薦碼?不清楚了。 這樣的設(shè)計要達到新蛋的效果肯定不可能的,新蛋少說幾百臺服務(wù)器,不同數(shù)據(jù)庫之間的發(fā)布訂閱鏈路都有幾千條。有復(fù)雜的緩存,負載均衡機制。新蛋所有的通訊都是基于WCF的。另外對于這么大型的網(wǎng)站來說,數(shù)據(jù)庫一刻都不停止,所以讀寫分離也很重要,因為你也不可能讓數(shù)據(jù)庫停下來進行備份。總歸要做到新蛋這樣的大型電子商務(wù)網(wǎng)站,靠你上面畫的這點好像遠遠不夠。 不過關(guān)于公共的header,footer,我不建議做成自定義控件,這個維護起來不方便,稍有變動就要發(fā)布dll,麻煩的。如果你的header和footer不是很大的話,建議采用js+css的方式。然后加上壓縮和cdn緩存,應(yīng)該效率上能接受。