http://blog.csdn.net/sunchaohuang/archive/2009/02/12/3882728.aspx
下面是我准备在
BOF
中抛砖引玉用到的砖:
网站如何做分布式(集群)的大纲
网站如何做分布式(集群)的大纲
何时要用分布式
- 单台服务器无法承受压力。
- 需要实现发生错误时候,自动切换
- 学习或者测试分布式技术
应用分布式的场景
一、提供多个对外的接口,按照一定规则,分派不同请求由不同接口来处理。
这时候需要考虑:
- 如何实现负载均衡
- 在哪个层次实现转移负载
- 负载的均衡如何实现
- 如何实现故障转移
- 如何监控故障
- 如何切换服务
二、把一个功能拆分成多个功能,不同功能分布部署到不同服务器上
- 对外功能的拆分
- http://news.sina.com.cn/ http://sports.sina.com.cn/ http://mobile.sina.com.cn/
- http://www.microsoft.com/china/ http://www.microsoft.com/downloads/
- SOA
- n层架构,其中的一些层分布到不同服务器上
- WEB + DB 模式
网站请求中的分布式
按照请求流程,我们可以在以下环节按照一定规则,把用户的请求分流到不同服务器上:
- Web Client Level
- 例子:QQ 设置中你可以选择登陆的服务器IP
- DNS Based Selection
- 优点:
- 缺点:
- 不能区分服务器的差异,也不能反映服务器的当前运行状态。
- DNS 的刷新需要时间,无法及时故障切换。
- TCP balancing proxies
- 硬件
- 软件
- HTTP-aware routers
- URL重定向
网站应用中的分布式
- 代理服务器实现请求的分离
- Squid是Linux下一个缓存Internet数据的代理服务器软件
- 拆分网站对外功能
- 不同域名前、后缀
- URL 重写
- SOA
- 每个Service 分布到一台服务器上
- n 层架构
- 缓存分布式部署
- 文件Cache
- 内存Cache (memcached )
- http://www.danga.com/memcached/
- https://sourceforge.net/projects/memcacheddotnet/
- DB分布式集群部署
- 故障转移
- 发布订阅
- 分布式分区视图
- 应用服务器(比如定时发送邮件通知的服务)
- 相关技术:
- 企业服务
- .net Remoting
- WCF
- Web Service
- 缓存分布式部署
如何判断一个应用是否支持分布式
如果发现某一部分应用需要做分布式了,就可以按照以下思路来考虑如何改造:
从应用所用数据看是否支持分布式
- 多份并存数据(一个数据存在多份)最大多长时间同步一次是可接受的。
- 内存缓存的数据跟数据库的数据(页面级缓存和业务逻辑缓存)
- 静态文件跟数据库
- 查询数据库跟业务变更数据库
- 数据按照一定规则拆分(一个数据只存在一份)对业务是否有影响
- 过去每年的数据迁移到一个对应历史库中。
- 专用的图片服务器 http://pics.ebaystatic.com/
此处可分析:
QQ
的在线用户数据,会是如何处理的呢?
从应用逻辑过程看是否支持分布式
- 是否可以并行执行这个逻辑过程
- 这个逻辑过程是否可以拆分成几个松耦合的过程
2006
年
9
月
19
日
17:01
引:要不是
TechEd
,还真不知道微软出了
Compute Cluster Pack
这么个东西。
微软在群集
/
分布式领域已经做了大量的工作,在
Windows 2000
发布时,它就已经支持了四种分布式模型,分别对应于不用的应用场合。他们是:
Microsoft
群集服务(
MSCS
)、网络负载平衡(
NLB
)、组件负载平衡(
CLB
)和
Application Center 2000
。详情见:
http://www.microsoft.com/china/technet/archives/columns/tips/w2kclust.asp
我对分布式计算一直比较有兴趣,今年在上海
TechEd
听了一个讲
Windows Compute Cluster Server
(
CCS
)的
Session
,才知道有这么个东西存在。
MSDN
上已经有下载了,发布日期是
2006/07/17
。但不知何故微软似乎没有怎么给这个产品作市场宣传嗯。
我在
TechEd
会后和微软的工作人员(来自开发团队)小聊了一会儿,得知这个产品最佳的应用领域在于那些
“Task
的数量很少,但每个
Task
都需要很长时间计算
”
的问题,比如
Pi
的计算。实际上这个产品是为科学计算准备的,比如气象模拟、地质勘探等领域。
CCS
基于
MPI 2.0标准
,所以它可以和其他基于
MPI 2.0
栈的服务器协同工作。
CCS
目前可以安装在
Windows Server 2003/R2 64bit
版本上。
32-bit
对于高性能计算(
HPC
)可能确实字长太短了,所以微软的方案也根本没有打算支持。
这里有个从微软网站
copy
过来的
table
,我在最右边加了一列,来描述
CCS
和它们的不同之处:
|
MSCS
|
NLB
|
CLB
|
Application
Center
|
CCS
|
用途
|
应用程序故障恢复与故障返回
|
IP
通信负载平衡
|
COM+
对象负载平衡
|
创建并管理
Web
区
|
高性能计算
( High Performance Computing/HPC ) |
优势
|
可用性与可管理能力
|
可用性与可伸缩性
|
可用性与可伸缩性
|
可用性、可伸缩性与可管理能力
|
可伸缩性与可管理能力
|
每个群集中的最大节点数量
|
2
个(针对
Win2k AS
)或
4
个(针对
Datacenter
)
|
32
|
16
|
16
|
无限制
|
群集类型
|
共享存储机制
|
无共享资源
|
无共享资源
|
无共享资源
|
N/A
|
状态信息
|
有状态
|
无状态(如果需要的话,可以支持有状态连接)
|
无状态
|
无状态
|
N/A
|
是否需要对服务器应用程序进行修改
|
需要
|
不需要
|
不需要
|
不需要
|
需要(使用
MPI 2.0
库,只支持
Fortran77
、
Fortran90
和
C
语言)
|
是否需要使用专用硬件设备
|
需要
|
不需要
|
不需要
|
不需要
|
64-bit CPU from Intel or AMD ...
|
是否独立
|
是
|
是
|
否(需要使用
AppCenter
)
|
是
|
否(需要使用
Compute Cluster Pack
)
|
分布式计算可以让你的程序或者服务拥有更好的可靠性,或更高的可伸缩性。
CCS
是为性能而生的产品,它可以以高度
scalable
的方式增强群集的性能。微软在多
CPU/
多核方面已经提供了对了
SMP
的支持(通过
VC2005
的
OpenMP 2.0
支持
—
同时支持
Managed
和
Unmanaged
代码!),在多机并行运算方面又实现了
MPI 2.0
,它的计算机群集方面的产品线应该已经相当完善了。