高效、高可用的Web Session解决方案

在多用户、高并发、高吞吐量的Web应用中,用户经常通过配置多个Web应用服务器并发处理大量用户的请求,实现负载均衡、灾难回复,提高可用性和可扩展性。

在多节点的环境中,如何实现Web Session数据的高速共享、复制、迁移是架构成功与否的关键。

由于大多数Web应用服务器都采用Java序列化和数据广播方式实现session数据的共享,导致任何一个节点对任何session数据进行修改,都造成大量的内存、CPU以及网络带宽的消耗。这种消耗随着应用服务器节点的增加而成级数级增长。当节点数目超过4个以上的时候,经常由于session复制导致的消耗过高,使得整个集群的吞吐量反而开始下降。由于普通session复制机制性能和可用性的缺陷,很多web开发人员不得不通过数据保存和共享session相关的数据,因此又增加了对数据库的压力,形成新的性能瓶颈。

Terracotta的web session方案利用Terracotta集群实现sessino数据的共享。不使用广播机制,也不对整个session数据做序列化,因此session数据复制的消耗极小,允许用户横向扩展应用服务器的数量儿不必担心系统消耗形成的瓶颈。

下图是基于Terracotta的Web Session集群方案的体系架构图:

Web Session数据通过Terracotta服务器实现了数据的持久化、节点间的复制以及灾难回复等。

基于Terracotta的解决方案的特点及优势包括:

  • 简单易用

    • 完全支持Java Web Session的标准实现,用户对HttpServletSession接口的访问方式不变
    • Terracotta通过对不同应用服务器进行配置,将session数据集群化
  • 高效、可靠
    • 近乎内存读写的访问速度
    • session数据自动持久化
    • 性能可线性扩展
  • 强大、灵活
    • 广泛支持各种应用服务器:WebLogic, WebSphere, Tomcat, JBoss, Jetty, Geronimo等等
    • 自动session数据迁移
    • 适用于各种大小的session数据
    • 集群范围内数据可视以及强大的管理和监控功能

下图显示了基于Terracotta的Session集群解决方案与Tomcat内置解决方案的性能数据对比:

从图中可见,Tomcat内置的方案在增加节点数,对整个集群的吞吐量帮助不大。而基于Terracotta的方案可以实现吞吐量随着节点数的增加而线性增长。

Terracotta的Web Session解决方案建议用户使用session粘性负载均衡机制,让相同用户的请求尽量由相同的web服务器处理,这样可以最大限度地做到数据本地化分片,实现最佳的整体性能。同时在灾难发生的时候,还能实现web请求和session的自动迁移。

高效分布式Java任务调度平台 - Quartz

Quartz是Java领域最著名的开源Java任务调度工具。它允许用户通过类似Unix上crontab类似的任务计划语法定义对Java任务的调度计划。

Terracotta于2009年末并购了Quartz项目,并将它与Terracotta核心平台进行紧密整合,为用户提供一个可以从小量任务、单机环境到大量任务、分布式环境平滑过度的全面的Java任务调度平台。

与其他Terracotta解决方案一样,用户可以从单机环境开始开发实施,随着应用需求和环境的升级扩展,只需要修改配置文件,就可以逐步扩展到多机集群环境。

下图是Quartz与Terracotta整合后的系统架构:

Terracotta Quartz解决方案的特点包括:

  • 简单易用
  • 功能特点
    • 任务调度
    • 任务执行
    • 任务持久化
    • 任务数据可视化监控管理
  • 强大、灵活
    • 任务数据持久化选项:数据库、Terrcotta
    • 支持任务监听和插件扩展

部署、监控、维护

服务器与客户端的部署

Terracotta的部署非常简单。

Terracotta服务器是独立运行的Java程序。用户只需要指定JDK的安装目录,设置配置文件,然后就可以在相应的硬件服务器或者虚拟机中启动Terracotta服务器的各个实例了。Teracotta服务器目前要求使用Sun JDK 1.5或1.6。

对于客户端来说,如果使用快捷模式(Express Mode),除了拷贝相应的jar文件,进行应用相关的配置意外,不需要做其它特殊的操作。

使用快捷模式功能的详细手册可以参考:

http://www.terracotta.org/documentation/ga/product-documentation

使用DSO模式,或者订制模式(Customized Mode)需要为客户端配置相应的tc-config.xml,指定要共享的类,共享实例以及使用的插件(TIM)等等,然后用dso-java.sh(bat)或者ds-env.sh(bat)启动。

DSO模式的运行手册可以参考:

http://www.terracotta.org/documentation/ga/product-documentation-19.html#403067640_pgfId-1006124

监控、维护

Terracotta提供了丰富的监控及维护功能。

首先,Terracotta提供JMX API,允许用户使用该工业标准访问服务器集群以及客户端的信息,查看集群各种配置信息、监控软硬件指标、获取统计数据、动态修改集群属性甚至进行关机、备份等管理操作。用户可以选择将JMX接口嵌入到其企业使用的监控平台中,也可以自行开发基于JMX的Java程序,以满足其特定的监控和管理需求。

目前市场上大部分开源或者商业系统监控平台,比如Nagios、HP OpenView、CA Unicenter等等,都直接支持JMX标准。

Terracotta利用JMX API提供了一系列内置的工具,方便用户对Terracotta集群进行监控、维护。

比如:

  • Developer Console

专门为开发人员提供的集群监控、调试、管理工具。允许用户查看集群的拓扑信息、查看集群中共享的数据、获取统计信息、查看CPU、Heap使用情况、获取线程堆栈试视图(thread dump)、收集调试信息等等。对于Ehcache和Hibernate用户,还可以监控缓存的使用情况,调整缓存配置等等。

Developer Console的相信说明可以参考:

http://www.terracotta.org/documentation/ga/product-documentation-21.html#404563920_pgfId-1167627

  • Operation Center

为集群管理人员提供专用的管理工具。可以用来监控各个服务器以及客户端的CPU、Heap使用情况、备份共享数据、关闭服务器或者客户端程序等等。

Operation Center详细信息可以参考:

http://www.terracotta.org/confluence/display/docs/Terracotta%20Operations%20Center

  • 命令行工具

Terracotta提供一系列命令行脚本,用于获取集群状态、采集统计信息、终止服务器等操作。具体说明请参考:

http://www.terracotta.org/documentation/ga/product-documentation-22.html#403159784_pgfId-1080523

用户可以根据自身开发、部署、测试、维护的需要选择不同的工具,解决不同的问题。

下面是Terracotta Developer Console的几个截图。

共享对象浏览器

实时性能数据表盘

集群拓扑信息

两个有关Terracotta技术的在线会议预告

Terracotta核心技术介绍以及如何搭建高可用的Web应用

http://terracottawebinar201006.eventbrite.com/

分布式缓存Ehcache以及如何提高应用系统性能

http://terracottawebinar201007.eventbrite.com/

Terracotta2的更多相关文章

  1. Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package

    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package 1. 统计的lib jar 列表1 2. Code3 3. 常用包名按找字母排序(2000个)4 ...

  2. 定制bash命令提示符

    使用shell时经常要知道当前路径,如果将它写在提示符里很节省很多敲pwd的动作,方法是在启动文件(.bash_profile, .bashrc)里加上: export PS1="[\u@\ ...

随机推荐

  1. 基于Servlet+smartUpload的文件上传

    文件上传在web应用中是非常常见的,现在我就介绍下基于servlet的文件上传,基于Struts2的文件上传可以看: 页面端代码: <%@ page language="java&qu ...

  2. 微信支付v3开发(5) 扫码并输入金额支付

    关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付 ...

  3. DataPicker以及TimePicker显示时间和日期(屏幕上显示)

    public class MainActivity extends Activity { private DatePicker date_picker;private TimePicker time_ ...

  4. 【进度总结】第一个web应用程序(未完成)

    web程序快速导航 使用Eclipse for Java EE Web Development,并配置Tomcat,这部分内容在众多教程中都描述的十分详细.我直接从代码部分开始记录流程: 这张图是We ...

  5. socket使用非阻塞connect

    在使用tcp的connect调用时,默认是使用阻塞方式,当服务器当前不可用时,connect会等待(内部在重试?)直到超时时间到达,而这个超时时间是系统内核规定的,不能使用setSocketOpt来设 ...

  6. vue+element ui项目总结点(四)零散细节概念巩固如vue父组件调用子组件的方法、拷贝数据、数组置空问题 等

    vue config下面的index.js配置host: '0.0.0.0',共享ip (假设你的电脑启动了这个服务我电脑一样可以启动)-------------------------------- ...

  7. 如何让Sublime Text编辑器支持新的ABAP关键字

    ABAP 7.40推出了许多新的关键字 - keyword,您的Sublime Text可能无法针对这些新关键字实现期望的语法高亮显示(syntax highlight)或者自动完成(auto com ...

  8. iOS打包上传app store各种问题解决总结

    问题1 this action could not be completed. try again 问题2 there was an error sending data to the iTunes ...

  9. POJ2402 Palindrome Numbers第K个回文数——找规律

    问题 给一个数k,给出第k个回文数  链接 题解 打表找规律,详见https://www.cnblogs.com/lfri/p/10459982.html,差别仅在于这里从1数起. AC代码 #inc ...

  10. Open Cascade:AIS_InteractiveContext如何调用函数选择AIS对象

    AIS_InteractiveContext如何调用函数选择AIS对象 myAISContext->MoveTo(point.x, point.y, myView); myAISContext- ...