javaweb服务器分布式集群解析

                                   javaweb服务器分布式集群

一:服务器类型

服务器的分布式和集群都是由集中式发展而来的。但是分布式和集中式会配合使用。我们用图来了解下工作模式。

集中式:

分布式:

集群:

我们在搭建网站的时候,为了及时响应用户的请求,尤其是高并发请求的时候,我们需要搭建分布式集群来处理请求。

我们一个服务器的处理能力是有限的。如果用我们一台设备当作服务器,那么当并发量比较大的时候,同一时间达到上

百的访问量。那服务器就宕机了。然后只能重启服务器,当出现高并发访问的时候,就又会宕机。所以我们需要更多的

服务器来并行工作,处理用户的请求。那么问题来了,我们服务器运行的时候,怎么分发大量的请求给不同的服务器呢?

一般会采用(1*apache+n*Tomcat)或者服务器模式来分发并处理请求。或者采用nginx分发请求。至于具体选择哪个分发

请求,根据实际需求来定。追求处理效率的话选择nginx,追求稳定的话选择apache。当然如果网站足够大的话,可以用

apache和nginx配合使用。nginx在前端分发请求,后端用apache处理。

二:Apache(nginx)分发请求

回到正题:

我们怎么在多服务器下前端用apache或者nginx根据不同用户分发请求呢?

单服务器情况下我们可以在用户登陆的时候记录用户的登陆信息(SessionId),但是当用到多个服务器时,HTTP是无

状态的,原来但服务器的处理方式不能保证处理会话事务时记录用户的状态。一般有两种解决措施:

1、session粘性:

这种方式是把用户的状态与某个固定的服务器绑定起来。当用户第一次访问网站的时候,由apache记录用户的登陆

信息,然后把这个信息与对应的服务器捆绑起来。这时候当用户再次访问的时候,apache会把请求分发到对应的服

务器上。这种方式又称为亲和式集群。

这种粘性可由apache配置:

worker.controller.sticky_session=true|false

worker.controller.sticky_session_force=true|false

第一行配置代表是否启用session粘性,true代表启用。

第二行配置是在第一行开启session粘性的条件下,当服务器宕机时,是否继续发送到宕机的服务器上。true代表

仍然发送。false代表发送到别的服务器上。建议第一条配置为true,第二条为false。这样防止请求丢失。

优点:

占用的内存小,而且只在第一次用户访问的时候存储对应要访问的服务器,用户再次访问的时候,能迅速把请求分

发给对应的服务器。

缺点:

对前端服务器的依赖过大,一旦apache宕机,整个用户的sessionid数据都会丢失。

2、同步session:

为了业务的流畅,服务器可以牺牲空间和效率来保证同步session。这样前端apache服务器分发完请求之后,任何

一个服务器都可以到对应存储同步session的地方进行读取到用户的状态,并处理请求。这种模式也有三种实现方式

①cookie存储用户的信息:

我们可以选择在用户的磁盘上存储用户的信息,利用cookie机制。用户在每次访问的时候,都会在请求头携带用户

的登陆信息,我们便可以读取到。

优点:

把用户的存储信息放在用户的磁盘上,能够降低服务器的存储压力,而且存储的字节较session更轻量级。

缺点:

cookie受浏览器的限制,有些浏览器不支持cookie,比如google

cookie不够安全,容易被拦截并破解

间接的增加了传输数据的流量,增大了网络传输的压力

②:数据库存储用户的信息:

把用户的登陆信息存储在服务器的数据库里,这样每次有请求发过来的时候,通过读取数据库的信息加载对应用

户的状态。

优点:

数据库能够很好地保护好用户的数据,当服务器宕机的时候,不会丢失用户的sessionId信息。

缺点:

增加服务器的存储压力,需要存储用户的大量信息。为了安全还需要对用户的信息进行备份。

每次用户访问的时候都需要去加载数据库,有一定的时间开销。从数据库读取和写入数据库需要对象的序列化和

反序列化的性能开销。

每次读取之后需要把很多的数据加载到内存,占用内存大。

③:缓存(cache)存储用户的信息:

我们可以在服务器上开启一块专门用来存储用户登录信息的空间,每次用户登录的时候,存储用户的登录信息。

并且设置用户登陆信息的过期和刷新。这类似于内存中有一个数据库,而且也存在这样成熟的技术。比如redis。

一些大公司一般都会有cache集群。其中就会搭建redis集群来记录用户的状态信息。

优点:

服务器宕机的时候,用户的状态信息不会丢失。

数据量是轻量级的,相对于session来说能够大大节省内存开销。

处理请求的速度迅速,省去了读取数据库的过程。

缺点:

比较占内存,而且为了安全,在网站运行的时候,除了需要对数据库备份,还需要对redis进行同步备份。增大

内存开销。

对于以上介绍的集中模式,还是采用缓存机制存储用户的状态信息比较好,这种方式也是大型互联网公司一定会配置

的微服务集群。

本文参考博文:web服务器集群,感谢博主。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值