`
ahuango
  • 浏览: 55694 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】疯狂代码,大型网站架构系列之一,前言,不得不考虑的问题

阅读更多
http://www.crazycoder.cn/Yuanchuang/Article10919.html
前言:这两天机器坏了,正在送修中,写个系列的大型网站架构的文章,希望对有志在互联网做出一番事业的站长朋友们一些帮助。

注意:这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者.NET环境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的。

文入正题:
首先讨论一下大型网站需要注意和考虑的问题
A.      海量数据的处理。
众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多再加几个索引就可以搞定。对于大型网站,每天的数据量可能就上百万,如果一个设计不好的多对多关系,在前期是没有任何问题的,但是随着用户的增长,数据量会是几何级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多表联合查询)的成本的非常高的。
B.      数据并发的处理
在一些时候,2.0的CTO都有个尚方宝剑,就是缓存。对于缓存,在高并发高处理的时候也是个大问题。在整个应用程序下,缓存是全局共享的,然而在我们进行修改的时候就,如果两个或者多个请求同时对缓存有更新的要求的情况下,应用程序会直接的死掉。这个时候,就需要一个好的数据并发处理策略以及缓存策略。
另外,就是数据库的死锁问题,也许平时我们感觉不到,死锁在高并发的情况下的出现的概率是非常高的,磁盘缓存就是一个大问题。
C.      文件存贮的问题
对于一些支持文件上传的2.0的站点,在庆幸硬盘容量越来越大的时候我们更多的应该考虑的是文件应该如何被存储并且被有效的索引。常见的方案是对文件按照日期和类型进行存贮。但是当文件量是海量的数据的情况下,如果一块硬盘存贮了500个G的琐碎文件,那么维护的时候和使用的时候磁盘的Io就是一个巨大的问题,哪怕你的带宽足够,但是你的磁盘也未必响应过来。如果这个时候还涉及上传,磁盘很容易就over了。
也许用raid和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。
所以我们不得不承认,文件存贮是个很不容易的问题
D.     数据关系的处理
我们可以很容易的规划出一个符合第三范式的数据库,里面布满了多对多关系,还能用GUID来替换INDENTIFY COLUMN 但是,多对多关系充斥的2.0时代,第三范式是第一个应该被抛弃的。必须有效的把多表联合查询降到最低。
E.      数据索引的问题
众所周知,索引是提高数据库效率查询的最方面最廉价最容易实现的方案。但是,在高UPDATE的情况下,update和delete付出的成本会高的无法想想,笔者遇到过一个情况,在更新一个聚焦索引的时候需要10分钟来完成,那么对于站点来说,这些基本上是不可忍受的。
索引和更新是一对天生的冤家,问题A,D,E这些是我们在做架构的时候不得不考虑的问题,并且也可能是花费时间最多的问题,
F.      分布式处理
对于2.0网站由于其高互动性,CDN实现的效果基本上为0,内容是实时更新的,我们常规的处理。为了保证各地的访问速度,我们就需要面对一个绝大的问题,就是如何有效的实现数据同步和更新,实现各地服务器的实时通讯有是一个不得不需要考虑的问题。
G.     Ajax的利弊分析
成也AJAX,败也AJAX,AJAX成为了主流趋势,突然发现基于XMLHTTP的post和get是如此的容易。客户端get或者post到服务器数据,服务器接到数据请求之后返回来,这是一个很正常的AJAX请求。但是在AJAX处理的时候,如果我们使用一个抓包工具的话,对数据返回和处理是一目了然。对于一些计算量大的AJAX请求的话,我们可以构造一个发包机,很容易就可以把一个webserver干掉。
H.      数据安全性的分析
对于HTTP协议来说,数据包都是明文传输的,也许我们可以说我们可以用加密啊,但是对于G问题来说的话,加密的过程就可能是明文了(比如我们知道的 QQ,可以很容易的判断他的加密,并有效的写一个跟他一样的加密和解密方法出来的)。当你站点流量不是很大的时候没有人会在乎你,但是当你流量上来之后,那么所谓的外挂,所谓的群发就会接踵而来(从qq一开始的群发可见端倪)。也许我们可以很的意的说,我们可以采用更高级别的判断甚至HTTPS来实现,注意,当你做这些处理的时候付出的将是海量的database,io以及CPU的成本。对于一些群发,基本上是不可能的。笔者已经可以实现对于百度空间和 qq空间的群发了。大家愿意试试,实际上并不是很难。
I.       数据同步和集群的处理的问题
当我们的一台databaseserver不堪重负的时候,这个时候我们就需要做基于数据库的负载和集群了。而这个时候可能是最让人困扰的的问题了,数据基于网络传输根据数据库的设计的不同,数据延迟是很可怕的问题,也是不可避免的问题,这样的话,我们就需要通过另外的手段来保证在这延迟的几秒或者更长的几分钟时间内,实现有效的交互。比如数据散列,分割,内容处理等等问题
K.数据共享的渠道以及OPENAPI趋势
   Openapi已经成为一个不可避免的趋势,从google,facebook,myspace到海内校内,都在考虑这个问题,它可以更有效的留住用户并激发用户的更多的兴趣以及让更多的人帮助你做最有效的开发。这个时候一个有效的数据共享平台,数据开放平台就成为必不可少的途径了,而在开放的接口的情况保证数据的安全性和性能,又是一个我们必须要认真思考的问题了。

当然还有更多需要考虑的问题,我这里就写一个最需要考虑的问题,欢迎补充。

下一篇文章将针对问题A,提出具体的解决方案和思路
分享到:
评论

相关推荐

    大型分布式网站架构设计与实践.带目录书签.完整版.rar

    在大型网站架构的演变过程中,集中式的架构设计出于对系统的可扩展性、可维护性以及成本等多方面因素的考虑,逐渐被放弃,转而采用分布式的架构设计。分布式架构的核心思想是采用大量廉价的PC Server,构建一个低...

    大型网站架构系列一 (1)1

    前言:这两天机器坏了,正在送修中,写个系列的大型网站架构的文章,希望对有志在互联网做出一番事业的站长朋友们一些帮助。;注意:这里的大型网站架构只包括高互动性高交

    第一讲-大型互联网项目架构设计实践及架构优化思路.docx

    代码解决的的执行力的问题 ,架构更多的是依赖 业务的洞察能力 和 技术视野 课程重点 架构解决方案 技术解决方案落地 架构背后思考 核心问题解决方案 1.3、课程问题 项目实战 和 其他的 课程到底有...

    架构之美(中文版)

    本书让最优秀的设计师和架构师来描述他们选择的软件架构,剥开架构的各层,展示他们如何让软件做到实现功能、可靠、易用、高效率、可维护、可移植和优雅。 目录 序 前言 5 第一部分 论架构 第1章 架构概述 13 1.1...

    ASP.NET三层架构

    设计模式中的分层架构(可以参考一下J2EE(Java 2 Platform, Enterprise Edition (是由Sun、IBM等厂商所主导,协同许多厂商共同参与所制定出的规范,以企业及企业间之运算为导向的JAVA平台环境)中MVC(Multiple ...

    软件架构师应该知道的97件事总结

    前言 客户需求重于个人简历 简化根本复杂性,消除偶发复杂性 关键问题可能不是出在技术上 以沟通为中心,坚持简明清晰的表达方式和开明的领导风格 架构决定性能 分析客户需求背后的意义 起立发言 故障终究会发生 ...

    测试架构师修炼之道:从测试工程师到测试架构师1

    前言为什么写这本书先讲两个故事吧。一次我面试了一位有8年名企测试经验的候选者。面试中,我能感受到他对他现在做的业务很熟悉,但他熟悉的这些业务和他现在申请的职位中

    赢辉网络网站策划书(前言+架构部分).doc

    赢辉网络网站策划书(前言+架构部分).doc

    推荐系统架构前言实践.jpg

    推荐系统架构前言实践

    信息架构 超越Web设计(第4版).pdf

    第1章信息架构要解决的问题 3 你好,iTunes 5 信息架构要解决的问题 8 信息过载 9 访问信息的更多方式 10 加入信息架构 12 由信息构成的场所 13 渠道之间的一致性 13 系统化思维 15 本章回顾 16 第2章信息架构的定义...

    开源软件架构

    前言(卷一) 卷1:第1章 Asterisk 卷1:第3章 The Bourne-Again Shell 卷1:第4章 Berkeley DB 卷1:第5章 CMake 卷1:第6章 Eclipse之一 卷1:第6章 Eclipse之二 卷1:第6章 Eclipse之三 卷1:第8章 HDFS——...

    架构之美中文文字版(_Reilly)

     3.4 关于架构的思考 61  第4章 记忆留存 67  4.1 功能和约束 68  4.2 工作流 69  4.3 架构关注点 70  4.4 用户反应 90  4.5 结论 90  参考文献 90  第5章 面向资源的架构:在Web中 91  5.1 简介...

    petshop架构分析

    关于petshop架构分析的好文章 前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是...本系列试图对PetShop作一个全方位的解剖,依据的代码是PetShop4.0,可以从链接

    .NET分布式架构开发实战之一

    前言:本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个逻辑层的实现以及新问题的出现和代码的重构。本系列文章以故事的形式展开,而且文章列举的很多项目的名称,...

    asp.net的三层架构模式

    前言: 与ASP相比ASP.NET在Web应用开发上无疑更容易,更有效率。Web开发大部分还是围绕着数据操作,建立数据库存储数据,编写代码访问和修改数据,设计界面采集和呈现数据。走过Asp.net学习入门阶段后,真正开始着手...

    详解SOA五种基本架构模式

    1. 前言 目前,面向服务的架构(SOA)已成为连接复杂服务系统的主要解决方案。 虽然SOA 的理论很容易理解,但要部署一个设计良好、真正实用的 SOA 系统却非 常困难。本文试图通过解析 SOA的模式,提供与架构相关的...

    代码阅读方法与实践

    昨日开始,看《代码阅读方法与实践》,希望能够有所提高。 序言: 有一扇窗,从未打开,却要永远关闭; 有一些人,确实存在,我们却无缘相见; 有一种生活,还没有到来,我们却已永远离开。 学习编写伟大代码...

Global site tag (gtag.js) - Google Analytics