大型网站面临的问题:
海量数据处理
大型网站每天的数据量可能上百万,甚至上千万或更多。如果存在设计不好的多对多关系,在前期可能没有任何问题,但是随着用户增长,数据量会以几何级数增加。此时,对于一个表的select和update(还不用说多表联合查询)的成本是非常高的。
数据并发处理
死锁在高并发情况下存在的概率非常高,这时使用缓存仍是一个大问题。因为在整个应用范围下,缓存是全局共享的。当两个或者多个请求同时对缓存有更新要求时,尽管我们有lock机制,但并不是很灵验,应用程序还是会直接死掉。
文件存贮问题
当文件量是海量数据的情况下,那么维护和使用时,磁盘I/O就是一个巨大的问题,哪怕你的带宽足够,但是你的磁盘也未必响应得过来。如果这个时候还涉及上传,磁盘很容易就over了。
数据关系处理
在Web2.0时代,数据关系大多是多对多关系,涉及的大多是多表联合查询。如果避免是一个问题。
数据索引问题
索引和更新是一对矛盾。廉价的索引可能带来高代价的update。
分布式处理
为了保证各地的访问速度,如何有效实现数据同步和更新,实现各地服务器的实时通信是一个很大的问题。
Ajax利弊
Ajax利用简单的post和get进行数据传递,采用HTTP debuger抓取数据,但存在攻击危险。
数据安全性
大型网站面临的危险主要有外挂、群发等,如采用验证码,对用户体验又是一个很意外的影响。
数据同步和集群处理
当数据库服务器不堪重负时,就需要做基于数据库的负载和集群了。这时可能会遇到最让人困扰的问题:根据数据库的设计不同,数据基于网络传输时会发生数据延迟。这是很可怕的问题,也不可避免。由此,我们就需要通过另外的手段来保证在这延迟的几秒或者更长时间内,实现有效的交互。比如数据散列、分割、内容、异步处理等问题。
Open API以及数据共享
Open API已经成为不可避免的趋势,从google,facebook,myspace到海内、校内,都在考虑这个问题,它可以更有效地留住用户,并激发用户更多参与,让更多人帮助你做最有效的开发。
大量like,or,in以及多表查询带来的性能屏障
大量上传文件攻击
解决方案
把Web2.0网站用户量级别定为三种,百万级别(M)、千万级别(S)以及亿万级别(Q)。如果全表查询,可以采用分区视图、分表索引处理。
对于M级别来说,主要应对的是I/O问题:对数据库的file文件分磁盘存贮(不是分区,是不同的硬盘),根据负载量大小,我们可以适当控制硬盘的数量和文件分区的数量。对于S级别,需要对注册和入库的流程进行简单修改。解决方案是数据散列和分区视图。
常用的方案有三种。第一种是等容扩充法:在用户注册控制的基础上,保证每个库的用户容量不超过500万,超过之后入第二个库,以此类推。这个方案可以保证有效的扩充性,但不能保证数据被有效索引。第二种就是共区索引方案,其实和第一种方案有异曲同工之处。但是对第一种方案进行了合理的优化,按照用户名进行了分库存贮。如建立26个数据库,按照用户名的索引来控制用户数据入哪个库。假如用户名是crazycode,那该用户名的数据存放在用户表C中。方案三是一个更具模型化的方案,进行用户ID的编码。我们用一种序列化的方案将用户名以编码的形式存贮,如crazycode按照C,R,A,......存贮为数字索引,然后进行分区存贮。数字类型的数据在数据库中可以更有效地被查询、更新和共享,这就是结合方案一和方案二的方案三。
对于Q级别,可以根据用户活跃度的权值结合数据量进行临时数据表的存放。如果是在非意外的数据情况下,每天登录的用户量不会上千万。利用一个简单的数据代理程序,一个临时的用户验证数据库,每天执行一次批处理,将活跃度高的用户帐户撮到临时数据库中。查询的时候先查询临时库,如果没有,再进行全库查询。
一个更高级的查询方案——数据缓存服务,就是将最常用最直接的数据直接存放在缓存服务器中,而这个缓存服务器定时从主服务器获取并更新信息。更深入地,可以将缓存服务器做二次缓存,也就是一次性处理输入并存放到list数据中,作为全局变量放到内存中进行查询,同时用散列表或者数组进行数据索引,根据查询分布到各个变量中,直接从内在中读取数据。
分享到:
相关推荐
大型网站面临DDoS攻击、SQL注入、XSS跨站脚本等安全威胁,需部署防火墙、Web应用防火墙(WAF)、SSL加密等措施,保障用户数据安全。 十、监控与日志 通过ELK(Elasticsearch、Logstash、Kibana)或Prometheus+Grafana...
【大型网站系统与Java中间件实践读书笔记(二)】 大型网站系统是指处理海量数据、应对高并发访问、以及应对复杂业务逻辑的网络应用。在这些系统中,Java中间件扮演着关键角色,帮助实现系统的扩展性和高效运行。...
在构建大型网站架构时,面临诸多挑战,以下将详细探讨10个关键问题: 1. 海量数据处理:随着用户数量的增长,数据量呈指数级增加。传统的SQL查询和简单的索引无法应对这种压力。设计良好的数据库分片和分区策略至关...
本文主要探讨了现代医院大型医疗设备维修中存在的问题,并提出相应的解决策略。 首先,医院对于大型医疗设备维修的重要性认知不足。这种现象可能导致设备在出现问题时未能得到及时维护,从而增加医疗风险。为了改变...
在构建大型网站时,数据处理能力是首要考虑的问题。与小型站点相比,大型网站每天可能产生数百万条数据,这要求系统具备高效的数据处理机制。在设计初期,简单的`SELECT`和`UPDATE`语句可能足以应对需求,但随着用户...
《大型网站技术架构》这本书深入探讨了构建高访问量、高并发、高可用性的大型网站所需的技术和架构设计。在互联网行业中,随着用户数量的急剧增长,如何保证网站的稳定性和性能成为了一项重大挑战。Java作为业界广泛...
通过阅读《大型网站技术架构:核心原理与案例分析》,读者不仅可以学习到理论知识,还能从实际案例中汲取经验,更好地应对大型网站面临的各种复杂问题。无论是初级开发者还是经验丰富的架构师,都能从中受益匪浅。
在网站初步建立阶段,可能会面临资源有限的情况,例如使用共享主机或者单一服务器来承载整个网站。随着用户数量的增长和访问频率的提高,这种简单的配置往往难以满足日益增长的需求。此时,**物理分离WebServer和...
2019年江苏省研究生数学建模科研创新实践大赛中,参赛者们面临的挑战正是如何运用科学方法解决这一实际问题。遗传算法作为一种强大的优化工具,被引入到这个问题的研究中,旨在为大型机场的加油车调度提供更高效、...
分布式系统设计成为了解决大规模网站问题的有效手段之一。它将整个系统拆分成多个服务或组件,并通过网络进行通信。这种方式不仅可以提高系统的扩展性,还能增强系统的容错性。 **关键技术:** - **微服务架构**:...
1. 海量数据处理:大型网站通常面临的是海量数据的挑战。传统的SQL查询在数据量巨大时性能急剧下降,因此需要优化数据模型,减少多表联查,并考虑使用NoSQL数据库或分布式数据库系统来分摊负载。 2. 数据并发处理:...
书中详细阐述了如何利用各种中间件技术来解决大型网站在高并发、大数据量、高可用性等方面面临的挑战。下面,我们将就书中的核心知识点进行详细的解析。 1. **服务框架**:服务框架是构建分布式系统的基石,它使得...
大型网站的架构设计面临着多重目标与挑战: 1. **负载均衡**:如何合理分配网络流量,确保系统稳定运行,避免单点故障。 2. **数据备份**:建立可靠的数据备份机制,防止数据丢失。 3. **异地容灾**:实现数据和...
不同业务背景的大型网站在架构上有所差异,但仍然存在共通的技术和方法。以上知识点涵盖了大型网站架构演化的核心要素,从基础架构到高级优化策略,每一步都至关重要,共同构成了大型网站系统架构的完整演化之路。
随着互联网技术的飞速发展,中大型网站面临着日益增长的用户访问量、数据处理需求以及复杂的业务场景,传统的网站架构已无法满足这些需求。因此,网站架构必须经历一系列的演变来应对挑战,以提高性能、可靠性和可...
### 一步步构建大型网站架构 #### 架构演变第一步:物理分离 Web Server 和数据库 - **背景**:网站初创时期,可能使用单一服务器承载所有功能,随着用户增长,单一服务器难以满足需求,出现性能瓶颈。 - **解决...
这份文档分为三部分,即“大型网站架构系列一”、“大型网站架构系列二”和“大型网站架构系列三”,分别对网站架构的不同方面进行了详尽的阐述。 在“大型网站架构系列一”中,首先会介绍网站架构的基础概念,包括...
根据提供的文件信息,我们可以推断出这份文档主要讨论的是“大型分布式网站架构设计”的相关内容,并且提供了一个百度云的下载链接。接下来,我们将基于这些信息深入探讨与大型分布式网站架构设计相关的几个关键知识...
在系列的第一部分,"疯狂代码,大型网站架构系列之一,前言,不得不考虑的问题.doc",作者引入了大型网站架构设计所面临的根本问题。这部分可能包括了对高可用性、可扩展性、性能优化、数据一致性以及故障恢复等关键...