Apache Ignite

Apache Ignite 为分布式缓存(这是我们使用二级缓存的方式)以及“数据网格”功能提供了一组非常好的功能。

我的期望是,大多数人更喜欢使用近缓存的客户端/服务器模式。

客户端/服务器模式

我们可以在client/server模式下使用 Ignite,这意味着我们的应用程序使用Ignite 客户端与 Ignite 集群(服务器)通信。

在此模式下,Bean 缓存数据在集群中的所有 Ignite 服务器上进行分区,而不是在我们的应用程序中。我们可以选择对某些或所有 Bean 类型使用近缓存,并通过这样做来提高性能(通过拥有本地数据),但会增加我们应用程序中的内存占用(因为它现在保存了一些缓存数据)。

服务器模式

在服务器模式下,我们的应用程序启动Ignite 服务器实例,它是 Ignite 集群的正式成员。这意味着它将保存数据等。

依赖

添加对 ebean-ignite 的依赖。预构建的包位于 maven 上。您选择的 ebean-ignite 工件的版本应与您正在使用的 ebean 版本匹配。当 Ebean 启动时,ebean-ignite 会自动注册为 L2 缓存实现。

禁用二级缓存

在开发和测试期间,禁用 l2 缓存的使用通常很有用。

属性
## disable use of L2 cache (for dev / testing etc)
ebean.disableL2Cache=true

配置

Apache Ignite 使用 IgniteConfiguration 类进行配置。此类的文档可在此处获得 here。此类可以通过两种方式传递:使用 XML 配置文件(表示此 bean 的持久化版本),以及通过构建此类并将其传递到 Igniter 中以编程方式进行传递。

有关 Ignite 配置的更多信息,请从 here 开始。

XML 配置

要通过 XML 配置 Ignite 实例,您需要构建一个 XML 文件,该文件以持久化状态表示 IgniteConfiguration bean。然后,您必须将此文件放置在 Ignite 预期的位置。

根据文档,当 Ignite 启动时,它会在 {IGNITE_HOME}/config/default-config.xml 中查找配置文件。您应该能够导出 IGNITE_HOME 环境变量以指向包含配置文件的目录。

以编程方式配置

您可以通过创建 IgniteConfiguration 实例并通过以下方式设置它来以编程方式配置 Ignite:

IgniteConfiguration configuration = ...;
serverConfig.setServiceObject("igniteConfiguration", configuration);

要在启动时自动执行此操作,您可以创建一个实现 ServerConfigStartup 的类,并将其放置在您告诉 ebean 查找模型的目录中。

package models;

import io.ebean.config.ServerConfig;
import io.ebean.event.ServerConfigStartup;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

import java.util.Arrays;

public class MyServerConfigStartup implements ServerConfigStartup {

    @Override
    public void onStart(ServerConfig serverConfig) {

        IgniteConfiguration igniteCfg = new IgniteConfiguration();
        igniteCfg.setClientMode(true);

        TcpDiscoveryVmIpFinder finder = new TcpDiscoveryVmIpFinder();
        finder.setAddresses(Arrays.asList("172.30.1.1"));

        TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
        discoverySpi.setIpFinder(finder);

        igniteCfg.setDiscoverySpi(discoverySpi);
        serverConfig.putServiceObject("igniteConfiguration", igniteCfg);
    }
}

如果传递此配置实例,Ebean 将使用它来配置 Ignite 实例。否则,它将使用属性和 avaje IgniteConfigBuilder。

开始使用

  • 使用 @Cache 注解 bean
  • 添加 maven 依赖项 ebean-ignite
  • 可选择添加 ebean-ignite-config.xml
  • 对于客户端/服务器模式,您需要一个正在运行的 Ignite 服务器