服务器集群的思考

来源:互联网 发布:网络4007错误怎么回事 编辑:程序博客网 时间:2024/05/29 07:24

服务器集群的思考

 

面对不断增长的用户请求量、不断提高的服务可靠性,‘集群’技术的分量越来越重要。

首先想象下集群后一个简单的请求流程。单一入口(都是从一个地方请求数据),中间层分发(负载均衡设备分发请求到集群的node上),node之间的同步。这就是整个集群的过程。

 

一 单一的入口

对于终端client user来说,他们通过一个入口来访问服务,这个入口一般是域名、ip。client user从来不用理会后台的复杂性。

 

二 中间层的分发

中间的分发代表着正式进入集群阶段。

 

域名分发:

dns服务器解析多个ip出来,client选择一个ip作为访问入口。这中集群方式比较简单,没有负载均衡的判断机制。

 

ip分发:

client通过主ip访问到负载均很设备(F5、keepalived+haproxy、middleware cluster(weblogic、WebSphere自带的)),负载设备通过source ip、cookie等将request分发到后台的node上。这时我们可以设置负载均衡机制(轮询、分组、最大连接数等),根据request来分发,我们还可以改写request、response。

能够这样做的原因是我们懂得socket编程、理解tcp/ip协议族,能够对接收到的ip raw包进行改写。

分发到不同node无非是修改ip包的源地址、目的地址。判断request无非是获取HTTP请求的url再做判断。

 

三 node间的同步

node间的同步时最简单的,也是最复杂的。

node可以是static web server、dynamic web server、application server、database。

 

那么我们需要同步些什么呢?

http session,ejb session,server state,disk data synchronization。

一般的web server是无需同步内容的。weblogic、websphere cluster等提供了http session、ejb session的同步。java cluster同步的原理是通过rmi对象序列化来实现的。另外还有server state object 同样会在服务器之间同步,以便为负载均衡判读机制服务。

 

四 database的集群同步

数据库也属于node

最简单的划分database,涉及到两个part,request connector和data processer

request connector负责接收请求,将请求发给data processer处理。

date processer 负责具体的查询、读写磁盘操作。

在request conncector上半层的集群意义并不大,仅仅提供了多个connector接收端,request conncector的下半层涉及到各个node的同步(sql语句的内容、表的锁定、内存共享)。共享数据,并最终有序的像底层data processer发送sql institute。这个层的实现有oracle的rac、mysql的cluster等。

data processer的集群就更加的复杂了,现在的商业实现很少。

一般data processer还是single,通过磁盘的raid来提供处理速度。而不是集群来提供。在后端san为我们提供了高效的磁盘读写速度。

而集群一般是通过active/standby方式,主备数据库同时运行,主数据库的更新不同向backup数据库写入。

 

 

原创粉丝点击