Caching “昂贵”运营的门槛是否应该随着基础设施的变化而变化?

Caching “昂贵”运营的门槛是否应该随着基础设施的变化而变化?,caching,amazon-web-services,memcached,Caching,Amazon Web Services,Memcached,我在多节点web应用程序上用于会话存储和昂贵的操作缓存。一个问题是,与本地Memcached服务器相比,我没有考虑ElastiCache节点的网络延迟 我的基准测试显示,在AWS VPC中,ElastiCache调用的响应时间为1-2ms,正如广告中所说的,相当不错,但明显比任何本地调用都慢。就实际计算周期而言,1-2ms是一个生命周期。这极大地改变了我可以考虑的一个昂贵的操作,值得缓存。 我的经验不足使我走上了这条道路,但我可以想象其他人在进入云端时也会遇到类似的问题 问题:是重新思考和重写成

我在多节点web应用程序上用于会话存储和昂贵的操作缓存。一个问题是,与本地Memcached服务器相比,我没有考虑ElastiCache节点的网络延迟

我的基准测试显示,在AWS VPC中,ElastiCache调用的响应时间为1-2ms,正如广告中所说的,相当不错,但明显比任何本地调用都慢。就实际计算周期而言,1-2ms是一个生命周期。这极大地改变了我可以考虑的一个昂贵的操作,值得缓存。 我的经验不足使我走上了这条道路,但我可以想象其他人在进入云端时也会遇到类似的问题

问题:是重新思考和重写成本高昂的操作更好,还是基础设施在支持代码方面做得更好?例如,我可以在每个节点上使用本地memcached服务器,只将缓存未命中传递给ElastiCache节点。

一些开放性问题:

你是如何进行基准测试的?1-2ms是从连接打开到关闭的时间,或者只是获取时间。 为什么平均需要15-20个电话,可以减少吗?如果是,那可能更好。 Amazon ElasticCache是否与您的服务器位于同一地区? 现在,我们将根据上述问题的答案更新解决方案:

可能的解决办法
将可以显示过时值的内容和所有服务器中应该不过时且通用的内容(例如钱包中的钱)分开。。现在,设置两层缓存,一层,即仅在服务器上,并保存所有可能在不同服务器上单独过时的值,并为稳定值维护公共AmazonElastic缓存。这可能是一种工作策略。

为了满足一个请求,您平均要调用多少ElasticCache?另外,根据我的说法,1-2毫秒就像什么都不是,你不应该因为这个而担心,理想情况下,可能平均15-20个elasticache通话。加起来大约50毫秒,我的目标总时间是150毫秒。如果需要1-2毫秒才能将其从缓存中取出,那么缓存需要0.5毫秒才能生成的内容是没有意义的。但通常我会考虑一个.5ms的操作,例如,递归目录扫描一个相当昂贵的操作,值得缓存。因此,这会引发一个循环,我的问题是:应该更改什么,代码还是基础结构。其他人会做什么?补充一个答案,没有几个开放性问题,我们可以讨论这个问题,并找到最佳解决方案:——基准测试一系列memcached\u get操作,随时间平均化。-15-20个电话是个问题。就像我上面的评论一样,使用本地memcached安装这样做很有意义,因为它可以真正减少计算时间和周期。但在云环境中,微积分会发生变化是的,相同的地区,az和vpc。我认为解决方案是按照你的建议,我在原始帖子中提到的,有两层缓存。在每台服务器上安装一个本地设备,然后在远程elasticache节点上安装一个主设备。远程节点将持有所有本地调用的全局密钥。这将允许您通过更改缓存密钥来同时清除所有远程和本地节点上的缓存。本地缓存未命中将传递到elasticache节点,然后也在本地存储该值——无论如何都是这样。两层缓存很常见吗?