我正在考虑为我们的一个项目使用AppFabric缓存功能.我们需要分布式缓存功能,似乎AppFabric是一个很好的解决方案.但是,我有几个问题希望在这里得到解答.
我们正在考虑在安装Web应用程序的同一台机器上托管AppFabric Cache服务器.我在MSDN文章中发现AppFabric应该安装在专用机器上.还要注意的是,AppFabric可以与应用程序本身安装在同一台机器上,但是应该考虑一些问题(文章引用):
Windows Server AppFabric缓存主机应专用于缓存服务,这意味着这些服务器也不会用作应用程序,Web或数据库服务器.可以在群集中使用非专用缓存服务器,但不支持此方案.尽管有此策略,但如果您决定使用非专用缓存主机,请确保正确估计并测试每个缓存主机的配置,以便为缓存服务和计算机上的所有其他服务提供足够的内存和网络资源.还要了解其他服务的处理器和网络利用率的高峰将对缓存集群的性能和稳定性产生负面影响.
以下是本文的链接:文章#1
现在,这听起来很合理,我认为限制RAM AppFabric缓存可以使用的数量就足够了.但是,在MSDN上阅读另一篇文章我发现了这个:
对于物理机和虚拟机,您应该记录缓存集群到使用缓存的应用程序或Web服务器的位置.如果它们位于不同的数据中心,请确保这些数据中心之间的延迟不会对性能产生负面影响.在此阶段,您可能很想将您的应用程序或Web服务器用于缓存服务器.尽管可能,但不支持此功能.首先,这些机器上的IIS等服务的任何资源使用率都会影响缓存集群.其次,缓存服务假定它位于专用服务器上,并且可能使用比您指定的内存更多的内存.
以下是本文的链接:文章#2
如果我正确理解上面的声明,这意味着尽管我的AppFabric的配置设置,它将需要尽可能多的RAM吗?这真的可以吗?有没有人在应用程序和AppFabric位于同一台机器上的配置方面有一些经验?
我想在一组机器之间共享一个非常大的对象,例如以兆字节甚至几千兆字节的顺序.该对象将被写入一次,但可能会被多次读取.也许一种天真的方法是使用像redis这样的ceneteralized存储.但是,它可能会成为单点故障,而太多请求可能会对redis造成DOS攻击.然后,分布式解决方案更有前途.但是,主要关注的是将结构复制到所有机器上.如果通过主/从技术完成复制,则复制可能会导致主服务器上的流量负载很大,因为对象很大.因此,更好的解决方案是使用P2P策略来复制对象,以减少主服务器上的网络负载.
有没有人知道这个问题的解决方案?也许有些候选人是:
- Redis
- Memcached
- Voldemort
- Hazelcast
我主要关心的是Java接口,共享大对象,高可用性以及用于复制的低网络流量.
先谢谢.
我试图找到如何为应用程序实现分布式缓存.
Ehcache已经在我的项目中用于缓存,这就是我搜索如何使用它来解决这个问题的原因.但是,不幸的是,似乎需要Terracotta Enterprise Suite才能实现商业化.不是吗?是否有另一种解决方案如何使用Ehcache进行分布式缓存(RMI或其他任何东西)?
我正在运行一个测试,我将比较获取时间b/w appfabric和SQL Server 2008,看起来appFabric的执行时间比SQL Server慢4倍.
我有一个SQL Server 2008安装程序,它只包含一个包含4列(全部nvarchar)的表.该表有6000行.我在appfabric缓存中插入相同的行(作为CLR serializable obj).我正在运行一个循环来获取数据x次.
这是代码
public class AppFabricCache
{
readonly DataCache myDefaultCache;
public AppFabricCache()
{
//-------------------------
// Configure Cache Client
//-------------------------
//Define Array for 1 Cache Host
var servers = new List<DataCacheServerEndpoint>(1);
//Specify Cache Host Details
// Parameter 1 = host name
// Parameter 2 = cache port number
servers.Add(new DataCacheServerEndpoint(@"localhost", 22233));
//Create cache configuration
var configuration = new DataCacheFactoryConfiguration();
//Set the cache host(s)
configuration.Servers = servers;
//Set default properties for local …Run Code Online (Sandbox Code Playgroud) 我们目前正在寻找最适合访问分布式系统关键数据的解决方案,我们正在考虑是否在内存缓存中使用,而不是集中式缓存.
有关我们希望存储/访问的数据的一些信息:
我们看到它的方式如下 -
在内存缓存中
优点:
缺点:
集中缓存
为了对话,我们考虑过使用Redis.
优点:
缺点:
architecture caching distributed-computing distributed-caching
我是Redis的新手并使用VS 2015和ASP.NET Core应用程序(v 1.0),我安装了nugget包:
Install-Package StackExchange.Redis
Run Code Online (Sandbox Code Playgroud)
但是我无法将其注入并配置到我的服务中,没有RedisCache或" AddDistributedRedisCache "方法.
我该如何注射和使用它?
我在 IIS 上有一个 ASP.NET Web 应用程序,它将大量数据缓存到内置 ASP.NET 缓存中。我想将缓存移至 Redis 并使用 AWS ElastiCache Redis,因为当前我的所有服务器都不共享其缓存。它们已经托管在 EC2 上。我需要了解,通过将缓存从基本相同的服务器(我托管应用程序)移动到 AWS ElastiCache 的某个网络实例,是否不会降低性能?我读到 AWS Redis 本身有一个“亚毫秒延迟”,但是我不明白,是否也提到了网络延迟,或者必须满足什么条件才能获得这种延迟。
这是我的情况:
所以这里有一个问题:
先感谢您。
latency distributed-caching amazon-web-services redis amazon-elasticache
我正在浏览 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 慢很多:
redis ×4
appfabric ×2
c# ×2
caching ×2
java ×2
.net ×1
architecture ×1
asp.net-core ×1
comparison ×1
ehcache ×1
etcd ×1
hazelcast ×1
latency ×1
memcached ×1
oracle ×1
performance ×1
terracotta ×1
voldemort ×1