wood-in-fire.

背景

许多企业应用程序分布在多个服务器上并部署,并且被许多接口应用程序访问。在本系列中,我们将介绍大型应用程序中使用 Apache Ignite 的各种场景。

我们将在本文中实现以下方案:

  • “分区”缓存:
    • 内存中缓存网格,具有三个缓存节点和一个客户端。服务器将负责存储对象,客户端将负责访问对象。此客户端将放置并从服务器获取数据。
    • 使用命令行监视工具查看缓存的统计信息。

在后续文章中,我们将通过其他复杂性来增强此方案,例如:

  • 其他缓存:分区缓存,包含产品自定义对象和其他缓存和计算。
  • 具有基础数据库的网格缓存:此部分将提供有关缓存数据如何存储在基础数据库中的详细信息。数据库可以是 MYSQL 或任何其他数据库。Apache Ignite也可以充当分布式数据库,并且比其他数据库功能更强大。但是,大型应用程序可能具有现有数据库,并且可能很难将现有数据库替换为 Ignite。因此,让我们考虑此方案。
  • 安全性:在本文中,我们将添加一些安全性,以确保只有某些客户端可以访问数据。
  • 连续查询:在本部分中,我们将添加连续查询,以确保选定的客户端可以访问数据并在需要时获取事件。

您可能还喜欢:开始与Apache点火(第1部分)。

网格缓存

Apache Ignite 也是一个数据缓存网格。它可以与数千个节点水平缩放。内存中缓存中的数据作为键值对存储。它是JCache (JSR 107) 规范的实现。除了 JCache 规范外,它还支持事务并确保数据一致。

分区缓存

缓存可以分区、复制或本地。在本部分中,我们将遍过分区缓存。分区缓存,顾名思义,在多个节点之间分区。与复制缓存相比,分区缓存更高效,因为缓存中添加的对象不必在所有缓存节点中复制,只需添加到备份缓存节点即可。

Partitioned Cache

分区缓存

如上图所示,产品缓存中有三个缓存节点,这是一个分区缓存,具有单个备份副本。以下是产品缓存的 XML 配置。

<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="ProductsCache" />
<property name="cacheMode" value="PARTITIONED"/>
<property name="backups" value="1" />
<property name="atomicityMode" value="ATOMIC" />
<property name="writeSynchronizationMode" value="FULL_SYNC"/> 
</bean>

预置

我们需要安装以下软件:

  • JDK 13: javac 13

1.

  • 阿帕奇点火: 2.7.6.
  • Eclipse。
  • 启动服务器

    可以通过以下命令启动缓存服务器。我在服务器配置-xml 文件中创建了服务器配置,并在F:_安装_apache-ignite-2.7.6-bin 目录中安装了 Ignite。

    F:\Installed\apache-ignite-2.7.6-bin\bin>ignite.bat F:\Installed\apache-ignite-2.7.6-bin\config\learning-config.xml

    我们想要创建三个缓存节点。因此,我们需要执行上述命令三次。它将启动三个服务器。您将能够在每个命令提示符上看到以下输出。

    Cache Node 1

    缓存节点 1

    启动所有其他缓存服务器节点时,您将能够在节点 1 的控制台上看到以下输出。输出清楚地显示有三个服务器,并且没有与此缓存节点关联的客户端。此外,它还将显示分配给此每个节点的总大小。

    Cluster Formation

    集群形成

    Visor = 缓存监控工具

    Visor 工具是一个命令行工具,用于监视 Ignite 节点。它可用于获取有关缓存节点、缓存等的各种统计信息。除此之外,它还可用于清除缓存、启动新节点等。可以通过执行以下命令来启动此工具。

    F:\Installed\apache-ignite-2.7.6-bin\bin>ignitevisorcmd.bat

    Visor Command line Tool

    Visor 命令行工具

    如您所见,命令行工具未连接到任何网格。它可以通过执行打开命令和配置文件连接到任何网格。这可以在交互模式下使用。

    Visor Command line Interacctive Tool

    Visor 命令交互工具

    连接后,我们可以执行 cache 该命令以查看缓存的状态。如您所见,此网格中有三个节点,到目前为止,此网格中没有存储任何对象。

    Cache Status

    缓存状态

    缓存客户端

    在我们的方案中,缓存客户端是非持久性节点。此客户端将负责存储对象并从缓存网格获取对象。在我们的场景中,对象是一个字符串,但它可以是任何类型的对象。

    以下是客户端代码:

    public class CacheClient {
    
    public static String cacheName = "ProductsCache";
    
    /**
     * @param args
     */
    public static void main(String[] args) {
    
    System

    println( “正在启动缓存客户端”);

    /*
    • 设置客户端的模式。这也可以通过创建 XML 配置来实现。
    *
    • 在这种情况下,我的服务器和客户端在同一台计算机上运行。因此
    * 我没有提供网络发现相关配置。
    • 在大多数情况下,客户端节点将在不同的计算机上运行。在这种情况下,我们需要
    • 传递网络配置,如静态 IP 地址或多播 IP 地址。
    * 一般来说,我更喜欢使用多播IP地址,以确保
    • 客户端和服务器能够连接,并且没有依赖于实际的 IP 地址。
    *
    */
    点火.setClient模式(真实);
    点火点火 = 点火.启动();

    System.out.println(”客户端节点已启动”);

    缓存名称
    点火缓存<字符串,字符串>缓存= 点火.cache(缓存客户端.缓存名称);

    System.out.println(”缓存的实例”= 缓存客户端.cacheName );

    将密钥存储在缓存中(值将最终出现在不同的缓存节点上)。
    (it i = 0;i < 100;i])
    缓存.put(字符串值of(i),整数.toString(i);”

    System.out.println(”缓存中添加的对象”);
    (it i = 0;i < 100;i])
    System.out.println(”获取[键]” = i = “,val=” = 缓存.get(String.valueof(i)= “+”);

    }
    }

    启动客户端节点后,第一个节点将在命令提示符上具有以下输出。如您所见,有一个客户端和三个服务器。

    Client Joining Servers

    客户端加入服务器

    执行命令后,将在遮阳板监视工具上输出 cache 以下内容。这表明缓存中有 100 个条目。

    Cache Status After Puts

    放置后的缓存状态

    cache -r -a遮阳板命令将提供与变量关联的缓存 c0 的详细信息。在这种情况下,它是 ProductCache 。如您所见,有三个节点,每个节点都有一个主节点和备份副本。我们在缓存中插入了 100 个对象,每个缓存大约有 33 个主备份副本和 33 个备份副本。

    Image title

    进一步阅读

    Comments are closed.