领先一步
VMware 提供培训和认证,助您加速进步。
了解更多各位 Spring 社区和 Pivotal GemFire/Apache Geode 用户-
我经常被问到的一个问题是:“Spring Data GemFire 和 Spring Data Geode 有什么区别?”
现在,Spring Data Geode 已加入Spring Data Release Train,从 Kay 开始(有关更多详细信息,请参阅 官方发布公告),现在是时候在公开场合回答这个问题了。
为了帮助回答这个问题,我为 Spring Data GemFire 和 Spring Data Geode(现统称为 SDG^2)设定了两个简单目标:
首先,也是最重要的,允许用户无缝地在Spring Data Geode 和Spring Data GemFire 之间进行切换,反之亦然。
接下来,帮助用户将其基于 Spring Boot、Pivotal GemFire 或 Apache Geode 的应用程序,从本地开发环境迁移到托管环境(如 Pivotal CloudFoundry),而几乎无需更改代码。
让我们更详细地看看这些目标以及它们的含义。
第一个目标是关于选择。
它意味着用户可以从spring-data-geode切换到spring-data-gemfire,而无需更改在其Spring Boot应用程序中使用的任何代码行,该应用程序使用Pivotal GemFire或Apache Geode。
只需将依赖项声明从此处的更改为…
Maven
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-geode</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
Gradle
compile 'org.springframework.data:spring-data-geode:2.0.0.RELEASE'
更改为…
Maven
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-gemfire</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
Gradle
compile 'org.springframework.data:spring-data-gemfire:2.0.0.RELEASE'
然后,就完成了!
甚至可以从spring-data-gemfire切换回spring-data-geode,一切都能正常工作。Pivotal GemFire的整个代码库及其所有功能都包含在开源的Apache Geode版本中。
在功能和行为上,它们是相同的。唯一可辨别的区别是,您会得到一套不同的传递依赖项,即GemFire vs. Geode。尝试与其他IMDG进行比较,特别是与OS提供的产品和企业级解决方案进行比较。
但是等等!包和类名呢?Pivotal GemFire和Apache Geode中的它们不相同吗?您是否会更改包和类的名称,例如Spring Data GemFire中的org.springframework.data.gemfire.GemfireTemplate在Spring Data Geode中更改为org.springframework.data.geode.GeodeTemplate?
不;绝对不会!
举个例子,考虑下面的GemFire/Geode接口org.apache.geode.cache.GemFireCache。
在Pivotal GemFire 9.0及更高版本中,该接口是org.apache.geode.cache.GemFireCache,使用了org.apache.geode包名称空间。在Apache Geode中,相同的接口是org.apache.geode.cache.GemFireCache,其中仍然使用了“GemFire”名称。其他类和接口也是如此。
这对于互操作性以及迁移原因实际上非常重要,尤其是在GemFire/Geode的分布式层中,其中专有的消息在客户端和服务器之间以及集群中的对等成员之间发送。
Spring Data GemFire 2.0 (Kay) 基于Pivotal GemFire 9.1.1,而Pivotal GemFire 9.1.1又基于Apache Geode 1.2.0。
Spring Data Geode 2.0 (Kay) 基于Apache Geode 1.2.1。
因此,SDG^2库实际上是可互换的,无需更改应用程序代码。
现在Spring Data Geode正式成为Spring Data Release Train的一部分,Spring Data Geode和Spring Data GemFire的版本号将保持一致,并且今后将保持相同。
提示
我们建议您使用Spring Data BOM文件,即org.springframework.data:spring-data-releasetrain:Kay-RELEASE(如Spring Boot在其依赖项声明和版本中所述),或者继承Spring Boot starter parent POM。或者,您可以使用Spring IO Platform,它提供了一套经过测试且协同工作的精选和协调的依赖项。
第二个目标是帮助用户通过利用云原生软件设计模式,并以Spring的方式采用云就绪解决方案(如Pivotal GemFire),踏上通往云的旅程。
早在2003年,我的一位同事曾对我说:“全球化思维,本地化构建”。他在讽刺,但我刚刚加入公司,并询问如何从我的IDE本地构建、运行和测试我们的企业Java应用程序。
当时,我们的团队正忙于集中所有开发活动。这在一定程度上是由于设置开发人员的本地开发环境变得多么复杂,因为我们的应用程序必须在WebSphere上运行,所以需要本地安装IBM WebSphere。
嗯,结果证明,他的评论实际上是对的!
运营合同不能损害开发,尤其是在开发过程中,因为它们很可能随时间而变化。CI/CD的主要原因之一是弥合这一差距。
在开发过程中,开发人员需要对其环境拥有完全的控制权,以便满足应用程序的要求。能够使用轻量级流程构建、启动、测试、调试和分析应用程序对于敏捷至关重要。随着旅程从构思到生产的进展,CI/CD在及时响应变化方面变得至关重要。但是,没有任何东西应该妨碍开发人员交付工作代码的能力,而这始于IDE内部。
从一开始,Spring就一直致力于提高开发人员的生产力,为开发人员提供正确的框架和工具,以快速、可靠、高质量地解决任何企业应用程序问题。如今,考虑到Spring Boot和Spring Cloud等技术,路径非常清晰,一切都围绕着“云原生”。这不仅仅是常识开发,而是智能开发。
因此,目标#2的主要意图是将这些相同的概念应用于数据,为Pivotal GemFire或Apache Geode分别使用Spring Data GemFire或Spring Data Geode。通过在用户的Spring Boot应用程序中使用SDG的新基于注解的配置方法以及对Pivotal GemFire/Apache Geode的自动配置支持,用户无论是在本地使用Apache Geode,还是在全球范围内的PCF中使用PCC / SSC(由Pivotal GemFire支持),用户都将获得一致的体验,几乎无需更改代码。
这意味着更少的意外,更多的精力集中在真正重要的事情上,即为最终用户提供价值。毕竟,框架或工具的全部意义在于简化流程并处理那些虽然必要但对最终用户而言不重要的样板代码。
那么,有什么区别呢?
绝对没有!至少,在实践中应该没有明显的区别,即使在不同的上下文中也是如此。
我希望这篇帖子能帮助人们从根本上理解和欣赏这里所要达成的目标的范围,它远远超出了Spring Data GemFire和Spring Data Geode在功能、行为和表面上的差异。它还包括在最简单、最轻松的方式下,从构思到交付、再到生产,获得一致的体验。
一如既往,我们非常感谢您的反馈,无论是通过在JIRA中提交问题,提交PR,还是简单地在StackOverflow上提问。
重要
务必参加今年的SpringOne Platform。有如此多的精彩内容和新知识等待学习,特别是关于新的Reactive Spring。这将是一个具有里程碑意义的活动。