正如我在问题标题中所说的,我目前面临着如何对服务于多个服务的应用程序进行负载平衡的问题。
该应用程序是一种存储服务,它以存储桶的形式存储用户的文件。文件本身实际上并不存储在应用程序服务器上,而是存储在网络存储上。应用程序服务器用于加密/解密数据,并提供多种服务以使用户能够访问他们的数据。这些服务目前包括FTP、SFTP、HTTP以及供内部使用的JNDI/RMI,并可能在未来增强其他专有或自己的协议。
两个服务器可能不能同时访问两个文件存储桶,所以我希望将对任何服务的任何调用路由到同一个集群节点(如果该节点仍在运行)。如果没有,另一台服务器将打开与存储桶的连接,并将其提供给用户。
如何对这样的应用程序进行集群?我同时研究了Tomcat和JBoss作为集群指南,并阅读了一些关于Java集群的文章,但目前还没有任何文章能让我了解如何实现我的目标。我认为我的主要问题之一是负载均衡,在这里我可能无法使用任何标准的解决方案。
发布于 2011-02-03 19:02:17
我很想从文件名创建一个哈希,并使用它来确保负载从一开始就是相对平衡的。
对于一个简化的示例(在C中):
hash = 0
for(i = 0; i < strlen(file_name); i++) {
hash ^= (hash << 5) ^ file_name[i];
}
server_number_for_this_file = hash % total_servers;对于像查找特定组中的所有文件这样的事情,可以询问所有服务器并合并回复。例如,第一个服务器可能会返回"hello“和"foo",第二个服务器可能会返回”再见“和"bar",因此您可以组合这些部分列表以获得包含4个文件的列表。
注意:我假设应用程序服务器缓存目录内容,以避免一直困扰网络存储,因此这也提高了缓存效率(对于10个应用程序服务器,每个应用程序服务器只需要缓存10%的目录内容数据,而不是100% )。
当然,我也想在客户端进行加密/解密,以便在客户端和应用服务器之间传输文件数据(通过不受信任的internet?)是加密的,而不是在不受信任的网络上具有“纯文本”,并且只加密在应用程序服务器和网络存储(在受信任的网络上)之间传输的数据。
https://stackoverflow.com/questions/4884800
复制相似问题