写点什么

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

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

关注

评论

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

tiktok云手机有用吗?用哪个好?

Ogcloud

云服务 TikTok 手机云服务 云服务商

新规施行推动数据资产化迈出关键一步

用友BIP

数据资产

shopee虾皮商品列表数据接口(Shopee.item_search)丨shopee虾皮API接口

tbapi

Shopee shopee API shopee商品列表数据接口 虾皮商品列表数据接口 虾皮API接口

SD-WAN搭建企业多云专用网络

Ogcloud

网络 SD-WAN 组网 组网网络

音视频小程序在教育行业,短期爆发or未来趋势?

FinFish

在线教育 小程序容器 小程序技术 音视频小程序

跨国公司为什么要部署SD-WAN

Ogcloud

网络 SD-WAN 组网 组网网络

跨周期,创未来!华秋喜获中国产业互联网十周年-杰出企业

华秋电子

产业互联网 产业链 产业生态

简单聊聊大力发展国产堡垒机的几个原因

行云管家

网络安全 信创 堡垒机 国产化

制造业工厂仓库管理为什么要扫码出入库?

万界星空科技

wms WMS仓库管理 万界星空科技 仓库管理系统 扫码出入库管理

重磅国赛开赛!中国大学生服务外包创新创业大赛飞桨双赛道开放报名

飞桨PaddlePaddle

飞桨 高校 国赛 文心一言 文心大模型

视频直播技术干货(十一):超低延时视频直播技术的演进之路

JackJiang

网络编程 即时通讯 IM

ICT行业“样品”相关业务挑战及解决方案介绍

用友BIP

ICT行业供应链

大模型训练中断,断点续传助力快速恢复

百度开发者中心

人工智能 深度学习 大模型

如何下载和安装 Eclipse?

小魏写代码

Mac电脑自动化任务软件:Hitek Software Automize Enterprise激活最新版

胖墩儿不胖y

Mac软件 任务管理器 自动化任务管理工具

数据高速公路:详解数仓集群通信技术

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 华为云GaussDB(DWS)

一文读懂$mash 通证的 “Fair Launch” 规则,将公平发挥极致

小哈区块

专业Visio绘图文件阅读器:VSD Viewer 激活最新版

胖墩儿不胖y

Mac软件 文件查看器

一文读懂$mash 通证的 “Fair Launch” 规则,将公平发挥极致

西柚子

用友签约新奥集团,共建智慧资产管理平台

用友BIP

资产管理

百度搜索&金融:构建高时效、高可用的分布式数据传输系统

百度Geek说

分布式 计算机网络 金融 数据传输 企业号 1 月 PK 榜

叮咚!融云 2023 年度「消息」已送达

融云 RongCloud

技术 即时通讯 IM 融云 通讯

Spring 七种事务传播性介绍

vivo互联网技术

spring 事务的传播性 事务的提交和回滚

如何对APP进行安全加固

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