【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

Java 数据网格规范:JSR-347

  • 2011-11-15
  • 本文字数:3349 字

    阅读完需:约 11 分钟

JSR-347 是数据网格规范。和 JSR-107(JCache)相比,这个JSR 的应用场景生来就有争议,容易被混淆。InfoQ 有幸采访了 Manik Surtani ,了解了他对 JSR-347 和 JSR-107 的看法,以及他对缓存、NoSQL、数据网格、Infinispan 及相关主题所持的观点。

Manik 是 JSR-347 规范的领导者,并长期参与 JBoss Cache 和 JBoss Infinispan 的开发和维护,这两个项目分别是领先、开源的 Java 缓存实现和数据网格实现。 Infinispan 数据网格项目开始于 2009 年 4 月,宣布开始之前,Manik 至少花费了四个月时间去实现数据网格的原型。Infinispan 受到了 JSR-347 的启发,Infinispan 里的很多功能特性都是 JSR-347 目前所建议的。

InfoQ:JSR-347 要达到什么目标?这些目标和 JSR-107 相比有何不同?

JSR-347 也称为针对 Java 平台的数据网格,大家建议 JSR-347 能统一 API、编程模型,分布式的预期行为,还有容错的内存键值存储。它在很多方面都和 JSR-107(针对 Java 平台的临时缓存)有所不同:

  1. 数据持久性。JSR-347 想借助它固有的分布式特性记录存储,从而提供耐久性。JSR-107 则假设存储起来的数据是临时而短暂的。
  2. 分布式。JSR-107 允许实现可以是分布的,JSR-347 则要求实现必须分布。因此,标准可以为用户提供更丰富的 API,以便用户更好地利用数据存储。比如说,只有知道实现是分布式的时候,暴露那些能控制数据在网格里存储位置的 API,异步和非阻塞的 API,还有那些最终支持相容实现的 API 才有意义。
  3. Map/Reduce 和分布式的代码执行。当数据跨网格分布的时候,把代码移到数据中执行有时候要比其他方式更有意义。JSR-347 也会为这些功能提供标准的 API。

InfoQ:已经签署协议去实现 JSR-347 的供应商有哪些?Gemfire 和 Coherence 为什么还没参与到 JSR-347 里呢?

到目前为止,专家组包括 Red Hat、Gigaspaces 和 GridGain。Oracle 和 IBM 通过法律审批后才会正式签署协议,不过他们都表示有兴趣。

Manik 接着说,他希望 Oracle 的 Coherence 团队能参与到 JSR-347 里来,Coherence 团队已经表示有兴趣了,现在正在走内部流程,然后才会正式签署协议。他还说,JSR-347 团队已经联系了 Gemfire,但 Gemfire 还没有反馈。

InfoQ:JBoss Cache 是怎样演进的?JBoss Cache 如何演变成了 Infinispan?

JBoss Cache 是我们搭建 JBoss 应用服务器集群的工具包。我们用它来实现 HTTP 和 EJB 会话的集群,还有一个具备事务特性的 Hibernate/JPA 二级缓存。

Manik 解释说,开发人员接着把 JBoss Cache 当作具备永久存储功能的数据网格来用。由于 JBoss Cache 并不是设计成数据网格的,所以才创建了 Infinispan。Infinispan 既能替代 JBoss Cache 作为集群工具包,也能提供更加强大的数据网格功能。

InfoQ:假定 JBoss 应用服务器的用户默认用 Infinispan 做会话复制,那有多少 JBoss 用户会真正使用 Infinispan 所有的数据网格功能呢?假如 JSR 还没有针对缓存或分布式缓存的标准接口,又有多少 JBoss 用户会真正用 Infinispan 去做分布式缓存或数据网格呢?

这很难说。JBoss 应用服务器和 Infinispan 都是开源项目,我们已经明确区分了社区所作的事情,还有他们怎样和 Infinispan 交互。如果用户论坛和 IRC 上的问题能作为依据,我看大部分人的问题是如何在 JBoss 应用服务上部署的 Web 应用或 EJB 里直接使用 Infinispan 的 API。不过提问的也只有这些人。

InfoQ:什么能定义数据网格解决方案?是查询、事务、从缓存读、写入缓存、数据分片、数据复制还是 Map/Reduce 等其他内容呢?数据网格必须支持哪些功能?

我的回答自然有些主观,但我认为数据网格需要提供事务、读取、写入、某些形式的分片或分区,还有监听器。查询和 Map/Reduce 是更高级的功能,不过大家很快就会期望数据网格能具备这两个功能,所以我们觉得它们也该添加到功能列表里。

InfoQ:你怎么定义 Infinispan 的 Map/Reduce?为什么它对 Java 开发人员来说很重要?

在处理跨大量服务器的分布式数据时,Map/Reduce 本身就是个很重要的概念,因为它有更高的 CPU 和内核利用率,同时能减少网络流量。

Infinispan 的 Map/Reduce 在概念上和 Google 最初的概念非常接近,但在实现上,我们遵循流畅 API、人类易读和直观接口的原则,还有现代 Java API 设计的通用最佳实践。因此,和 Hadoop 等其他 Java Map/Reduce 实现不同,我们觉得 Infinispan 的实现要更为直观、对开发人员更加友好。

InfoQ:Infinispan 会成为 JSR-347 的参考实现吗?

不会。参考实现需要 Apache 的许可,而 Infinispan 则使用了 LGPL 许可。

InfoQ:我发现 Infinispan 支持 Memcached 的文本 Wire 协议,这是为什么呢?

我们支持 Memcached 的 Wire 协议,最初是想让非 Java 平台接受我们。Memcached 有非常多的客户端库,几乎针对所有的平台。支持 Memcached 的 Wire 协议就意味着差不多所有系统都能使用 Infinispan。

随后我们设计并实现了 Hot Rod,用它来替换 Memcached 的 Wire 协议,编写完这个“可参考的”Java 客户端后,我们就发现社区为 Python 和 Ruby 构建了 Hot Rod 客户端。

Manik 接着解释说,Memcached 的协议对数据网格解决方案来说太过简单,因为它使用请求 / 响应方式,完全是客户端 / 服务器模式。相反,Hot Rod 允许服务器连接客户端,把后端拓扑结构的变化推送给客户端,这对弹性来说至关重要,可以在运行时增加新的数据网格节点。Hot Rod 以后的版本会添加事件处理,Manik 说这会开辟一个充满机遇的世界。尽管 Memcached 的 Wire 协议针对分布式缓存,但 Hot Rod 似乎能突飞猛进,成为事实上的数据网格标准Wire 协议

InfoQ:和 Oracle Coherence、Enterprise EhCache、VMWare Gemfire 的特性相比,JSR-347 或 Infinispan 的功能怎么样?

刚刚提及的产品已经支持了为 JSR-347 规划的大部分功能。主要区别在于特定 API 本身。当然这并不全面,有些产品可能不具备某些功能,比如 Map/Reduce,但他们也许有能添加缺失功能的组件。

InfoQ:JSR-347 是个 NoSQL 解决方案规范么?相应的,Infinispan 是不是 NoSQL 解决方案?无论是或与否,原因又是什么呢?要成为一个 NoSQL 规范,JSR-347 还缺少哪些功能?

JSR-347 是个标准。它不是个 NoSQL 标准,只是个数据网格标准。Infinispan 会实现 JSR-347,所以它只是个数据网格,不过 Infinispan 也在不断发展,会添加更多 NoSQL 的特性。照目前的情况看,NoSQL 和数据网格之间的差距很小;Infinispan 只是进一步去缩小这种差距。

Manik 接着解释说,JSR-347 是个成熟的 NoSQL 规范,而且不同寻常的是,它是关注 Java 的先行者。

最大的区别在于平台独立性。JSR-347 仍然是个 Java 规范,而很多 NoSQL 数据库则超越了 Java 平台。

InfoQ:查询是 JSR-347 的一部分吗?

这需要专家组去决定。

InfoQ:你是怎样界定数据网格、NoSQL、对象缓存的?

我觉得对象缓存是把对象暂时存储在内存里,检索或计算会很费劲。数据网格把这种做法深入了一步,借助其有弹性、分布式的特性,数据网格提供了一定程度的耐久性。NoSQL 则采用了另一种做法,NoSQL 通常用磁盘存储作为主要的存储引擎,但提供了弹性和可伸缩性,至少在分布式 NoSQL 引擎的情况下是这样的。

InfoQ:对 NoSQL 实现来说,最重要的特性是什么?

在我看来,最重要的特性是可伸缩的弹性。否则的话,你还不如使用 RDBMS,毕竟你早熟悉了它的安装和使用。

InfoQ:从设计来说,Inifinispan 和竞争对手(Coherence、Enterprise EhCache、GemFire)有什么区别?

我不知道专利产品内部是如何设计的。

InfoQ:能描述下 Inifinispan 的设计理念么?

可插拔和可扩展性是关键。我们期望人们能用 Infinispan 去做任何事情,而不仅仅成为按我们描述的使用模式去操作的最终用户。用户在某些情况下可以动态添加拦截器、命令和行为。作为开源软件,代码和设计都是透明的,这样人们就很容易去扩展 Infinispan。

Manik 接着介绍了学习 Infinispan 和 JSR-347 的一些方式。Infinispan 的下一个版本 5.1.0 最近会发布测试版本。要看 JSR-347 是如何进展的, JSR-347 的 Wiki 是个好去处。还有一些关于 Inifinispan 和 CDI 集成的视频,Inifinispan 和 CDI 的集成是规范最先做的一部分。他解释说,你可以使用 Infinispan 的 Maven 原型快速开始一个项目,并看看 JSR-347 是什么样子。

查看英文原文: Java Data Grid Specification: JSR-347

2011-11-15 09:362740
用户头像

发布了 151 篇内容, 共 59.8 次阅读, 收获喜欢 18 次。

关注

评论

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

spring系列之IOC容器实例化过程五

Disaster

spring ioc

Spring系列之AOP工作过程详解一

Disaster

spring

微服务系列之单体架构

Disaster

微服务

微服务之服务容错

Disaster

微服务

真心牛x,阿里出品2023最新版Spring全家桶进阶笔记流出,堪称Java程序员跳槽神器

程序员小毕

spring 程序员 springboot SpringCloud java面试

微服务之异步消息通信

Disaster

微服务

Spring系列之IOC容器的实例化过程一

Disaster

spring ioc

打造繁荣社区:Solaris 与 Web3 合作的力量

鳄鱼视界

Spring系列之IOC容器实例化过程七

Disaster

spring ioc

Spring系列之IOC容器初始化八

Disaster

spring ioc

市场规模超百亿 低代码与传统IT开发有何不同

力软低代码开发平台

spring系列之IOC容器实例化过程三

Disaster

spring ioc

Spring系列之IOC容器实例化过程六

Disaster

spring ioc

惊!掌握通义千问的关键,从这些必知内容开始!

加入高科技仿生人

人工智能 低代码 ChatGPT 数字转型 通义千问

微服务系列之初探“微服务架构”

Disaster

微服务

微服务系列之微服务架构

Disaster

微服务

微服务之流量控制

Disaster

微服务

spring系列之IOC容器结构

Disaster

spring ioc

spring系列之IOC容器实例化过程四

Disaster

spring ioc

如何将数据从旧电脑传输到新电脑,哪种文件传输方式更好

镭速

打造繁荣社区:Solaris 与 Web3 合作的力量

股市老人

财务共享服务中心建设流程是什么样的?

用友BIP

财务共享

艾媒金榜|2023年中国信创数据库企业TOP15

亚信AntDB数据库

数据库 AntDB AntDB数据库

23种设计模式详解

Disaster

设计模式

微服务之事务处理

Disaster

微服务

Spring系列之IOC容器的初始化过程九

Disaster

spring ioc

Spring系列之AOP工作过程详解二

Disaster

spring

软件测试/测试开发丨Selenium环境安装与使用

测试人

程序员 软件测试 自动化测试 测试开发 selenium

微服务系列之远程服务调用

Disaster

微服务

spring系列之IOC容器实例化过程二

Disaster

spring ioc

Spring系列之IOC容器初始化过程十

Disaster

spring ioc

Java数据网格规范:JSR-347_Java_Rick Hightower_InfoQ精选文章