疯狂代码,大型网站架构系列之二,底层架构概论
书结上回,www.crazycoder.cn/Yuanchuang/Article10919.html
首先澄清上篇中关于几个朋友的评论。
上篇疯狂代码介绍的基于 AJAX 的攻击很多人提出疑问,比如不能跨域,减轻负担之类。
Ajax 是通过简单的 GET 和 POST 进行数据传递的,采用 HTTPDEBUGGER,抓取数据,然
后采用如下方案,顺便写个示例的攻击代码.比传统的 webform,我们更容易构造一些,
其实对于 webform 和 ajax 的处理和发包过程是一样的,ajax 数据量相对小,速度也快一些。
结合 SharpPcap 和 HttpWebRequest 我们构造一个合理的正常的 IP 数据包过去,代码很长,我
们用伪代码简单的表达一下。
request.CreateUrl(Ajax 处理页面);
request.Method=”GetORPost”;
request.refere=”网页来源”;
SharpPcap.SetLinkConnection(伪造 IP 地址);
String content = request.GetResponseStream() 如果作为一个多线程的应用程序对对方的 WEB
构成批量发包的话(假如是 DEDECMS),足可以把 Dedecms 的数据库搞垮
文入正题:
对于上回书提到要解决问题 A,我们先讲解一下电信公司 ADSL 的布局方案。机器上没有
装 VISIO,我简单的用文字描述一下流程。
Adsl 用户 Aè 输入用户名密码 è 远程连接到账户数据库(在天津)è 账户数据库连接计费数
据库并返回状 è 如果成功,连接 PPPOE 服务器,并进一步连接计费数据库 è 认证服务并连
接。
这里没有什么特别的地方,但是和 qq 通讯服务是一样的,就是采用了统一的用户验证服务
器,同时对于用户验证的信息数据库是只读的,我们从其中可以想到什么吗?
以上是个简单的例子,下面开始谈具体的架构策略,首先对于上篇提到的问题 A,我们首
先以用户数据库为例来做解释和要求。
首先做用户量估算需求,假如我们做的是学术社区,那么这个用户量不会很大,可能我们
不需要考虑这个,对于用户量的级别,我们暂时把用户量级别定为三种,百万级别( M)
和千万界别(S),以及亿万级别( Q),并考虑用户登录验证以及查询常用的操作,对
M 和 S 进行扩充以及了解。
众所周知,在这个情况下,对于用户数据的负载其实并非可行而不可行的问题,而是如何
最大化的保证查询和更新以及各个服务器之间的数据同步。这里我们不再讲解如何优化如
何索引,只介绍架构初期的方案,下面介绍的方案如果涉及全表查询,可以采用分区视图
的方案,大家可以具体搜索相关资料。
对于 M 级别来说,现有的 DBMS 经过合理的布局完全可以满足需求。我们需要解决的问题
的关键其实是处理 IO 方面的问题,处理方案相对简单一些,对数据库的 FILE 文件分磁盘