InfoQ

新闻

Terracotta实战示例——集群RIFE

作者 Scott Delap译者 肖桦 发布于 2007年6月20日 上午2时0分

社区
Java
主题
Web框架,
集群与缓存
标签
RIFE,
Terracotta

Terracotta的Jonas Bonér最近详述了他和Geert Bevin(最近被Terracotta招至旗下)如何群集RIFE Web应用框架。这篇文章提供了RIFE Continuations实现的颇有价值的深入见解和集群RIFE这样一个不凡应用框架遇到的挑战。

Bonér从介绍RIFE如何实现Continuations开始:

RIFE的Continuations的目标是以通用库的形式,用纯Java形式支持continuations[...]它使用字节码方法(基于ASM)来生成代码重定义Class,以最高效的方式支持Continuations的实现。它不依赖于Java的序列化(Serialization)机制,而是把对象分拆成原始类型并把数据存储于执行栈中(类似Terracotta的方法)[...]Continuations以树的结构连接在一起,可以任意访问不同的执行步骤。这意味着你可以任意回退或前进,很灵巧的解决了浏览器回退按钮的问题——如果在Web应用环境下使用的话。

在内部,RIFE将Continuations存储于普通的java.util.HashMap中。

群集RIFE的第一个障碍是线程安全地访问这个HashMap。RIFE初始的实现,基于性能的考虑,只设计使用一条线程来访问Map。在群集环境下,会由多个JVM并发访问。

第二个挑战是关于Class Loader的,就如应用服务器和Web框架的常见情形,RIFE实现了自己的Class Loader来实现一系列特征,就像Java的系统Class Loader一样,这些Class Loader对于Terracotta不是现成可见的:

Terracotta需要可以唯一的定义一个Class Loader的原因是它需要一个方法,在任意时刻任意节点,获得已载入了特定Class的Class Loader实体,以在群集范围内维护对象标识。

Bonér和Bevin面对的最大挑战是如何群集RIFE模板引擎的动态。RIFE可能在运行时动态的按需生成类。在节点崩溃时,在节点上生成的类就需要复制到接手处理请求的节点上。解决方案是构造一个HashMap,实现群集范围的字节码仓库,RIFE的TemplateClassloader被修改为指向这个仓库。

查看英文原文:A Real World Example of Using Terracotta: Clustering RIFE

没有回复

回复

独家内容

专访开源项目Amoeba架构师陈思儒

DBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。

使用JSF、Ajax和Seam开发Portlets(2/3)

作为三期系列文章的第二部分,本文延续了上一期内容,介绍了RichFaces,包括如何把RichFaces集成到之前提到的示例应用中、如何部署RichFaces porlet和RichFaces的多种特性和功能。

Jeff Barr谈论Amazon Web服务

Amazon Web Services(AWS)的传道者Jeff Barr讨论了SimpleDB、S3、EC2、SQS、云计算、Amazon的不同服务如何与应用交互、AWS的起源、SimpleDB和微软SQL Server Data Services、AWS cloud的全球化、三月份的AWS停机。

用Erlang实现领域特定语言

Erlang的并发模型很有名,它的健壮性也很有名。但其他方面呢?在这篇文章里,Dennis Byrne演示了如何用Erlang建立内部DSL。

基于Rails的企业级应用剖析

本视频主要以FreeWheel为例,对一个基于Rails的企业级应用进行了剖析。其中包括:FreeWheel的架构、部署、数据库的问题、REST API、敏捷开发过程、如何去写测试以及持续集成等等。

JavaFX技术预览

JavaFX显示了Sun的Java系列产品市场方向的一个重大转变。随着1.0版的即将发布,InfoQ以JavaFX预览版为参考,与Sun高级工程师Joshua Marinacci探讨了即将发布的1.0正式版。

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。