1、文件存贮的问题
对于一些支持文件上传的2.0的站点,在庆幸硬盘容量越来越大的时候我们更多的应该考虑的是文件应该如何被存储并且被有效的索引。常见的方案是对文件按照日期和类型进行存贮。但是当文件量是海量的数据的情况下,如果一块硬盘存贮了500个G的琐碎文件,那么维护的时候和使用的时候磁盘的Io就是一个巨大的问题,哪怕你的带宽足够,但是你的磁盘也未必响应过来。如果这个时候还涉及上传,磁盘很容易就over了。
2、海量数据的处理
众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多再加几个索引就可以搞定。对于大型网站,每天的数据量可能就上百万,如果一个设计不好的多对多关系,在前期是没有任何问题的,但是随着用户的增长,数据量会是几何级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多表联合查询)的成本的非常高的。
3、ajax的利弊分析
成也ajax,败也ajax,ajax成为了主流趋势,突然发现基于XMLHTTP的post和get是如此的容易。客户端get或者post 到服务器数据,服务器接到数据请求之后返回来,这是一个很正常的ajax请求。但是在ajax处理的时候,如果我们使用一个抓包工具的话,对数据返回和处理是一目了然。对于一些计算量大的ajax请求的话,我们可以构造一个发包机,很容易就可以把一个webserver干掉。
4、数据并发的处理
在一些时候,2.0的CTO都有个尚方宝剑,就是缓存。对于缓存,在高并发高处理的时候也是个大问题。在整个应用程序下,缓存是全局共享的,然而在我们进行修改的时候就,如果两个或者多个请求同时对缓存有更新的要求的情况下,应用程序会直接的死掉。这个时候,就需要一个好的数据并发处理策略以及缓存策略。
另外,就是数据库的死锁问题,也许平时我们感觉不到,死锁在高并发的情况下的出现的概率是非常高的,磁盘缓存就是一个大问题。
也许用raid和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。
所以我们不得不承认,文件存贮是个很不容易的问题
5、数据关系的处理
我们可以很容易的规划出一个符合第三范式的数据库,里面布满了多对多关系,还能用GUID来替换INDENTIFY COLUMN 但是,多对多关系充斥的2.0时代,第三范式是第一个应该被抛弃的。必须有效的把多表联合查询降到最低。
6、数据索引的问题
众所周知,索引是提高数据库效率查询的最方面最廉价最容易实现的方案。但是,在高UPDATE的情况下,update和delete付出的成本会高的无法想想,笔者遇到过一个情况,在更新一个聚焦索引的时候需要10分钟来完成,那么对于站点来说,这些基本上是不可忍受的。
索引和更新是一对天生的冤家,问题A,D,E这些是我们在做架构的时候不得不考虑的问题,并且也可能是花费时间最多的问题,
7、分布式处理
对于2.0网站由于其高互动性,CDN实现的效果基本上为0,内容是实时更新的,我们常规的处理。为了保证各地的访问速度,我们就需要面对一个绝大的问题,就是如何有效的实现数据同步和更新,实现各地服务器的实时通讯有是一个不得不需要考虑的问题。
8、数据安全性的分析
对于HTTP协议来说,数据包都是明文传输的,也许我们可以说我们可以用加密啊,但是对于G问题来说的话,加密的过程就可能是明文了(比如我们知道的QQ,可以很容易的判断他的加密,并有效的写一个跟他一样的加密和解密方法出来的)。当你站点流量不是很大的时候没有人会在乎你,但是当你流量上来之后,那么所谓的外挂,所谓的群发就会接踵而来(从qq一开始的群发可见端倪)。也许我们可以很的意的说,我们可以采用更高级别的判断甚至HTTPS来实现,注意,当你做这些处理的时候付出的将是海量的database,io以及CPU的成本。对于一些群发,基本上是不可能的。笔者已经可以实现对于百度空间和qq空间的群发了。大家愿意试试,实际上并不是很难。
9、数据同步和集群的处理的问题
当我们的一台databaseserver不堪重负的时候,这个时候我们就需要做基于数据库的负载和集群了。而这个时候可能是最让人困扰的的问题了,数据基于网络传输根据数据库的设计的不同,数据延迟是很可怕的问题,也是不可避免的问题,这样的话,我们就需要通过另外的手段来保证在这延迟的几秒或者更长的几分钟时间内,实现有效的交互。比如数据散列,分割,内容处理等等问题
10、数据共享的渠道以及OpenAPI趋势
OpenAPI已经成为一个不可避免的趋势,从google,facebook,myspace到海内校内,都在考虑这个问题,它可以更有效的留住用户并激发用户的更多的兴趣以及让更多的人帮助你做最有效的开发。这个时候一个有效的数据共享平台,数据开放平台就成为必不可少的途径了,而在开放的接口的情况保证数据的安全性和性能,又是一个我们必须要认真思考的问题了。
请您到ITEYE看我的原创:http://cuisuqiang.iteye.com
或支持我的个人博客,地址:http://www.javacui.com
相关推荐
《大型网站架构说明》是一份深入探讨网站架构的宝贵资料,包含了从基础到高级的多个层面,旨在帮助读者理解如何构建稳定、可扩展且高效的大型网站。这份文档分为三部分,即“大型网站架构系列一”、“大型网站架构...
首先,书中详细讲解了网站架构的基础知识,包括软件架构的基本概念、设计原则以及常见的架构模式,如分层架构、微服务架构、分布式系统等。这些基础知识对于理解复杂的网站架构至关重要,特别是对于初学者来说,能够...
分布式大型网站架构、高性能MySQL是构建现代互联网应用的关键技术,对于理解如何处理高并发、海量数据的场景至关重要。本文将深入探讨这些主题,并结合提供的书籍资源进行解析。 首先,我们来看"大型网站技术架构:...
### 大型网站架构演变详解 #### 架构演变第一步:物理分离Web服务器与数据库 在网站初期,可能仅有一台服务器集成了Web服务与数据库服务。随着网站流量的增加,这种架构会面临性能瓶颈,因为Web应用和数据库之间...
通过对大型分布式网站架构设计的理解,我们不仅能够掌握分布式系统的基本概念和发展趋势,还能够深入了解如何有效地设计和实现一个高效、可靠且可扩展的分布式网站。这其中包括了负载均衡、数据一致性、故障恢复以及...
### 大型网站架构演变与知识体系解析 #### 架构演变的第一步:物理分离Web服务器与数据库 在网站发展的初期阶段,往往由于资源限制,Web应用与数据库部署在同一台服务器上。随着用户访问量的增长,单一服务器上的...
总的来说,这个系列旨在提供一套全面的大型网站架构设计指南,从基本概念到具体实践,帮助读者理解并掌握构建高性能、高可用、可扩展的大型网站所需的关键技术和策略。通过深入学习这套资料,开发者能够更好地应对...
大型网站技术架构的核心原理涵盖了网站架构设计中的基本原则和架构模式。一个典型的大型网站架构可能会包含以下几个核心组件: - 负载均衡器:负责将用户请求分发到不同的服务器上,以确保服务器不会过载,并且用户...
希望读者通过本书可以了解大型网站架构变迁过程中的较为通用的问题和解法,并了解构建支撑大型网站的Java并了解构建支撑大型网站的 Java 中间件的实践经验。 对于有一定网站开发、设计经验,并想了解大型网站架构和...
《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展的大型网站架构的专业书籍。在当今互联网行业中,随着用户数量的急剧增长和业务需求的复杂性提升,传统的单体架构已经无法满足需求,分布式系统...
1. **网站架构概述**:介绍大型网站架构的基本概念,包括静态和动态内容的划分、单体架构与微服务架构的区别,以及为何随着网站规模的增长,需要逐步过渡到分布式架构。 2. **负载均衡**:讲解如何通过负载均衡技术...
从给定的信息来看,本文档将重点探讨大型分布式网站架构的设计与实践,旨在为读者提供一个全面、深入的理解。由于给定的部分内容并未提供具体的技术细节,因此本篇内容将根据标题、描述以及标签来进行扩展。 ### ...
大型网站技术架构的核心在于如何处理海量用户访问、数据存储、系统扩展等问题。在Java Web框架中,Spring Framework是一个重要的组成部分,它提供了依赖注入(DI)和面向切面编程(AOP)等特性,使得应用开发更加...
李智慧先生的这本书不仅涵盖了大型网站架构的基本原理,还提供了丰富的案例,帮助读者理解如何在实际工作中应对各种挑战。无论是对初入行业的新人还是经验丰富的工程师,都能从中获益匪浅,提升自己的技术水平和解决...
### 大型网站架构演变与知识体系详解 #### 架构演变的第一步:物理分离Web服务器与数据库 在网站初创阶段,通常是通过一台主机来承载所有的功能,包括Web服务和数据库服务。随着用户访问量的增长,单一主机的性能...
首先,我们需要理解大型网站技术架构的基本构成。通常,这包括前端、后端、数据库、缓存、分布式系统、负载均衡、安全防护等多个层面。前端负责用户交互,通常采用响应式设计和异步加载技术来提高用户体验;后端则...
《大型网站技术架构 核心原理与案例分析》的作者是李智慧,原阿里巴巴技术专家。 Java 的大多数应用都是用在Web上的,现在只要稍微大型一点的Web应用,都一定是一个分布式系统,那么一个分布式系统用到了哪些技术?...
### 大型门户网站架构设计 #### 一、三层架构简介及其局限性 ##### 1.1 三层架构原理 三层架构是一种常见的软件架构模式,它将应用程序分为三个逻辑层:应用表现层、业务逻辑层和数据访问层。这种分层方式有助于...