大型电子商务网站架构求解
这是一个技术提问帖,更是一个技术回复分享帖!
希望有经验的朋友能够不吝赐教,让我们能在回复中分享到技术!
同样希望管理员同志不要将此贴移出首页区,在讨论中学习和分享知识也是一种学习的方式,不是吗?
---------------------------------华丽的分割线------------------------------------------------------------
相信很多朋友跟我一样,只做过中小型网站,而对大型网站架构充满好奇!在不断的查阅资料,询问高人后,依然有一些问题,不知道如何解决.
最近公司要上一个大型的电子商务网站(类似新蛋,京东),架构方面我来设计,因为没有做过大访问量的,所以在这里向各位老鸟请教!
要做的是一个类似新蛋的电子商务网站,网站的功能会有 中英文双语, 产品销售, 文章管理, 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.负载均衡方面,有什么好的文章推荐码?
最近希望大家能够多多提供一些参考资料,小生在这里谢谢了!
希望有经验的朋友能够不吝赐教,让我们能在回复中分享到技术!
同样希望管理员同志不要将此贴移出首页区,在讨论中学习和分享知识也是一种学习的方式,不是吗?
---------------------------------华丽的分割线------------------------------------------------------------
相信很多朋友跟我一样,只做过中小型网站,而对大型网站架构充满好奇!在不断的查阅资料,询问高人后,依然有一些问题,不知道如何解决.
最近公司要上一个大型的电子商务网站(类似新蛋,京东),架构方面我来设计,因为没有做过大访问量的,所以在这里向各位老鸟请教!
![](https://images.cnblogs.com/cnblogs_com/xinzhyu/2.jpg)
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
(请您对文章做出评价)
Feedback
1619941回复 引用 查看
然后先从概念性架构入手考虑,即先从整体的角度触发考虑整个项目而不是你列在上边的这些东西。
通常情况下的一个简单结构如下:
webAPP --应用--缓存--数据库
作为架构师,你的这些问题目前都还不到考虑的时候。
还有我看到你在问ms mvc是否成熟,那我建议你不要在项目中用这个框架。(当然了如果项目给你如此多的时间,学习熟悉并能用于大型项目的话例外。)
回复 引用 查看
2、前台的页面的设计肯定要使用:模板+静态化设计,这是可参考CMS开源软件
回复 引用 查看
回复 引用 查看
回复 引用 查看
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?===采购成熟的规则引擎
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
==电子商务一般要使用MQ,推荐IBM MQ;使用MSMQ也可
哈哈,好多着呢,最好建议公司另建高明,否则上线才发现吃不动,就问题大了
回复 引用 查看
回复 引用 查看
我QQ是妖妖零妖八九七
回复 引用
新闻肯定是要生成纯静态页,对数据库压力就小很多,不过静态页也有管理上的不方便,更新删除添加都要对磁盘文件进行操作
做一个自定义缓存层,对缓存逻辑进行控制,可以采用第三方缓存模块,如果使用.net来做,可以层层缓存,页面缓存,数据缓存(memcache,不过在win下效率不高)
电子商务网站特点就是对事务的严格,需要数据库设计的时候要求高性能,也需要合适的索引,支持高并发,经常对产品表用户表等进行索引检查,是否有很多索引扫描和表扫描(即使是局部的,也要将“局部”控制到最小范围)
mssql语句对不需要事务的查询要附带上with(nolock),以利于并发更新。
有些功能模块不能按照想当然的方式开发,比如产品访问次数,切不可将这些更新非常频繁的字段置于核心表内,明确的做法是将其剥离开来
回复 引用 查看
回复 引用 查看
回复 引用 查看
对安全要有整体的把握,最好全都是用存储过程,在项目上线前将数据库存储过程全部导出再查找貌似exec的语句,查找是否需要替换成sp_executesql。
另外,如果采用mssql,全文搜索直接用mssql fte就可以,速度和精确度都还是可以的,最重要的是维护和管理开发很简单。
打折的处理可以按照电信的一次,二次批价功能,如果你做过电信方面的系统。
当然也可以设计得更简单的一些。
回复 引用 查看
回复 引用 查看
静态内容要独立服务器放。
回复 引用 查看
回复 引用 查看
数据的缓存方面建议考虑用memcache,另外也可以分别在表现层和数据层利用.net中的现存缓存机制作业可;
简单执行的sql可以不用存储过程,存储过程会占用数据库服务器的处理时间,造成死锁;
mvc建议还是做些CMS的项目上应用,电子商城不是很适合,个人观点。url上可以做转义,使url显示更友好;
数据库建议建立分布数据库,这样可以转移查询和大访问量对数据库带来压力;
图片可以考虑单独放在一台服务器上;
以上纯属个人观点,呵呵
回复 引用 查看
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
回复 引用
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
1,一个电子商务网站用户99.5%的行为时Find
2、对于商品检索部分,能不用数据库就不用数据库(网上切词等相关的开源平台很多)
3、分布式缓存(Memcached 、Volecity),个人测试volecity 3还是不错的
4、系统设计时必须要考虑可运营。从这个角度去设计系统
5、对于电子商务网站改动很频繁,必须考虑架构设计如何适应频繁的版本更新
6、必须设计一个好的单点登录系统。
7、建议能不用sqlserver就不用它。
8、对于大型电子商务网站来说,系统的I/O是起决定因素而不是CPU和内存。
个人经历的,呵呵
抛砖引玉
回复 引用
项目划分其实不重要,重要的的是你在写代码的时候是否能把代码合理的分到对应的项目里。
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 集群方面的文章
回复 引用 查看
它关联到订单的整个处理流程(审核、发货、退换货)。活动是否满足的依赖的条件也很难约束(你不能低估市场部门的想象力),最好先和你们的市场部先做个约定,通常来说,订单在线活动的满足依赖条件不能超过订单的范围(主要为订单商品项、订单的金额---商品总金额、物流费用、让利金额、代金卷抵扣金额、实际支付金额等等)
回复 引用 查看
我提个意见,做一个网站,你的用户是你的客户,你要站在他们的那边思考一下,不一定框架完善就能满足他们的需求,前期的需求调研我觉得比你框架设计要重要。
还有模型你一开始就搭的太大了,给自己太大的压力,你应该一步一步来,版本一个一个来,不要想着一下子就能完善
回复 引用 查看
回复 引用 查看
回复 引用 查看
个人观点
回复 引用
我觉的也是!
回复 引用 查看
目前我也是这样分的,不过当数据表结构有修改时,会带动其它层的联级修改,非常不方便,所以开发之前最好将数据库设计地完善一点。另外,当网站分成多个以后,其它项目生成的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.负载均衡方面,有什么好的文章推荐码?
不清楚了。
回复 引用 查看
11.电子商务的全文检索,这也是个头疼的问题
用lucene.net分词建索引,再直接从索引库里搜索,又快又准。
有没有考虑按各种条件动态排序呢,他是实现不了的
回复 引用 查看
回复 引用 查看
回复 引用
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
人家新蛋都换成ecshop了吧。 "
瞎说,人家新蛋全部是自己的研发团队!
回复 引用 查看
回复 引用 查看
回复 引用 查看
往往把事情想得很大,最后有60%就是空想!浪费时间!
程序不要打算使用那些还不成熟的技术,比如:asp.net mvc;并不是说这个技术不好,是你有没有能力去驾驭它;出现问题了你能在网上很快的找到解决方案吗?
至于分层,大家都知道怎么分,可是实际解决代码的时候又有多少人能够把代码写对地方,最近接触的代码最大的问题就是这样!有一些看似很简单的事情要真正做好并不容易,比如命名规范!而这些事情不会导致你的项目失败,可是等你发现你无法掌控它的时候,等待你的就是软件被淘汰!
回复 引用 查看
-------------------------------------
Ryanism挺中肯的,和我的思路有点像
不过关于公共的header,footer,我不建议做成自定义控件,这个维护起来不方便,稍有变动就要发布dll,麻烦的。
如果你的header和footer不是很大的话,建议采用js+css的方式。然后加上压缩和cdn缓存,应该效率上能接受。
回复 引用 查看
回复 引用 查看