HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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:362847
用户头像

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

关注

评论

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

10.3微服务网关的技术架构

张荣召

学习总结--week10

张荣召

数仓搬迁:从方法到实践,带你解决数据一致性对比

华为云开发者联盟

数据仓库 数据 存储 数据校验 搬迁

10.7作业

张荣召

JDBC【4】-- SPI底层原理解析

秦怀杂货店

Java 源码 spi

架构师训练营3期第一周学习总结

简简单单

10.4领域驱动设计DDD

张荣召

Mybatis【4】-- 关于Mybatis别名定义

秦怀杂货店

Java mybatis

【Java基础】-- isAssignableFrom的用法详细解析

秦怀杂货店

Java 关键字

架构师训练营第十周学习总结

Gosling

极客大学架构师训练营

多线程源码明白了吗?不明白的话来看腾讯大牛给你画的面试重点

小Q

Java 学习 架构 面试 线程

如何应对Spark-Redis行海量数据插入、查询作业时碰到的问题

华为云开发者联盟

数据库 redis spark 开源 数据

C语言常用错误代码释义大全,让你编译运行报错不是烦恼

ShenDu_Linux

编译原理 常见错误

10.2微服务:落地实践的策略与思路

张荣召

Mybatis【2.2】-- Mybatis关于创建SqlSession源码分析的几点疑问?

秦怀杂货店

Java 数据库 mybatis

10.1微服务:服务本身的设计,维护及治理

张荣召

阿里要求其内部程序员必须精通的并发编程笔记:原理+模式+应用

Java架构追梦

阿里巴巴 编程 面试 并发 java架构

和同事交流不会kafka怎么行,API奉上,不是大神也能编

小Q

Java 学习 架构 面试

区块链技术赋能信息通信行业信用监管

CECBC

区块链 信用

架构师训练营第 10 周作业

netspecial

极客大学架构师训练营

架构师训练营第十周课后作业

Gosling

极客大学架构师训练营

让“数字鸿沟”变为“数字通途”

CECBC

数字化时代 支付产品

食堂就餐卡系统UML设计

简简单单

Linux IO模式及 select、poll、epoll详解(含部分实例源码)

linux大本营

c++ Linux 后台开发 异步IO epoll

年轻人,学好Nginx,走遍天下都不怕

程序员小灰

c++ nginx Linux 服务器 架构师

10.5软件组件设计原则

张荣召

架构师训练营-week10

睁眼看世界

极客大学架构师训练营

美团Java面试一轮游,太激烈了,问啥啥不会,我该怎么办?

比伯

Java 编程 架构 面试 计算机

区块链创新中国价值链

CECBC

区块链

Mybatis【2.3】-- Mybatis一定要使用commit才能成功修改数据么?

秦怀杂货店

Java 数据库 mybatis

Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息

秦怀杂货店

Java 数据库 mybatis

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