我们希望使用Milton WebDav在我们的Web应用程序中传输文件,最终将作为IaaS部署在云环境(很可能是Azure)上。现在我们知道 WebDAV 标准是无状态的,因此它应该不会对云负载均衡器产生任何问题,但我们不确定 Milton 并且有几个问题:
1.) 米尔顿是否按原样实现了 WebDAV,是否所有通信都保持无状态?我假设它在每个请求中都传递身份验证令牌,但我不确定令牌存储在服务器上的什么位置?它是否将其存储在数据库或某种缓存等中?
2.) 如果使用负载平衡并且有 5-6 台服务器来处理负载,锁定机制是否正常工作?再次,米尔顿服务器在哪里存储锁定令牌?
很抱歉评论晚了,webdav 影响负载平衡的两个最重要的方面是摘要式身份验证令牌(Nonce 值)和锁定令牌。
作为资源实现者,您可以控制这两者。锁定令牌通常存储在数据库中(您必须在 LockableResource 上实现将执行持久性的方法),因此将在服务器之间共享,尽管使用基于内存的锁定令牌并不少见,在这种情况下,您需要找到某种方式在服务器之间共享该信息。
摘要随机数仅在您实现了 DigestResource 时才是一个考虑因素。默认的 NonceProvider 使用简单的 HashMap,因此不会在服务器之间共享。但是该接口很简单,因此您可以轻松实现数据库存储。如果您的负载平衡解决方案使用粘性会话,那么这将不是问题,因为客户端将转到具有其随机数的服务器。
请注意,Tomcat 会话复制对上述问题没有帮助,因为 webdav 客户端通常不支持 cookie,因此没有 Servlet 会话。
我以前从未使用过Milton WebDAV,但从外观上看,它用于修改和编辑服务器上的文件。
但是,Azure 的本地存储不共享。每个实例都是一个完全独立的服务器。如果在一台服务器上修改文件,则不会将其复制到下一台服务器上。
Azure 通过上传部署包来工作。当需要启动新实例时,它会使用部署包并启动全新的服务器。
从你的角度来看,他们没有任何共同点。因此,您永远不会知道您正在点击哪个服务器。
如果您背后有一个共享文件存储系统,那么情况可能会有所不同。但是,使用Azure时,这种情况看起来很奇怪。不过,具有共享 EBS 的 Amazon EC2 可能会做到这一点。