BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Terracotta实战示例——集群RIFE

| 作者 Scott Delap 关注 0 他的粉丝 ,译者 肖桦 关注 1 他的粉丝 发布于 2007年6月21日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT