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

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。