0

質問の背景:

キャッシュにehcacheを使用するサードパーティアプリケーションへのアップグレードを展開しています。本番環境では4台のサーバーをクラスター化する予定です。

ベンダーは、マルチキャストを使用してピアを検出し、rmiを介してクラスター化するデフォルトのehcache構成を提供しています。

問題は、ネットワークが短期的にマルチキャストをサポートしていないため、ピアを手動で指定するためにデフォルト構成を上書きする必要があることです。予算の制約から、テラコッタの使用は問題外です。

これはアップグレードプロジェクトであるため、実際に稼働するまで、手動構成の結果を実際にテストすることはできません。手動設定は文字数が多く、手動で記述されているため、エラーが発生する可能性があります。

私の質問

キャッシュクラスタリング情報を画面に表示するために使用できるオープンソースのjspなどはありますか。これをサードパーティのアプリケーションに組み込み、ピアが正しく検出されたことをすばやく検証するために使用できます。

私が調べたもの

私はグーグルを使ってエハチェを検索しましたが、私のフィルタリングスキルは結果を有用なものに絞り込むことができませんでした。

ログを使用してキャッシュがいつ発生するかを追跡することを検討しましたが、このアプローチに100%満足しているわけではありません。

事前に構築されたソリューションが見つからない場合は、独自のソリューションを作成する必要があります。

4

4 に答える 4

1

テラコッタと予算の制約について-無料のオープンソースバージョンもあります:http ://terracotta.org/downloads/open-source/catalogを参照してください

オフヒープメモリ、分散検索、または水平スケーリングを使用する場合はすぐに商用ライセンスが必要ですが、ユースケースにはノード間の基本的な同期のみが含まれるようであるため、オープンソースバージョンで十分です。

テラコッタサーバーにキャッシュを同期させることは、ネットワークオーバーヘッドを減らし、一貫性の保証を改善することを意味します(ピアツーピアレプリケーションを使用して提供されません)。

于 2012-11-27T13:12:37.443 に答える
1

キャッシュ統計を提供するEhcache監視ツールが利用可能です。いくつかの参照

于 2013-08-20T09:46:38.763 に答える
0

実行時にehcacheを監視するために使用できるMBeanがあります。

http://ehcache.org/documentation/user-guide/jmxを参照してください

于 2012-11-26T23:34:06.477 に答える
0

私はこれを自分で書かなければなりませんでした。他の人がそれを必要とする場合のコードはここにあります。

@Controller
@RequestMapping(value = "/tools/ehcache")
public class EhcacheManagerController {

private static final String VIEW_URL = "/WEB-INF/views/tools/ehcache/ehcache.jsp";

private static final String ALL = "all";

List<CacheManager> allCacheManagers = CacheManager.ALL_CACHE_MANAGERS;

private static final Log logger = LogFactory.getLog(EhcacheManagerController.class);

@RequestMapping(method = RequestMethod.GET)
protected String loadPage(ModelMap modelMap) throws Exception {

    // Manager (keyed by name) --> Cache (keyed by name) --> Peer Information (keyed by peer Name)

    Map<String,Map<String,Map<String,String>>> managerMap = new HashMap<String,Map<String,Map<String,String>>>();
    for (CacheManager cacheManager : allCacheManagers) {
        Map<String,Map<String,String>> cacheMap = new HashMap<String,Map<String,String>>();
        managerMap.put(cacheManager.getName(), cacheMap);           

        String[] cacheNames = cacheManager.getCacheNames();
        for (String name : cacheNames) {
            Map<String,String> peerInfoMap = new HashMap<String,String>();
            cacheMap.put(name,peerInfoMap);

            CacheManagerPeerProvider provider = cacheManager.getCacheManagerPeerProvider("RMI");
            if (provider == null) {
                peerInfoMap.put("nopeer","no status");
                break;
            }

            Cache ehcache = cacheManager.getCache(name);
            List<CachePeer> cachePeers = provider.listRemoteCachePeers(ehcache);
            for (CachePeer cachePeer : cachePeers) {
                StringBuilder cacheStatus = new StringBuilder();
                String peerName = cachePeer.getName();
                cacheStatus.append("url='").append(cachePeer.getUrl()).append("' ");
                cacheStatus.append("keyssize='").append(cachePeer.getKeys().size()).append("' ");

                peerInfoMap.put(peerName,cacheStatus.toString());
            }


        }

    }

    modelMap.put("managerMap", managerMap);

    return VIEW_URL;
}
}

jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>EHCache</title>
</head>
<body>
<h1>EHCache</h1>

<p><a href="/tools/ehcache/clear?name=all">Clear All</a></p>
<c:forEach items="${managerMap}" var="manager">
<h2>Manager: '${manager.key}'</h2>

    <c:forEach var="cacheMap" items="${manager.value}">
        <h3>Cache: '${cacheMap.key}'</h3>
        <p><a href="/tools/ehcache/clear?cacheManagerName=${manager.key}&cacheName=${cacheMap.key}">clear</a></p>

        <c:forEach var="peerInfoMap" items="${cacheMap.value}">
            <li>peer name = ${peerInfoMap.key} peer status = ${peerInfoMap.value}</li>
        </c:forEach>    
    </c:forEach>


</c:forEach>

</body>
</html>
于 2012-11-27T03:54:59.340 に答える