zoukankan      html  css  js  c++  java
  • 大型电子商务网站架构

    大型电子商务网站架构

    (转自:http://www.cnblogs.com/skydau/archive/2009/08/30/1556701.html)

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


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

    还有就是切不可经常性将字段设计成bool类型,这样会给以后的扩展留出路,即使是男女这种字段,也建议采用tiny类型


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

    静态的页面建议使用CDN加速,以解决网通和电信之间访问速度的问题;
    数据的缓存方面建议考虑用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和内存。

    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 集群方面的文章

    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.负载均衡方面,有什么好的文章推荐码?
    不清楚了。

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


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

  • 相关阅读:
    target runtime apache v6.0 not defined解决
    java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    The valid characters are defined in RFC 7230 and RFC 3986问题
    invalid END header解决方法
    You have more than one version of ‘org.apache.commons.logging.Log’ visible, which is not allowed问题解决
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    在eclipse中import java web项目时遇到的一些问题并将该项目通过tomcat发布
    java byte转string 涉及到字节流中有中文
    spring+mybatis框架搭建时遇到Mapped Statements collection does not contain value for...的错误
    试试看读一下Zepto源码
  • 原文地址:https://www.cnblogs.com/ziyan22/p/1971424.html
Copyright © 2011-2022 走看看