caching - 负载平衡以最大化本地服务器缓存
问题描述
我有一个单服务器系统,可以对用户数据运行各种计算,可通过 REST API 访问。计算要求在计算期间大量用户数据在内存中。为了有效地做到这一点,系统包括一个内存缓存,因此对同一数据块的多个请求将不需要从存储中重新读取块。
我现在正在尝试扩展系统,因为一台大型服务器还不够,而且我还想实现主动/主动高可用性。我正在寻找在多个服务器之间进行负载平衡的最佳实践,同时最大限度地提高已经实现的本地缓存的效率。
每个 REST 调用都包含一个参数,用于标识应访问的数据块。我正在寻找一种方法来告诉负载均衡器将请求路由到在缓存中具有该块的服务器,如果这样的服务器存在 - 否则只需使用像循环这样的常规算法(并更新路由表,以便对同一块的下一个请求将被路由到选定的服务器)。
需要考虑的更多输入:
- 数据块的数量是数千,可能是数万。服务器的数量只有几十个。
- 我宁愿不移动到另一台服务器上的集中式缓存,例如 Redis。我想利用现有机器上的大量备用内存,因为计算主要受 CPU 限制。另外,我不希望重新实现另一个自定义缓存层。
- 我的服务器在 AWS 上,所以在 ELB 中实现这一点的方法对我来说很好,但对其他与云无关的解决方案开放。理论上我可以实现一个系统来更新 AWS 应用程序负载均衡器上的规则,但它可能会增长到数千条规则(每块一个),我不确定这是否有效。
- 由于使用相同数据块的请求可能来自多个来源,因此基于会话的粘性是不够的。其中一些操作是写操作,我真的不想处理跨服务器同步。单个块上的所有操作都应路由到内存中具有该块的单个服务器。
欢迎任何想法!谢谢!
解决方案
推荐阅读
- php - php curl 处于活动状态,但 curl_exec 始终返回 false
- python-3.x - 如何在西班牙语中找到引理的 path_similarity?
- apache-kafka - 是否可以将 kafka 用户从一个 Zookeeper 转移到另一个 Zookeeper?
- python-3.x - 为什么 Google Cloud Function 上的 Python 3.7 运行时不再允许 slackclient?
- android - findViewById 在库模块中使用时返回 null
- django - 重定向后 django 中的 REMOTE_USER 为空
- mysql - 选择日期,用引号括起来并连接
- windows - 我可以通过 ssh 连接到 Windows,启动一个命令并让它在我注销时运行吗?
- excel - 定义范围与最后一行 & 相交活动单元格和范围
- node.js - MERN 练习应用程序在本地工作,但在部署到 Heroku 后无法连接到 MLab