开源数据网格平台 Infinispan 访谈

阅读数:4806 2009 年 6 月 2 日

话题:JavaSOAREST云计算DevOps语言 & 开发架构

在这个虚拟访谈中,我们有幸邀请到了JBoss CacheInfinispan的项目经理 Manik Surtani(以下简称 MS)一起探讨关于 Infinispan 的方方面面。

InfoQ:请简单说说 Infinispan 到底是干什么的?

MS:Infinispan是个开源的数据网格平台。它公开了一个简单的数据结构(一个 Cache)来存储对象。虽然可以在本地模式下运行 Infinspan,但其真正的价值在于分布式,在这种模式下,Infinispan 可以将集群缓存起来并公开大容量的堆内存。这可比简单的复制强大的多,因为它会为每个结点分配固定数量的副本——服务器故障的一种恢复手段——同时还提升了可伸缩性,这是由于存储每个结点所需的工作量是与集群大小息息相关的。

InfoQ:这又为开发者带来了什么呢?

MS:Infinispan 提供了一种简单的机制来利用大容量的堆内存。如果对每个结点维护一个拷贝,假如集群当中有 100 个结点,每个结点分配 2GB 的堆内存,那么网格中的任何实例都能使用多达 100GB 的空间,这可都是内存,显然速度会非常快。同时 Infinispan 还兼容于 JTA,这样它就能很好地处理事务了。我们还有一个超级强大的异步 API,它可以保证同步的网络调用以及异步调用的并行性及可伸缩性。比方说:

Future f = cache.putAsync(k, v)

可以阻塞线程,再调用 f.get() 可以让网络调用继续进行或是忽略掉 f。更为重要的是,线程还可以做别的事情,这一点非常有用。然后再回来通过调用 f.get() 来检查该网络调用是否能继续进行。可以将其看作是 NIO 与传统的阻塞性 IO 之间的关系。

InfoQ:能否谈谈持久化呢?

MS:Infinispan 公开了一个 CacheStore 接口和几个高性能的实现,包括 JDBC CacheStores、基于文件系统的 CacheStores 以及 Amazon S3 CacheStores 等等。CacheStores 可用作“温启动(warm starts)”或是确保网格中的数据在重启后依然可用,同时在内存耗尽时还能将数据写到磁盘上。

InfoQ: 你觉得 Infinispan 与其他产品的不同之处在于哪呢?

MS:大多数的开源产品在使用上都有很多限制,要么集群数量太少,没有提供数据分发功能、要么没有提供一个完整的平台。同时 Infinispan 和一些私有产品间也存在着一些明显差异,而且据我所知,Infinispan 的异步 API 是独一无二的。

InfoQ:该项目的动机又是什么呢?

MS:到现在为止,我已经担任了几年的 JBoss Cache 项目经理,在这期间看到大家对开源数据网格平台的需求与日俱增。我最抱怨的事情就是商业产品太贵了而且还不开源,而开源的产品无论在 API、可用性、性能、稳定性以及可伸缩性方面都不尽如人意,当然也包括 JBoss Cache。因此构建 JBoss Cache 的下一代产品(提供更加广阔的应用领域)就成为我们的目标了。

InfoQ:有没有什么东西是只能用在其他的 JBoss 项目中的,换句话说,我能否将其用在其他地方呢?

MS:只要有兼容于 Java 5 的 JVM 就行了。因为是基于 LGPL 协议,因此可以用在商业及 OEM 产品中。

InfoQ:什么是数据网格?它与云的区别是什么?

MS:我觉得云的含义是指计算机资源的按需供应,包括存储、处理器、操作系统及内存等等。目前流行用虚拟化的方式来使用它。数据网格超越了服务的概念,是内存与服务器的统一体。通常将数据网格部署在云上。

InfoQ:什么情况下应该使用网格,什么情况下不应该使用?

MS:只要在数据库成为无法忍受的瓶颈时——在进行扩展时很容易出现这种情况,就来用数据网格吧:-)。数据网格的可伸缩性非常棒。此外,如果使用计算网格并行处理任务,通常也需要一个数据网格来为其提供清理状态。虽然我看到过有人用数据网格进行消息传递,但显然这么做是不合时宜的,这会给结点带来不必要的压力。如果需要分布式的工具进行消息传递,采用 JMS 吧,这是其最佳的应用场合了。

InfoQ:Infinispan 与 JSR-107 和 JBoss Cache 的关系如何?

MS:Infinispan 的 Cache 接口的开发是遵照 JSR-107 规范进行的,因此它兼容于当前的规范,它还实现了 JSR-107 所有可选的部分,包括兼容于 JTA 和集群。Infinispan 与 JBoss Cache 没啥关系——除了一些设计特性,还有一些可重用的类是从那里摘抄过来的。基本上来说 Infinispan 是个全新的事物。

InfoQ:Infinispan 需要运行在集群中么?

MS:不需要。它还是一个可运行在本地模式下的高性能缓存。我们已经实现了高质量的并发容器算法,只需很少的互斥体(mutex)如锁和同步块。Infinispan 可以在多 CPU 及多核服务器上处理高并发操作。同时逐出(eviction)算法也在高并发的环境下具有良好的表现。

InfoQ:Infinispan 的路线图中还有哪些新玩意?

MS:除了上面提到的那些以外我们还会增加不少新特性。大家可以看看 Infinispan 项目主页上的路线图以了解详细信息,这里我打算谈谈其中两个激动人心的特性。

  • 路线图中包含了一个基于 NIO 的服务器模块。它采用了两种协议:一个是兼容于 memcached 的 RESTful 协议,另一个是客户化的二进制协议。凭借第一个协议,任何现有的 memcached 客户端(在任何平台使用任何语言编写)都能与 Infinispan 协同工作,这样 Infinispan 的使用就不再局限于 Java 了。第二个协议包含了一些额外信息,比如服务器集群拓扑和一致的 hash 函数等,这样一些能够处理负载平衡与失败恢复的“智能客户端”就可以使用该协议了。我们已经为其提供了一个 Java 客户端,我希望看到其他平台上也能涌现出更多的客户端。
  • 路线图中还包含一个超级强大的 Query API。我们可以对缓存状态加索引,这样就能搜索整个网格了。通常这都是并发行为,因为每个结点都会在其本地的缓存状态上接收并执行查询,最后返回结果。恩,这有点像 Map/Reduce:-)。

InfoQ:Manik,非常感谢你抽时间接受我们的采访。大家可以访问Infinispan 的项目主页以了解更多信息。

查看英文原文:Infinispan Interview