QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Terracotta 实战示例——集群 RIFE

  • 2007-06-20
  • 本文字数:822 字

    阅读完需:约 3 分钟

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

2007-06-20 02:002815

评论

发布
暂无评论
发现更多内容

Kubernetes集群统一日志管理方案(Elasticsearch+Filebeat+Kibana+Metricbeat)搭建教程

山河已无恙

Kubernetes 2月月更

《MySQL入门很轻松》第4章:数据表的创建修改删除

乌龟哥哥

数据库 2月月更

MyBatis3源码解析(5)查询结果处理

Java mybatis

MyBatis3源码解析(6)TypeHandler使用

Java mybatis

MyBatis Demo 编写(2)结果映射转换处理

Java mybatis

Mybatis3 源码解析系列

Java mybatis

MyBatis3源码解析(2)数据库连接

Java mybatis

MyBatis3源码解析(4)参数解析

Java mybatis

设计模式【15】--从审批流中学习责任链模式

秦怀杂货店

Java 设计模式

java培训:JVM 锁的优化和逃逸分析

@零度

JVM JAVA开发

创新推出 | Serverless 调试大杀器:端云联调

阿里巴巴云原生

阿里云 Serverless 云原生 端云联调

与Karmada一起航行:海量节点的多集群管理

华为云原生团队

容器 云原生 k8s k8s多集群管理 多云管理

启发式智能任务调度的探索

鲸品堂

算法 函数 任务调度

国内首款! 亚信科技数据库AntDB亮相中国信通院性能测试工具发布会

亚信AntDB数据库

如何选择充血模型和贫血模型

蜜糖的代码注释

DDD 领域建模 2月月更

开源demo| 你画我猜——让你的生活更有趣

anyRTC开发者

音视频 互动白板 开源demo 你画我猜 社交娱乐

如何做“健康码”的性能压测

阿里巴巴云原生

云原生 压测 健康码

Apache RocketMQ + Hudi 快速构建 Lakehouse

阿里巴巴云原生

阿里云 开源 云原生 消息队列

云原生年度技术盘点出炉!乘风破浪正当时

阿里巴巴云原生

阿里云 云原生 年度盘点

MyBatis3源码解析(8)MyBatis与Spring的结合

Java mybatis

【高并发】深入解析Callable接口

冰河

Java 并发编程 多线程 高并发 异步编程

MyBatis3源码解析(3)查询语句执行

Java mybatis

架构训练营模块二作业

苍狼

作业 模块二 架构训练营5期

人人都是 Serverless 架构师 | 弹幕应用开发实战

阿里巴巴云原生

阿里云 Serverless 架构 云原生

服务网格 ASM 年终总结:最终用户如何使用服务网格?

阿里巴巴云原生

阿里云 云原生 服务网格 容器服务

HTTP缓存协议实战

vivo互联网技术

缓存 浏览器 服务器 HTTP

年度盘点|2021 年阿里云可观测实践回顾

阿里巴巴云原生

阿里云 云原生 可观测 Arms Arms 告警运维中心

MyBatis3源码解析(7)TypeHandler注册与获取

Java mybatis

MyBatis Demo 编写(1)基础功能搭建

Java mybatis

Linux系统编程-进程间通信(共享内存)

DS小龙哥

Linux 共享内存 2月月更

web前端培训: Vue3面试考点分享

@零度

前端开发 Vue3

Terracotta实战示例——集群RIFE_Java_Scott Delap_InfoQ精选文章