Redis 缓存跨区域共享
Redis Cache Share Across Regions
我有一个使用 redis 缓存的应用程序,目前运行良好。然而,我们需要将我们的应用程序分布到不同的区域(通过用户位置的动态 DNS 调度程序,本地用户可以访问最近的服务器)。
考虑到网络限制和带宽,不太可能搭建一个中心化的redis。所以我们要为不同的地区分配不同的redis。所以这里的问题是我们如何处理漫游情况。用户在位置 1 打开应用程序,同时继续使用位置 2 的应用程序而不会丢失位置 1 的缓存。
您将不得不使用分层架构。这就是 Akamai 或 Amazon Cloudfront 等大多数 CDN 的工作方式。
简而言之,这就是它的工作原理:
请求对象时,查看是否存在分配给位置L1的redis缓存服务器S1中。
如果S1不存在,检查其他位置的缓存服务器中是否存在,即S2,S3....SN.
如果在S2...SN中找到,则将对象也存储在S1中,并服务对象。
如果在S2...SN中也找不到,则从后端获取新的对象,并存储在S1中。
如果您使用 memcached 进行缓存,那么 facebook 的开源 mcrouter 项目会有所帮助,因为它可以进行集中式缓存。
我有一个使用 redis 缓存的应用程序,目前运行良好。然而,我们需要将我们的应用程序分布到不同的区域(通过用户位置的动态 DNS 调度程序,本地用户可以访问最近的服务器)。 考虑到网络限制和带宽,不太可能搭建一个中心化的redis。所以我们要为不同的地区分配不同的redis。所以这里的问题是我们如何处理漫游情况。用户在位置 1 打开应用程序,同时继续使用位置 2 的应用程序而不会丢失位置 1 的缓存。
您将不得不使用分层架构。这就是 Akamai 或 Amazon Cloudfront 等大多数 CDN 的工作方式。 简而言之,这就是它的工作原理:
请求对象时,查看是否存在分配给位置L1的redis缓存服务器S1中。
如果S1不存在,检查其他位置的缓存服务器中是否存在,即S2,S3....SN.
如果在S2...SN中找到,则将对象也存储在S1中,并服务对象。
如果在S2...SN中也找不到,则从后端获取新的对象,并存储在S1中。
如果您使用 memcached 进行缓存,那么 facebook 的开源 mcrouter 项目会有所帮助,因为它可以进行集中式缓存。