系统开发较早,使用的是当时较为流行的Ehcache缓存结合Hibernate进行二级缓存的处理,为应用性能的提高做了较大的贡献,之前也在对这种类型的缓存做集群处理,由于版本较低,使用的是ehcahce1.3的处理,集群使用了RMI方式搭建,进行同步,相关简单配置如下:
集群时,一般是使用相同的war包部署,而不会单独更改配置部署。所以在上面的配置中做了手脚,加入了本地的4000端口在远程同步中。实际部署中发现,当一个节点失败后,简单的宕机,集群锁表现的高可用性将失败,这导致所有缓存不能同步了。最后查看源码和跟踪发现,当前系统使用的ehcache1.3的jar包处理,其中RMI方式同步存在一个BUG,就是在同步时前会尝试连接各个端口,循环中处理不好,整体异常抛出,导致全部send同步失败。
查看这个异常信息的源码如下: