应用服务器集群、可用性与无session的企业应用

来源:互联网 发布:计算机及网络管理面试 编辑:程序博客网 时间:2024/05/20 14:22
[关键字]应用服务器 集群 可用性 session 本文的主要目的是讨论企业应用实现高可用性的方案。即如何在保证性能的同时,使得应用保持 24 小时的可用性。 为实现此目的,灾难恢复和性能问题的解决是必不可少的。本文仅就程序和应用服务器两方面进行讨论,不讨论数据库等相关的问题。 

1.    灾难恢复 
所谓灾难恢复(仅对 Web 应用而言),是指在某个应用失去响应能力后(比如重启),客户端能立即透明的切换到冗余应用。这一切换对客户端来讲应该是感觉不到的。从技术上来讲,就是客户端在与服务器端进行交互的过程中,客户端在服务器端保存的状态能立即切换到新的服务器上。在 web 应用中,这些状态一般保存在 http session 里。所以所谓状态复制,一般来讲就是 http session 复制。 

目前能提供灾难的方案之一是集群。对于 Weblogic ,集群的实现方式为 Paired servers replication : 



 
在这种实现方式里, session 只在相邻的或者指定的两个 server 之间进行复制,当某一个 server down 掉后,需要 servers 前端的 load balancer 知道哪一台 server 是这个 Server1 的 paired backup server ,并将原来指向 Server1 的请求转发给这台 paired backup server 。应该说这种复制策略是相当高效的,但是对集群前端的路由要求比较高。 

2.    性能 
企业应用一般会跑在多台服务器上。就性能而言,我们的期望自然是:总体性能 = 单台服务器性能 X 服务器台数。不过从上边的说明就能看出,集群中的每一台 server 都会有一部分性能耗费在 session 复制上。耗费的性能取决于 session 的大小。如果应用中 session 保留了大量的数据,或者用户数量很多,损耗的性能也将相当可观。 

(有一种提升性能的方案是使用分布式的对象,例如 EJB ,根据对象耗费性能的不同对其所在服务器进行调整。不过这种方案早已充满了极大的争论。流行的观点认为,对于业务逻辑不是很复杂的应用,使用分布式对象只会让性能下降。因此下边将不再讨论。) 

3.    维护 
从维护的角度上看,如果我们能不重启应用就能给应用添加新的功能,或者修改已有的 bug ,那显然相当 8 错。 

分析 
根据上边的说明,我们可以初步得出几个结论: 

1、  要使用Weblogic集群所带来的灾难恢复的好处,就必须忍受同时带来的性能损失。 

2、  在使用weblogic集群的同时,我们必须拥有高性能的 Server 路由设备。 

3、  使用weblogic集群,在重新部署应用时,由于不能重新部署 (redeploy) 集群下单台 server 的应用,导致几台 server 需要同时停掉应用。当所有的 server 全都陷入灾难中,灾难恢复也就失去了意义。 


那么,如何在实现灾难恢复和高性能的同时,又能避免或者减少上边列举的损失呢? 

初步的思路可以有:  

 

1、  如果我们能忍受某一台 server down 机后客户状态丢失的后果,那么最简单的方案就是停用集群,前端 load balancer 把相同 IP 的请求转到相同的服务器。在重新部署应用时,分批重起不同 server 上的应用。 

2、  全部采用无 session 策略。将客户状态保留在客户端。这样没有Weblogic集群也就无所谓了。我们只需要一个普通的(分发器+失败检测)将请求均匀的分发到可用的服务器上。  
原创粉丝点击