抢先一步
VMware提供培训和认证,助您快速提升技能。
了解更多致 Spring 社区和 Pivotal GemFire/Apache Geode 用户:
我经常被问到的一个问题是:“Spring Data GemFire 和 Spring Data Geode 之间有什么区别?”
现在,Spring Data Geode 已经成为Spring Data 发布列车的一部分,从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
,并期望在使用 Pivotal GemFire 或 Apache Geode 的Spring Boot应用程序中不必更改一行代码。
只需将依赖项声明从…
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 与 Geode。试着在其他任何 IMDG(特别是开源版本和企业级解决方案之间)做到这一点。
但是等等!包名和类名呢?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,它本身基于 Apache Geode 1.2.0。
Spring Data Geode 2.0(Kay)基于 Apache Geode 1.2.1。
因此,实际上,SDG^2 库是可互换的,无需更改应用程序代码。
现在Spring Data Geode正式成为Spring Data 发布列车的一部分,Spring Data Geode和Spring Data GemFire的版本号保持一致,从现在开始它们的版本号将保持相同。
提示
我们建议您使用Spring Data BOM 文件,即org.springframework.data:spring-data-releasetrain:Kay-RELEASE
(如Spring Boot在其依赖项声明和版本中所做的那样),或继承自Spring Boot启动器父 POM。或者,您可以使用Spring IO Platform,它提供了一组经过测试的、经过协调的依赖项,这些依赖项经过测试可以协同工作。
第二个目标是帮助用户通过使用云原生软件设计模式以及采用云就绪解决方案(如 Pivotal GemFire)以Spring方式进行云迁移。
早在 2003 年,我的一个同事曾经对我说:“全球思考,本地构建”。他当时是在说反话,但我刚加入公司,正在询问如何在本地(从我的 IDE)构建、运行和测试我们的企业 Java 应用程序。
当时,我们的团队正忙于尝试集中所有开发活动。部分原因是设置开发人员的本地开发环境变得多么复杂,因为我们的应用程序必须在 WebSphere 上运行,所以需要在本地安装 IBM WebSphere。
结果证明,他的话实际上是对的!
运营合同不应损害开发,尤其是在开发过程中,因为它们很可能会随着时间的推移而发生变化。CI/CD 的主要原因之一就是弥合这一差距。
在开发过程中,开发人员需要完全控制他们的环境才能满足应用程序的要求。能够使用轻量级进程构建、启动、测试、调试和分析应用程序对于敏捷至关重要。随着从最初到生产的过程,CI/CD 对于及时响应变化至关重要。但是,任何事情都不应该妨碍开发人员交付可运行的代码,而这从 IDE 内部就开始了。
从一开始,Spring 就一直专注于开发人员的生产力,为开发人员提供合适的框架和工具,以便快速、可靠且高质量地解决任何企业应用程序问题。现在,鉴于Spring Boot和Spring Cloud等技术,路径非常清晰,一切都与“云原生”有关。这不仅仅是常识开发,而是智能开发。
因此,目标 #2 的主要目的是采用相同的概念并将其应用于数据,分别使用Spring Data GemFire或Spring Data Geode用于 Pivotal GemFire 或 Apache 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。这将是一场盛况空前的活动。