我该怎么做才能保持一个共同的文件caching服务器? NFS是个好主意?

我不是任何networking或devops家伙,但我必须为我的公司这样做,因为我的公司无法负担,所以请原谅我的错误。

我有一个在谷歌云托pipe的Web应用程序我使用谷歌云提供的负载平衡器 ,在后端我有2个实例的Web应用程序。 问题是我正在使用文件caching和caching是分开的两个服务器。 这不是HTTPcaching或任何东西,它是从we​​b应用程序而不是nginx后端caching。

我的服务器正在运行Ubuntu 16.04 LTS。

我怎样才能保持一个共同的文件caching服务器? 我想保留第三台服务器进行文件caching,这样caching对于这两个实例都是常见的,为此我想使用NFS,使用NFS进行文件caching是个不错的主意?

我在互联网上研究了很多,这是我听说NFS的地方。

所有实例的通用文件服务器是一个有问题的想法,因为它可能成为瓶颈和单点故障。 这样就可能最终破坏首先使用负载平衡器的目的。

为了推荐一个解决scheme,您需要了解更多关于您的系统架构。 我可以根据你的架构给出一些可能或不可以工作的build议。

  1. 确保即使caching虚拟机没有响应,您的实例也可以响应所有请求。 如果caching仅用于提高性能,那么实例可能不依赖于caching而进行响应 – 只是效率不高。
  2. 分片caching。 如果您可以计算正在caching的资源的标识的哈希,并使用它在多个caching虚拟机之间进行select,那么您的devise将更具可扩展性。 通过使用相同的散列,您仍然可以从您的LB后端受益于可以访问其他实例caching的结果。
  3. cachingLB后端也是如此。 即使你有一个共享caching,在LB后端caching也是一个好主意。 它可以防止高速caching虚拟机上的热点,并且在其中一个高速caching虚拟机不可用的情况下使服务更具弹性。

协议的select应该取决于你如何满足上述要求。 我不认为NFS是最好的select,因为当其中一个NFS服务器没有响应时,应用层很难实现超时。 而一个NFS服务器没有响应的可能性导致多个LB后端行为的错误是我宁愿没有的风险。

客户端(在LB后端运行)以用户模式实现的协议可能是更好的select,因为任何线程因为不响应的caching服务器而被卡住的可能性更大。 在用户模式下实现访问高速caching虚拟机时,实现超时更为简单。