Ehcache 集群改造-----增加手动发现方式自动增加减机器机制
发布日期:2021-05-06 19:33:00 浏览次数:22 分类:精选文章

本文共 4068 字,大约阅读时间需要 13 分钟。

Ehcache RMI手动发现机制的优化与实现

在前一篇文章中,我们提到了Ehcache基于RMI手动发现集群的搭建方法。然而,传统的手动发现机制存在诸多限制,如无法动态增加机器、操作不够便捷等。因此,我们对Ehcache的机制进行了优化,引入了轮询功能,类似心跳机制,以实现对当前生效链接的监测和管理。

优化思路

Ehcache的手动发现机制在项目启动时,会读取XML配置文件的值,并将其存储在一个MAP中。具体操作如下:

  • 读取配置文件中的RMI URL值,并存储在一个MAP中,键为URL,值为时间戳。
  • 解析每个URL,提取IP地址和端口信息,存储在另一个MAP中,键为相同的索引值,值为SocketParam对象(包含IP和端口信息)。
  • 这种双重MAP的设计确保了在URL解析和存储过程中,能够在一次操作中完成IP和端口信息的提取和处理,避免了重复操作,提高了效率。

    实现细节

    我们基于Ehcache提供的RMICacheManagerPeerProvider类,通过其注册和反注册方法来实现动态管理。具体实现如下:

  • RMI URL管理:通过读取properties文件中的RMI URL值,动态注册或反注册Peer Provider。
  • Socket连接测试:在轮询过程中,通过Java.net.Socket测试目标服务器的连接状态。如果连接成功,则注册Peer Provider;如果连接失败,则反注册Peer Provider。
  • 心跳机制:通过不断测试连接状态,确保集群中的每个节点都能及时更新其状态,避免因网络问题或节点故障导致的缓存同步失败。
  • 代码实现

    核心代码逻辑

    import net.sf.ehcache.CacheManager;
    import net.sf.ehcache.distribution.RMICacheManagerPeerProvider;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    import java.net.Socket;
    import java.util.Map;
    @Configuration
    @PropertySource({"classpath:eh.properties"})
    public class RMIUrlsThread {
    @Value("${rmiurls}")
    private String rmiurls;
    private static final Map
    urls = new HashMap<>();
    private static final Map
    paramMap = new HashMap<>();
    private static final String RMI_URLS = "rmiUrls";
    private static Boolean flag = false;
    public void loadProps() {
    int key = 0;
    String[] split = rmiurls.split("\\|");
    for (String s : split) {
    urls.put(key, s);
    String substring = s.substring(2);
    String[] splitS1 = substring.split("\\:");
    String IP = splitS1[0];
    String s2 = splitS1[1];
    String[] s2Split = s2.split("\\/");
    String port = s2Split[0];
    SocketParam socketParam = new SocketParam(IP, Integer.parseInt(port));
    paramMap.put(key, socketParam);
    key++;
    }
    }
    public void thread() {
    new Thread() {
    @Override
    public void run() {
    CacheManager cacheManager = EhcacheManager.getCacheManager();
    Map
    cacheManagerPeerProviders = cacheManager.getCacheManagerPeerProviders();
    cacheManagerPeerProviders.forEach((k, v) -> {
    RMICacheManagerPeerProvider provider = (RMICacheManagerPeerProvider) v;
    while (true) {
    urls.forEach((key, url) -> {
    SocketParam socketParam = paramMap.get(key);
    Socket socket = null;
    String IP = socketParam.getIp();
    Integer port = socketParam.getPort();
    try {
    socket = new Socket(IP, port);
    socket.close();
    provider.registerPeer(url);
    } catch (Exception e) {
    provider.unregisterPeer(url);
    }
    });
    System.out.println("执行一次");
    try {
    Thread.sleep(10000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    });
    }
    }.start();
    }
    public static void main(String[] args) {
    }
    }

    关键点分析

  • 读取配置文件:通过@Value注解读取properties文件中的RMI URL值,确保配置文件中的值能够被动态读取和解析。
  • 双重MAP存储:通过两个MAP分别存储URL和SocketParam对象,确保每个URL对应的IP和端口信息能够被快速查找和操作。
  • 轮询机制:通过不死线程不断执行连接测试,确保集群中的每个节点都能及时更新其状态,避免因网络问题或节点故障导致的缓存同步失败。
  • 异常处理:在连接测试过程中,通过try-catch块捕获异常并处理,确保即使出现连接问题,也能及时反注册Peer Provider,避免影响集群的稳定性。
  • 优化效果

    通过引入轮询机制,我们解决了传统手动发现机制的主要问题,即动态增加机器和操作不便等。现在,系统能够自动检测集群中每个节点的状态,并及时更新Peer Provider的注册信息,从而确保集群的高效运行。

    后续工作

  • 加锁处理:由于MAP是线程安全的,需要确保在多线程环境下进行操作时加锁处理,避免并发操作带来的问题。
  • 异常处理优化:进一步优化异常处理逻辑,确保在连接失败时能够快速反注册Peer Provider。
  • 性能优化:通过优化连接测试的间隔时间和异常处理逻辑,进一步提升系统的运行效率和稳定性。
  • 通过以上优化,我们的Ehcache RMI手动发现机制已能够更好地支持动态集群管理,减少了因网络问题或节点故障导致的缓存同步失败。

    上一篇:微信公众平台unionID简介以及小程序获取unionID机制
    下一篇:Ehcache 基本使用 以及 基于RMI集群搭建

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月20日 15时00分13秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2024数字安全创新性案例报告,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024最新最全CTF入门指南(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024最新科普什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-29
    2024最新程序员接活儿搞钱平台盘点 2025-03-29
    2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024版最新SRC漏洞挖掘思路手法(非常详细),零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024版最新渗透测试零基础入门教程,带你入门到精通(超详细),收藏这篇就够了 2025-03-29
    2024版最新网络安全入门必备读书清单(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024版最新网络安全教程从入门到精通,看完这一篇就够了 2025-03-29
    2024网络安全岗就业前景如何?零基础入门到精通,收藏这篇就够了 2025-03-29
    2024零基础如何入门网络安全? 2025-03-29
    2024,java开发,已经炸了吗? 2025-03-29
    2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这一篇就够了 2025-03-29
    2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这篇就够了 2025-03-29
    2025大语言模型入门该怎么学?零基础入门到精通,收藏这篇就够了 2025-03-29
    2025年3月全国计算等级考试(报名操作指南)从零基础到精通,收藏这篇就够了! 2025-03-29
    2025年中国云计算市场四大趋势前瞻,从零基础到精通,收藏这篇就够了! 2025-03-29
    2025年十大最佳漏洞管理工具,从零基础到精通,收藏这篇就够了! 2025-03-29
    2025想做黑客?先来学习 SQL 注入,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025春招计算机就业哪些方向最香?零基础入门到精通,收藏这篇就够了 2025-03-30