深入剖析大型网站架构:揭秘其核心组成部分与构建策略

详述巨型网站架构的构成

巨型网站架构的构成主要包括以下几个关键方面:

一、架构演变历程

起始阶段:普遍采用LAMP架构。应用服务解耦:将服务器划分为应用服务器、文件服务器及数据库服务器,实现职能分化。缓存应用:引入缓存策略,如Memcached或Redis,缓存热点数据以增强系统性能。高并发应对:通过应用服务器集群与负载均衡技术,应对高并发访问。数据读写分离:采用数据库主从复制技术,实现读写分离,减轻数据库压力。加速响应:运用CDN和反向代理缓存,优化用户访问速度。

二、架构风格

分层架构:将系统划分为不同的层级,如表现层、业务逻辑层和数据访问层,实现职能专一。模块化架构:将系统划分为高内聚、低耦合的模块,便于分布式部署和扩展。分布式架构:将系统模块部署在不同服务器上,解决高并发问题。集群架构:通过负载均衡技术,将请求分发至多个服务器,提供服务冗余。缓存与异步架构:运用数据缓存提升访问速度,采用异步处理解耦系统,提高系统响应能力。

三、核心要素

性能:关注系统的响应时间、并发数和吞吐量,确保系统高效运行。可用性:通过冗余设计,如多节点部署、负载均衡等,保证系统高可用性。伸缩性:系统能够根据需求增加服务器资源,应对压力增长。扩展性:系统能够轻松添加新功能,满足业务扩展需求。安全性:保护系统免受攻击和数据泄露,确保用户数据安全。

四、性能提升与安全

性能提升:通过前端优化、服务器优化和代码优化等方法,提升系统性能。安全架构:构建安全防御体系,应对DDoS攻击、SQL注入等常见攻击手段。

总体而言,巨型网站架构的构成是一个复杂且持续发展的过程,旨在应对海量用户、高并发和数据安全等挑战。通过合理的架构设计和优化策略,可以确保系统的稳定、高效和安全运行。

电子商务网站典型架构有哪些

巨型电子商务网站架构,摘录

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.据经验,电子商务网站仅靠中英双语来达到多语言是不靠谱的(文化用户习惯不是简单的语言切换),如果想真正运营英语的就要重新开发一个版本

  1. 根据以往的经验,电子商务平台仅依赖中英文双语实现多语种功能并不可靠(文化用户的习惯并非仅仅是语言切换),若要真正运营英语版本,则需要重新开发一个全新的版本。

  2. 避免固定模式。

  3. 实施负载均衡(针对web和db)以及SSB异步数据处理。

  4. 你是记录业务类型日志还是异常日志?在前台的订单流程中,异常日志已不再需要。可以找一个工具编写脚本,不断运行以确保及时发现并通过邮件报告问题。

  5. 寻找第三方搜索组件,类似于Endeca的。

  6. 负载均衡相对简单,初期可以通过软件实现。所有图片可以交给第三方CDN处理,前台网站中很少使用ajax,如果使用,推荐使用jQuery 1。对于电子商务网站,99.5%的用户行为是查找。

2、在商品检索方面,能避免使用数据库则尽量避免(网络上有许多相关的开源平台可供选择)。

3、采用分布式缓存(如Memcached、Volecity),个人测试发现Volecity 3表现良好。

4、在设计系统时,必须考虑系统的可运营性。从这一角度出发进行系统设计。

5、鉴于电子商务网站频繁进行修改,必须考虑架构设计如何适应频繁的版本更新。

6、必须设计一个高效的单一登录系统。

7、建议尽可能避免使用SQL Server。

8、对于大型电子商务网站,系统的I/O性能是决定性因素,而非CPU和内存。

  1. 项目划分是否合理?图中显示了实体层、数据访问接口层、数据访问层、业务逻辑接口层、业务逻辑以及网站A、B、C。

项目划分本身并不重要,关键在于你编写代码时是否能够将代码合理地分配到相应的项目中。

  1. 数据访问层是为了提高开发效率(如NBear、Linq、Nh等)还是访问效率(直接使用SQL等)?是否可以先使用开发效率高的,等到访问量增大后再重写并替换数据访问层?

优先考虑开发效率,相信在访问量增大后,我们可以投资硬件升级,这在程序代码质量不差的情况下,比优化程序更节省成本。

  1. 网站被分割成多个子网站,一些控件(如header、footer)需要共享,如何在不同网站项目间共享这些控件?

可以将这些控件制作成自定义控件。

  1. Microsoft的MVC 1.0已经发布一段时间了,是否已经足够成熟可以应用于项目中?或者网站后台使用WebForm,前台使用MVC?

推荐使用WebForm进行后台开发,MVC用于前台开发,因为MVC能够更好地提升前台性能,更方便地更换页面表现形式。后台界面相对稳定,使用WebForm可以提高开发效率。

  1. 网站数据的缓存是自己开发一个hashtable等来维护,还是使用Memcached?

初期建议使用hashtable,因为它简单易用,将来升级到Memcached。

  1. 缩略图的处理,有的网站在上传图片时直接生成,有的在httpmodle中处理,访问时生成。

直接生成缩略图可以节省性能。使用httpmodle则每次访问图片时都会生成新的图片,这会增加服务器压力,建议直接生成。

  1. 同一个网站的多语言处理,使用配置文件加cookie或url来判断?

建议使用ASP.NET自带的资源文件方式实现多语言,当前语言信息保存在cookie中。

  1. 电子商务网站常见的商品打折和积分赠送设计,如何进行?

可以使用规则引擎进行设计。

  1. 在高并发订单情况下,如何确保订单的有效提交?

可以使用MQ队列来保证。

  1. 日志方面,使用log4net?

log4net主要用于记录程序运行日志,主要目的是调试程序,而系统业务操作日志则需要自行建立表来保存。

  1. 电子商务的全文检索,这也是一个难题。

可以使用lucene、微软索引服务或SQL Server全文检索等方案。

  1. 电子商务的全文搜索,这同样是个棘手的问题。

运用lucene.net进行分词构建索引,然后直接从索引库中进行检索,既迅速又精确。

12. 在负载均衡领域,能否推荐一些优秀的文章呢?

对此不太了解。这样的架构想要达到新蛋的水平几乎是不可能的,新蛋至少拥有数百台服务器,数据库间的发布订阅链路就有数千条。它拥有复杂的缓存和负载均衡策略。新蛋的所有通信都基于WCF技术。此外,对于如此庞大的网站而言,数据库的持续运行至关重要,因此读写分离也变得尤为关键,因为您也不可能让数据库停止来执行备份。总的来说,要想构建像新蛋这样的大型电子商务网站,仅凭您所描述的这些内容显然是远远不够的。

不过,关于公共的头部和尾部,我并不建议将其制作成自定义控件,因为这样的维护工作较为繁琐,一旦有变动就需要发布dll,颇为麻烦。

如果您的头部和尾部内容不是很多,建议使用js和css来实现。随后加入压缩和CDN缓存,这样在效率上应该是可以接受的。

以上所转载内容均来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2020@163.com,本人将予以删除。
THE END
分享
二维码
< <上一篇
下一篇>>