大型电子商务网站架构求解

 
这是一个技术提问帖,更是一个技术回复分享帖!
希望有经验的朋友能够不吝赐教,让我们能在回复中分享到技术!
同样希望管理员同志不要将此贴移出首页区,在讨论中学习和分享知识也是一种学习的方式,不是吗?
---------------------------------华丽的分割线------------------------------------------------------------
相信很多朋友跟我一样,只做过中小型网站,而对大型网站架构充满好奇!在不断的查阅资料,询问高人后,依然有一些问题,不知道如何解决.
最近公司要上一个大型的电子商务网站(类似新蛋,京东),架构方面我来设计,因为没有做过大访问量的,所以在这里向各位老鸟请教!

要做的是一个类似新蛋的电子商务网站,网站的功能会有 中英文双语, 产品销售, 文章管理, Wiki, 圈子, 会员管理, 后台
1.项目划分是否会有问题,图中分别是 实体层,数据访问接口层,数据访问层,业务逻辑接口层,业务逻辑,网站A,B,C
2.数据访问层是要开发效率(NBear,Linq,Nh等),还是访问效率(直接使用sql等)?是否可以先使用开发效率高的,等日后访问量大了,再重写并替换数据访问层?
3.网站被切割成了多个子网站,有一些控件(如header,footer)是要共享的,如何跨网站项目共享这些控件呢?
4.ms的mvc 1.0也出来不少时间了,是否已经够成熟运用到项目中?或者是网站后台使用webform的,前台使用mvc?
5.网站数据的缓存是自己开发一个hashtable什么的来维护呢,还是使用Memcached ?
6.缩略图的处理,我看有的网站是在上传图片的时候直接生成,有的是在httpmodle里处理,访问的时候生成.
7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
10.日志方面,log4net?
11.电子商务的全文检索,这也是个头疼的问题
12.负载均衡方面,有什么好的文章推荐码?

最近希望大家能够多多提供一些参考资料,小生在这里谢谢了!
8
0
(请您对文章做出评价)
posted on 2009-08-18 22:19 隨風.NET 阅读(2836) 评论(49)  编辑 收藏 网摘

Feedback

#1楼 2009-08-18 22:35 火星人.NET      
绑定,我也想知道这么牛叉的网站怎么做的。人家怎么学会的呀,从哪学的呀?我想知道,谢谢。
  回复  引用  查看    

#2楼 2009-08-18 22:40 熊呜呜      
直接去看看dudu的博客,看看cnblog用了哪些技术

然后先从概念性架构入手考虑,即先从整体的角度触发考虑整个项目而不是你列在上边的这些东西。

通常情况下的一个简单结构如下:

webAPP --应用--缓存--数据库

作为架构师,你的这些问题目前都还不到考虑的时候。

还有我看到你在问ms mvc是否成熟,那我建议你不要在项目中用这个框架。(当然了如果项目给你如此多的时间,学习熟悉并能用于大型项目的话例外。)

  回复  引用  查看    

1、首先是负载问题,不仅仅是均衡考虑。一台Web只能3万多访客
2、前台的页面的设计肯定要使用:模板+静态化设计,这是可参考CMS开源软件



  回复  引用  查看    

#4楼 2009-08-18 22:44 yangjun      
呵呵,可能有一些东西,没接触过就觉得高深,接触了,又不觉得怎么样了
  回复  引用  查看    

#5楼 2009-08-18 22:44 温景良(Jason)      
问老赵
  回复  引用  查看    

7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?===客户是自己公司,使用标准方法即可
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?===采购成熟的规则引擎
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
==电子商务一般要使用MQ,推荐IBM MQ;使用MSMQ也可

哈哈,好多着呢,最好建议公司另建高明,否则上线才发现吃不动,就问题大了

  回复  引用  查看    

#7楼 2009-08-18 22:54 Stanley ji      
呵呵,性能方面主要考虑,物理静态化,缓存,优化程序结构,其次再考虑软件负载均衡、硬件负载均衡
  回复  引用  查看    

楼主联系我QQ,我刚好最近有类似项目正在开始,我技术也一般,但是正想找个人聊聊
我QQ是妖妖零妖八九七

  回复  引用    

#9楼 2009-08-18 23:00 Keep Walking      
第一点是数据库要设计好,要达到什么级别,你可能需要考虑哪些表需要拆分,哪些表的核心数据需要冗余,如果是mysql,还要考虑其他的问题,比如存储引擎。
新闻肯定是要生成纯静态页,对数据库压力就小很多,不过静态页也有管理上的不方便,更新删除添加都要对磁盘文件进行操作
做一个自定义缓存层,对缓存逻辑进行控制,可以采用第三方缓存模块,如果使用.net来做,可以层层缓存,页面缓存,数据缓存(memcache,不过在win下效率不高)
电子商务网站特点就是对事务的严格,需要数据库设计的时候要求高性能,也需要合适的索引,支持高并发,经常对产品表用户表等进行索引检查,是否有很多索引扫描和表扫描(即使是局部的,也要将“局部”控制到最小范围)
mssql语句对不需要事务的查询要附带上with(nolock),以利于并发更新。
有些功能模块不能按照想当然的方式开发,比如产品访问次数,切不可将这些更新非常频繁的字段置于核心表内,明确的做法是将其剥离开来

  回复  引用  查看    

#10楼 2009-08-18 23:02 Keep Walking      
还有不少东西都需要注意,另外,邮件功能也需要完善,公司要掏钱买个好的邮箱服务,然后才能让.net发送邮件的成功率得以提高,并且有发送失败的处理机制,机器发送失败的话,就使用人工发送。不知道各位有没有好的邮件解决办法,我目前就是这样实现的
  回复  引用  查看    

#11楼 2009-08-18 23:10 Keep Walking      
还有就是切不可经常性将字段设计成bool类型,这样会给以后的扩展留出路,即使是男女这种字段,也建议采用tiny类型
  回复  引用  查看    

#12楼 2009-08-18 23:19 Keep Walking      
其他还有就是在产品设计的时候充分考虑seo,网站目录结构清晰可读,而不是带着一串串的查询参数。
对安全要有整体的把握,最好全都是用存储过程,在项目上线前将数据库存储过程全部导出再查找貌似exec的语句,查找是否需要替换成sp_executesql。
另外,如果采用mssql,全文搜索直接用mssql fte就可以,速度和精确度都还是可以的,最重要的是维护和管理开发很简单。
打折的处理可以按照电信的一次,二次批价功能,如果你做过电信方面的系统。
当然也可以设计得更简单的一些。

  回复  引用  查看    

#13楼 2009-08-18 23:34 源声依旧      
Lz考虑的问题还多着呢,最好是直接找开发经验的人,直接交流
  回复  引用  查看    

#14楼 2009-08-18 23:42 zeus2      
我觉得用 分布式架构+缓存足够了。

静态内容要独立服务器放。

  回复  引用  查看    

先搞明白需求先.不要过分看重技术.搞个ASP照样可以
  回复  引用  查看    

#16楼 2009-08-19 00:03 negy      
静态的页面建议使用CDN加速,以解决网通和电信之间访问速度的问题;
数据的缓存方面建议考虑用memcache,另外也可以分别在表现层和数据层利用.net中的现存缓存机制作业可;
简单执行的sql可以不用存储过程,存储过程会占用数据库服务器的处理时间,造成死锁;
mvc建议还是做些CMS的项目上应用,电子商城不是很适合,个人观点。url上可以做转义,使url显示更友好;
数据库建议建立分布数据库,这样可以转移查询和大访问量对数据库带来压力;
图片可以考虑单独放在一台服务器上;
以上纯属个人观点,呵呵

  回复  引用  查看    

#17楼 2009-08-19 00:45 x2x[未注册用户]
要设计的简单实用为好
1.三层架构
2.使用手写sql,手写entity(生成也可),缓存反射绑定(不是缓存数据哦,缓存映射关系),要考虑网站的长期发展还是手写吧 灵活 性能也好
3.没有这种问题,商业驱动的,纯购物就好了,千万别搞什么圈子,wiki
4.纯.net的mvc不建议,webform不搞viewstate,不搞服务端控件(除repeater)再加点mvc的思想已足够用了
5.不需要缓存数据(除搜索产品部分),要考虑多台服务器的程序快速部署,config文件会很多,config要序列化缓存
6.当然是先生成好了,参照jd吧,按业务每张图片对应几个不同大小的图
7.据经验,电子商务网站仅靠中英双语来达到多语言是不靠谱的(文化 用户习惯不是简单的语言切换),如果想真正运营英语的就要重新开发一个版本
8.不搞模式
9.负载均衡(web,db)+ssb异步处理数据
10.你是业务类型的日志还是异常日志? 前台订单流程上异常日志不需要了,找个工具录个脚本不停的跑 保证随时发现问题发邮件就可以了
11.找第三方搜索组件 类似endeca的
12.负载均衡挺简单的,初期靠软件就可以,一切图片找第三方放cdn,前台网站用到ajax的地方很少,如果用的话jquery

  回复  引用    

#18楼 2009-08-19 08:15 ★金★      
关注~~~
  回复  引用  查看    

#19楼 2009-08-19 08:48 wuxiaoqqqq      
围观
  回复  引用  查看    

#20楼 2009-08-19 08:56 leoxu      
我也在思考这方面的问题。 技术方面的“导师”不多,大多都是多网上,书上获得知识的。
  回复  引用  查看    

何谓大型?日交易量100w以上,还是指单表记录数达到xx万,或是指日独立IP达到10w以上,或是最大并发数达到多少...? 建议先要有一个明确的预期值,然后把什么是核心业务,什么是非核心业务区分开?如果只是类似新蛋,京东这类以卖东西为主的网站,在注册/订购/支付/订单管理/产品管理这几个主要方面能做到简单,好用,高效就足够了,其它业务比如圈子,wiki之类,其实是可有可无的,如果交易的核心功能做不好,这些东西都是花架子,没有实际意义
  回复  引用  查看    

另外petShop4做为学习资料完全没问题,但是如果参照这个做大型购物门户,个人觉得没啥好处,大型网站的运行效率比开发效率更重要,否则访问量上去了,如果网站撑不住,相当于是在大力扩散坏的影响
  回复  引用  查看    

#23楼 2009-08-19 09:05 胡显明      
电子商务网站中,数据量最大的只有日志表。 而真正新闻、商品的数量,是大不到哪里去的。 你只要处理好了日志记录(主要就是点卡 金币 消费卷 积分 谁买了,什么时候买的 打折信息 等等)就完了。 其他的,都不是重点。
  回复  引用  查看    

#24楼 2009-08-19 09:07 胡显明      
Wiki, 圈子, 这些,不用考虑的太复杂,毕竟你这两个功能都只是为商城服务的,或者说,她只是留下用户的一种手段。
  回复  引用  查看    

#25楼 2009-08-19 09:10 Yoshow      
大型网站架构之:MySpace的体系架构 这类文章你可以看看..
  回复  引用  查看    

个人经验:
1,一个电子商务网站用户99.5%的行为时Find
2、对于商品检索部分,能不用数据库就不用数据库(网上切词等相关的开源平台很多)
3、分布式缓存(Memcached 、Volecity),个人测试volecity 3还是不错的
4、系统设计时必须要考虑可运营。从这个角度去设计系统
5、对于电子商务网站改动很频繁,必须考虑架构设计如何适应频繁的版本更新
6、必须设计一个好的单点登录系统。
7、建议能不用sqlserver就不用它。
8、对于大型电子商务网站来说,系统的I/O是起决定因素而不是CPU和内存。

个人经历的,呵呵

抛砖引玉

  回复  引用    

#27楼 2009-08-19 09:45 kiler      
1.项目划分是否会有问题,图中分别是 实体层,数据访问接口层,数据访问层,业务逻辑接口层,业务逻辑,网站A,B,C
项目划分其实不重要,重要的的是你在写代码的时候是否能把代码合理的分到对应的项目里。
2.数据访问层是要开发效率(NBear,Linq,Nh等),还是访问效率(直接使用sql等)?是否可以先使用开发效率高的,等日后访问量大了,再重写并替换数据访问层?
开发效率优先,访问量大了以后,我相信是有钱投到硬件上的,在你程序写的不是很烂的情况下,升级硬件远比优化程序节省成本。
3.网站被切割成了多个子网站,有一些控件(如header,footer)是要共享的,如何跨网站项目共享这些控件呢?
那就做成自定义控件啦。
4.ms的mvc 1.0也出来不少时间了,是否已经够成熟运用到项目中?或者是网站后台使用webform的,前台使用mvc?
推荐使用使用webform的,前台使用mvc,对于前台来说使用mvc能更好的提升性能,更方便的更换页面表现形式。后台界面相对稳定,用webform可以提高开发效率。
5.网站数据的缓存是自己开发一个hashtable什么的来维护呢,还是使用Memcached ?
初期建议用hashtable,因为简单,将来升级到Memcached 。
6.缩略图的处理,我看有的网站是在上传图片的时候直接生成,有的是在httpmodle里处理,访问的时候生成.
直接生成缩略图的好处是节约性能。httpmodle相反,每次浏览图片的时候都会生成新的图片,服务器压力大,建议直接生成。
7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?
多语言建议使用asp.net自带的资源文件的方式实现,当前语言保存在cookie里面。
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?
规则引擎
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
使用MQ队列
10.日志方面,log4net?
log4net只能记录程序运行日志,主要目的是用来调试程序的,系统业务操作日志还你是得自己建一个表来保存。
11.电子商务的全文检索,这也是个头疼的问题
lucene,微软索引服务,sqlserver全文检索,方案很多的。
12.负载均衡方面,有什么好的文章推荐码?
可以看windows 2003 集群方面的文章

  回复  引用  查看    

#28楼 2009-08-19 09:50 东风31      
8.电子商务的订单在线活动不是仅仅靠一个设计模式就能够解决的。
它关联到订单的整个处理流程(审核、发货、退换货)。活动是否满足的依赖的条件也很难约束(你不能低估市场部门的想象力),最好先和你们的市场部先做个约定,通常来说,订单在线活动的满足依赖条件不能超过订单的范围(主要为订单商品项、订单的金额---商品总金额、物流费用、让利金额、代金卷抵扣金额、实际支付金额等等)

  回复  引用  查看    

#29楼 2009-08-19 10:08 James.Ying      
为什么要参考petshop,不觉得好

我提个意见,做一个网站,你的用户是你的客户,你要站在他们的那边思考一下,不一定框架完善就能满足他们的需求,前期的需求调研我觉得比你框架设计要重要。

还有模型你一开始就搭的太大了,给自己太大的压力,你应该一步一步来,版本一个一个来,不要想着一下子就能完善

  回复  引用  查看    

我目前遇到的唯一问题就是,如果达到千万级供应,搜索怎么实现?用SQL索引,用第三方?排序是个复杂的算法,太复杂
  回复  引用  查看    

其它的问题可以不计,性能上没有太大要求
  回复  引用  查看    

#32楼 2009-08-19 10:47 hayqq[未注册用户]
不用考虑那么多,到了那个程度,解决办法自然就来了!
个人观点

  回复  引用    

#33楼 2009-08-19 11:14 米客一族      
引用James.Ying:
为什么要参考petshop,不觉得好

我提个意见,做一个网站,你的用户是你的客户,你要站在他们的那边思考一下,不一定框架完善就能满足他们的需求,前期的需求调研我觉得比你框架设计要重要。

还有模型你一开始就搭的太大了,给自己太大的压力,你应该一步一步来,版本一个一个来,不要想着一下子就能完善

我觉的也是!

  回复  引用  查看    

#34楼 2009-08-19 12:05 Ryanism      
1.项目划分是否会有问题,图中分别是 实体层,数据访问接口层,数据访问层,业务逻辑接口层,业务逻辑,网站A,B,C
目前我也是这样分的,不过当数据表结构有修改时,会带动其它层的联级修改,非常不方便,所以开发之前最好将数据库设计地完善一点。另外,当网站分成多个以后,其它项目生成的DLL文件要部署到每个网站的bin文件夹里,更新一次都要重新部署,这也是个挺烦人的事,当然可以将DLL部署到GAC里来解决这个问题,不过这样的话本地调试起来就不太方便了,因为项目一有改动,就要将生成的DLL重新拷贝到GAC里才能看到效果。
2.数据访问层是要开发效率(NBear,Linq,Nh等),还是访问效率(直接使用sql等)?是否可以先使用开发效率高的,等日后访问量大了,再重写并替换数据访问层?
这个我也在考虑。目前我还没有采用ORM框架,都是在DAL里直接访问DB的。
3.网站被切割成了多个子网站,有一些控件(如header,footer)是要共享的,如何跨网站项目共享这些控件呢?
自定义控件。
4.ms的mvc 1.0也出来不少时间了,是否已经够成熟运用到项目中?或者是网站后台使用webform的,前台使用mvc?
正在学习这一块。
5.网站数据的缓存是自己开发一个hashtable什么的来维护呢,还是使用Memcached ?
现在我用的比较多的是.net自带的数据缓存。
6.缩略图的处理,我看有的网站是在上传图片的时候直接生成,有的是在httpmodle里处理,访问的时候生成.
直接生成好,快一点。
7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?
我没涉及到这一块,不过我觉得资源文件应该就是用来处理这个问题的。
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?
这些都放在逻辑层好了。
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
MSMQ
10.日志方面,log4net?
目前我是自已写代码存在库里的。
11.电子商务的全文检索,这也是个头疼的问题
用lucene.net分词建索引,再直接从索引库里搜索,又快又准。
12.负载均衡方面,有什么好的文章推荐码?
不清楚了。

  回复  引用  查看    

@Ryanism
11.电子商务的全文检索,这也是个头疼的问题
用lucene.net分词建索引,再直接从索引库里搜索,又快又准。

有没有考虑按各种条件动态排序呢,他是实现不了的

  回复  引用  查看    

#36楼 2009-08-19 12:11 joylee      
拿个凳子看戏,怎么老赵、天平这些高手不来赐两招呢
  回复  引用  查看    

#37楼 2009-08-19 12:25 sdff[未注册用户]
期待
  回复  引用    

#38楼 2009-08-19 13:40 ocean      
这样的设计要达到新蛋的效果肯定不可能的,新蛋少说几百台服务器,不同数据库之间的发布订阅链路都有几千条。有复杂的缓存,负载均衡机制。新蛋所有的通讯都是基于WCF的。另外对于这么大型的网站来说,数据库一刻都不停止,所以读写分离也很重要,因为你也不可能让数据库停下来进行备份。总归要做到新蛋这样的大型电子商务网站,靠你上面画的这点好像远远不够。
  回复  引用  查看    

#39楼 2009-08-19 13:48 chinaagan      
好贴 关注!!!
  回复  引用  查看    

#40楼 2009-08-19 13:49 chinaagan      
  好贴 关注!!!
  回复  引用  查看    

#41楼 2009-08-19 14:23 Astar      
人家新蛋都换成ecshop了吧。
  回复  引用  查看    

#42楼 2009-08-19 14:52 Jaxu      
架构方面的东西确实值得深思熟虑,需要认认真真静下心来谋划谋划,呵呵~~
  回复  引用  查看    

#43楼 2009-08-19 14:55 sadgafg      
更期待数库方面的设计,希望有这部分。
  回复  引用  查看    

"#41楼 2009-08-19 14:23 Astar
人家新蛋都换成ecshop了吧。 "

瞎说,人家新蛋全部是自己的研发团队!

  回复  引用  查看    

#45楼 2009-08-19 15:55 .NET钉子户      
mark
  回复  引用  查看    

#46楼 2009-08-19 17:04 shawnliu      
这么多问题 你来做架构师 这个网站也够猛
  回复  引用  查看    

个人觉得你就老老实实的先做一个网站出来,等你的网站真的达到京东的样子了再去考虑一些事情把;
往往把事情想得很大,最后有60%就是空想!浪费时间!
程序不要打算使用那些还不成熟的技术,比如:asp.net mvc;并不是说这个技术不好,是你有没有能力去驾驭它;出现问题了你能在网上很快的找到解决方案吗?
至于分层,大家都知道怎么分,可是实际解决代码的时候又有多少人能够把代码写对地方,最近接触的代码最大的问题就是这样!有一些看似很简单的事情要真正做好并不容易,比如命名规范!而这些事情不会导致你的项目失败,可是等你发现你无法掌控它的时候,等待你的就是软件被淘汰!

  回复  引用  查看    

#48楼 2009-08-19 19:50 coollzh      
引用Ryanism:
1.项目划分是否会有问题,图中分别是 实体层,数据访问接口层,数据访问层,业务逻辑接口层,业务逻辑,网站A,B,C
目前我也是这样分的,不过当数据表结构有修改时,会带动其它层的联级修改,非常不方便,所以开发之前最好将数据库设计地完善一点。另外,当网站分成多个以后,其它项目生成的DLL文件要部署到每个网站的bin文件夹里,更新一次都要重新部署,这也是个挺烦人的事,当然可以将DLL部署到GAC里来解决这个问题,不过这样的话本地调试起来就不太方便了,因为项目一有改动,就要将生成的DLL重新拷贝到GAC里才能看到效果。
2.数据访问层是要开发效率(NBear,Linq,Nh等),还...


-------------------------------------
Ryanism挺中肯的,和我的思路有点像

不过关于公共的header,footer,我不建议做成自定义控件,这个维护起来不方便,稍有变动就要发布dll,麻烦的。
如果你的header和footer不是很大的话,建议采用js+css的方式。然后加上压缩和cdn缓存,应该效率上能接受。

  回复  引用  查看    

#49楼 2009-08-19 20:10 pythonic      
一步一步来。。。不要妄想一开始就把所有事情做足,要迭代的和递增的开发,,,需求调研是重要的。讲究团队合作,最好有领域专家帮你指点。
  回复  引用  查看    
posted @ 2009-08-19 22:55  ting_gt  阅读(455)  评论(0编辑  收藏  举报