写点什么

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

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

关注

评论

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

徐明强博士亲述:如何像微软一样建设企业文化,渡过至暗时刻

TGO鲲鹏会

微软 TGO鲲鹏会 企业文化

易宝支付 CTO 陈斌:如何做一个好的 CTO

TGO鲲鹏会

刘超的创作故事:“趣谈网络协议”专栏是怎么生产出来的?

极客时间

华为不能代表中国开源,请勿捧杀鸿蒙、方舟

小智

华为 开源 鸿蒙 方舟

聊聊宿华:利他、活在当下、做大梦

小盖

我的内容创作方法论

小智

原创 内容 创作

王天一:如何成为机器学习工程师?

极客时间

学习 极客时间

巨头过处,寸草不生

池建强

创业 互联网巨头

那个忽悠了马云的“骗子”王坚,私下里是什么样的?

小智

云计算 阿里巴巴 阿里云

我一个做内容的人,为啥要研究西贝?

小盖

极客时间

吴咏炜:人生漫长,走点弯路在所难免

极客时间

学习 极客时间 编程

2020,你怎么看?

池建强

2020 疫情 黑天鹅

人啊,永远是得自己成全自己

小盖

读书笔记

四火:聊一聊程序员学英语

极客时间

学习 极客时间

Gary的唠叨(一):我们每个人都要提高自己的综合免疫力

小盖

Gary的唠叨 今日头条

裁缝铺里开始创业,340亿美元卖身IBM,红帽创始人的传奇故事

小智

开源 红帽

领导者应该承担一切责任,这才是领导力

小盖

读书笔记 团队管理 领导力

PingCAP CEO 刘奇:如何聚集精英技术人才

TGO鲲鹏会

苏宁云商向江旭:是时候让技术成为新司机了!

TGO鲲鹏会

比尔·盖茨:事了拂衣去

池建强

微软 慈善 比尔·盖茨

世界很大,你不必抗下全部

霍太稳@极客邦科技

创业 身心健康 生涯规划

胡夕:阅读源码,逐渐成了职业进阶道路上的“必选项”

极客时间

kafka 极客时间 源码

郭忆:数据中台,是陷阱?还是金钥匙?

极客时间

极客时间 数据中台

团队提拔人,要讲究先“实至“再”名归”

霍太稳@极客邦科技

创业 团队管理 人力资源

中年程序员都在想什么?

小智

程序员 中年 人生

周爱民:捡豆吃豆的学问(下)

极客时间

Java 学习 极客时间

秦粤:说来说去,到底Serverless要解决什么问题?

极客时间

极客时间 Serverless

看似努力,或许你是在浪费生命

霍太稳@极客邦科技

学习 深度思考 读书笔记 高效工作

雷蓓蓓:“学习”到“实战”的距离,到底有多远?

极客时间

极客时间 项目管理

我看罗辑思维&得到简史

池建强

创业 产品 罗辑思维 得到

周爱民:捡豆吃豆的学问(上)

极客时间

Java 学习 极客时间

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