标签: distributed-caching

AWS ElastiCache Redis 是否存在明显的网络延迟?

我在 IIS 上有一个 ASP.NET Web 应用程序,它将大量数据缓存到内置 ASP.NET 缓存中。我想将缓存移至 Redis 并使用 AWS ElastiCache Redis,因为当前我的所有服务器都不共享其缓存。它们已经托管在 EC2 上。我需要了解,通过将缓存从基本相同的服务器(我托管应用程序)移动到 AWS ElastiCache 的某个网络实例,是否不会降低性能?我读到 AWS Redis 本身有一个“亚毫秒延迟”,但是我不明白,是否也提到了网络延迟,或者必须满足什么条件才能获得这种延迟。

这是我的情况:

  1. IIS EC2 WinServer2008R2 上的 2 个应用服务器处于负载平衡状态
  2. 需要将数千个各种对象缓存为 JSON,最多可达 1M 个符号
  3. 所有服务器可以设置在同一区域

所以这里有一个问题:

  1. AWS ElastiCache Redis 是合适的解决方案吗?
  2. 我应该怎么做才能最大限度地减少 Redis 的延迟?

先感谢您。

latency distributed-caching amazon-web-services redis amazon-elasticache

7
推荐指数
1
解决办法
5375
查看次数

Redis 与 etcdv3 的性能差异

我正在浏览 Redis 和 Etcd 的基准文档页面。从基准数据来看,Etcd 与 Redis 一样高效。

https://redis.io/topics/benchmarks

https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/performance.md#benchmarks

示例 - 通过 100 个并行客户端设置 100k 个密钥,有效负载 - 256 字节

- on redis : 70K QPS 
- on Etcd : 50k QPS
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么 Etcd 和 Redis 一样高效,还是我的理解有问题?

Etcd 的原因应该是比 Redis 慢很多:

  • Etcd 可能使用 SSD,但 Redis 仍然是内存数据库,因此应该具有更高的性能。
  • Etcd 使用共识(Raft)提供强一致性,并且应该比 Redis 慢。因为Redis不保证一致性。

distributed-system distributed-caching redis etcd

7
推荐指数
0
解决办法
5084
查看次数

当Terracotta服务器用作Hibernate的EHCache后端时,它会做什么?


我的DAL实现了Hibernate,我希望将EHCache其作为其二级缓存及其分布式功能(用于可伸缩性和HA).
眼见为EHCache提供分布式缓存只与Terracotta我的问题是什么角色Terracotta服务器实例?它是否也包含数据?它是否只协调分区缓存部分之间的分配?
我的困惑主要来自这个解释关于TSA它说的服务器保存的数据,但我想,也许在我的方案中的高速缓存和Terracotta服务器被排序的合并.我对么?
如果服务器确实持有数据,那么为什么瓶颈不应该从数据库移动到Terracotta服务器?

更新: Affe的回答回答了我的问题的第二部分,这是重要的部分,但以防万一有人来寻找第一部分,我会说TC服务器必须保存内存中的EHCache所拥有的所有数据,所以如果你想要一个分布式缓存(不复制),那么L2(TC服务器)也必须自己拥有所有对象.

感谢提前,
Ittai

java hibernate terracotta ehcache distributed-caching

6
推荐指数
1
解决办法
2549
查看次数

与可变/不可变对象保持一致的进程内缓存与分布式缓存

我听到我的同事说,在缓存不可变的对象(最终的一致性)时,进程内缓存将是更好的选择。外部分布式缓存更适合于可变对象,而您始终希望读取保持一致(强)。

这始终是事实吗?我真的看不到可变性与一致性之间的关系。有人可以帮我理解吗?

java architecture memcached caching distributed-caching

6
推荐指数
2
解决办法
3080
查看次数

如何使用分布式缓存在amazon ec2上对jboss4.2.2AS进行负载均衡

我有一个旧的应用程序,很难升级到更新版本的jboss.我想保持jboss版本相同(到4.2.2 AS)并使用分布式缓存在亚马逊EC2上进行负载平衡.

我能够平衡它,但我正在努力分布式缓存.有人可以帮我这个吗?

对于缓存,我使用以下库: org.hibrnate.cacheableorg.jbosss.cache.

是否可以使用这些库在jboss4.2.2上实现分布式缓存?如果是,那我该怎么办呢?

java load-balancing amazon-ec2 distributed-caching jboss-cache

6
推荐指数
0
解决办法
69
查看次数

Azure缓存ErrorCode <ERRCA0017>:SubStatus <ES0009>此时的已执行配额限制

我正在开发一个MVC 3站点,该站点位于Windows Azure中,配置为使用DistributedCacheSessionStateStoreProvider进行会话状态,而后者又在内部使用Azure缓存.缓存配置为:

<dataCacheClients>
<dataCacheClient name="default">
  <hosts>
    <host name="test.cache.windows.net" cachePort="XXXX" />
  </hosts>
  <securityProperties mode="Message">
    <messageSecurity authorizationInfo="XXXX">
    </messageSecurity>
  </securityProperties>
  <transportProperties receiveTimeout="45000" />
</dataCacheClient>
 </dataCacheClients>
Run Code Online (Sandbox Code Playgroud)

会话提供程序配置为

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <add name="AppFabricCacheSessionStoreProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" useBlobMode="true" />
  </providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)

我们自4月以来已经实现了这一点,但最近才开始使用会话来存储更多的数据.我们的测试缓存服务是128 MB,据说允许5个并发连接.根据Azure管理控制台,我们在任何给定时间使用此服务的最多是0.34 MB.

在我们的日志中,我们经常看到此异常:

ErrorCode:SubStatus:暂时失败.请稍后重试.(请求失败,因为您超过了此时的配额限制.如果您经常遇到这种情况,请将订阅升级到更高的订阅限制).附加信息:由于资源限制:连接

根据我读过的文档,默认情况下数据缓存客户端的最大连接数设置为1.我在两个实例上运行,我认为这意味着我使用了两个总连接.

请帮助我理解我做错了什么以及我可以做些什么来解决这个问题.

azure distributed-caching

5
推荐指数
1
解决办法
948
查看次数

实时分析处理系统设计

我正在设计一个系统,该系统应分析大量用户事务并生成汇总度量(如趋势等).系统应该快速,稳健和可扩展.System是基于java的(在Linux上).

数据从生成用户事务的日志文件(基于CSV)的系统到达.系统每分钟生成一个文件,每个文件包含不同用户的事务(按时间排序),每个文件可能包含数千个用户.

CSV文件的示例数据结构:

10:30:01,用户1,...
10:30:01,用户1,...
10:30:02,用户78,...
10:30:02,用户2,......
10: 30:03,用户1,...
10:30:04,用户2,...
...

我计划的系统应该处理文件并实时执行一些分析.它必须收集输入,将其发送到多个算法和其他系统,并将计算结果存储在数据库中.数据库不保存实际输入记录,而只保留有关事务的高级聚合分析.例如趋势等

我计划使用的第一个算法要求最佳操作至少10个用户记录,如果5分钟后找不到10条记录,它应该使用可用的数据.

我想使用Storm来实现,但我更愿意尽可能地将这个讨论留在设计层面.

系统组件列表:

  1. 每分钟监视传入文件的任务.

  2. 读取文件,解析文件并使其可用于其他系统组件和算法的任务.

  3. 用于缓冲用户的10条记录的组件(不超过5分钟),当收集10条记录或5分钟时,是时候将数据发送到算法进行进一步处理.由于要求为算法提供至少10条记录,我想到使用Storm Field Grouping(这意味着为同一个用户调用相同的任务)并跟踪任务中10个用户记录的集合,当然我计划有几个这样的任务,每个任务处理一部分用户.

  4. 还有其他组件可以处理单个事务,对于它们,我计划创建其他任务,在解析每个事务时(与其他任务并行).

我需要你的帮助#3.

设计这样一个组件的最佳实践是什么?很明显,它需要为每个用户维护10条记录的数据.键值映射可能会有所帮助,是否可以在任务本身或使用分布式缓存中管理映射?例如Redis是一个键值存储(之前从未使用过它).

谢谢你的帮助

distributed-computing distributed-caching batch-processing redis apache-storm

5
推荐指数
1
解决办法
1935
查看次数


Hazelcast SlowOperationDetector可以识别执行时间少于1秒的操作

我有一个性能用例,通过该用例,我需要确定花费300毫秒以上的某些process()调用EntryProcessor。我尝试使用SlowOperationDetector以下配置。

    <!-- SlowOperation Detector Configuration -->
    <property name="hazelcast.slow.operation.detector.enabled">true</property>
    <property name="hazelcast.slow.operation.detector.stacktrace.logging.enabled">true</property>
    <property name="hazelcast.slow.operation.detector.log.purge.interval.seconds">60000</property>
    <property name="hazelcast.slow.operation.detector.log.retention.seconds">60000</property>
    <property name="hazelcast.slow.operation.detector.threshold.millis">300</property>
Run Code Online (Sandbox Code Playgroud)

我给出了一个示例测试代码,该代码在内部睡眠1秒钟process()

public static void main(String args[])
{
    Config cfg = null;
    try {
        cfg = new FileSystemXmlConfig("C:\\workarea\\hazelcast\\hazelcast-perf.xml");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(cfg);
    IMap<String, Employee> employeesMap = hazelcastInstance.getMap("anyMap");
    employeesMap.put("100", new Employee(100));
    SlowEntryProcessor slowEntryProcessor = new SlowEntryProcessor();
    employeesMap.executeOnKey("100", slowEntryProcessor);

}

static public class SlowEntryProcessor implements EntryProcessor<String, Employee> …
Run Code Online (Sandbox Code Playgroud)

java distributed-cache distributed-caching hazelcast hazelcast-imap

5
推荐指数
1
解决办法
1320
查看次数

可以/应该使用 SignalR Backplane 来构建分布式缓存吗?

我们的 Web 应用程序使用内存缓存(应用程序数据缓存)来提高吞吐量,这样就不必为每个请求从数据库 (SQL Server) 加载频繁查询的数据。有可能,它将部署在网络农场中,因此我们必须解决必须同步所有节点缓存的经典问题。所以我们需要的是一个分布式缓存。

现成的解决方案是 NCache 和 REDIS(可能还有更多)。但是,由于我们已经在使用 SignalR Backplane 将数据集的更改传达给 Windows 服务(和浏览器客户端),我想知道它是否可以用于实现分布式缓存。

这样做,我们将(或多或少)重新使用我们现有的数据集已更改消息,但在 Web 应用程序本身中订阅它们以使其缓存无效。好处是我们不必引入新的库/技术。

我想我最大的问题是:这有意义吗?并且,SignalR 背板是否足够可靠以确保不会丢失导致缓存过时的事件?或者这是架构上的误用?

ncache web-farm distributed-caching signalr signalr-backplane

5
推荐指数
1
解决办法
925
查看次数