大型网站面临的问题:
海量数据处理
大型网站每天的数据量可能上百万,甚至上千万或更多。如果存在设计不好的多对多关系,在前期可能没有任何问题,但是随着用户增长,数据量会以几何级数增加。此时,对于一个表的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作为业界广泛...
通过阅读《大型网站技术架构:核心原理与案例分析》,读者不仅可以学习到理论知识,还能从实际案例中汲取经验,更好地应对大型网站面临的各种复杂问题。无论是初级开发者还是经验丰富的架构师,都能从中受益匪浅。
#### 二、大型网站系统面临的挑战 1. **高并发处理**:如何有效地处理海量用户的并发请求,是大型网站系统面临的一个重大挑战。 2. **数据一致性**:在分布式环境下保持数据的一致性是一项复杂的任务。 3. **性能...
在网站初步建立阶段,可能会面临资源有限的情况,例如使用共享主机或者单一服务器来承载整个网站。随着用户数量的增长和访问频率的提高,这种简单的配置往往难以满足日益增长的需求。此时,**物理分离WebServer和...
这本书详细阐述了大型网站在设计、构建和优化过程中所面临的关键问题和解决方案,涵盖了从基础架构到高级技术的多个层面。以下是对书中主要知识点的概述: 1. **负载均衡**:大型网站为了应对高并发访问,通常会...
2019年江苏省研究生数学建模科研创新实践大赛中,参赛者们面临的挑战正是如何运用科学方法解决这一实际问题。遗传算法作为一种强大的优化工具,被引入到这个问题的研究中,旨在为大型机场的加油车调度提供更高效、...
分布式系统设计成为了解决大规模网站问题的有效手段之一。它将整个系统拆分成多个服务或组件,并通过网络进行通信。这种方式不仅可以提高系统的扩展性,还能增强系统的容错性。 **关键技术:** - **微服务架构**:...
通过上述分析可以看出,《大型网站系统与Java中间件实践》这本书深入探讨了如何利用Java中间件来解决实际项目中遇到的问题,并给出了一系列具体可行的建议。无论是对于初学者还是有经验的开发者来说,都是一本值得...
1. 海量数据处理:大型网站通常面临的是海量数据的挑战。传统的SQL查询在数据量巨大时性能急剧下降,因此需要优化数据模型,减少多表联查,并考虑使用NoSQL数据库或分布式数据库系统来分摊负载。 2. 数据并发处理:...
书中详细阐述了如何利用各种中间件技术来解决大型网站在高并发、大数据量、高可用性等方面面临的挑战。下面,我们将就书中的核心知识点进行详细的解析。 1. **服务框架**:服务框架是构建分布式系统的基石,它使得...
大型网站的架构设计面临着多重目标与挑战: 1. **负载均衡**:如何合理分配网络流量,确保系统稳定运行,避免单点故障。 2. **数据备份**:建立可靠的数据备份机制,防止数据丢失。 3. **异地容灾**:实现数据和...
不同业务背景的大型网站在架构上有所差异,但仍然存在共通的技术和方法。以上知识点涵盖了大型网站架构演化的核心要素,从基础架构到高级优化策略,每一步都至关重要,共同构成了大型网站系统架构的完整演化之路。
随着互联网技术的飞速发展,中大型网站面临着日益增长的用户访问量、数据处理需求以及复杂的业务场景,传统的网站架构已无法满足这些需求。因此,网站架构必须经历一系列的演变来应对挑战,以提高性能、可靠性和可...