Tomcat 聊天服务器负载平衡

Tomcat 聊天服务器负载平衡,tomcat,load-balancing,throttling,Tomcat,Load Balancing,Throttling,我读过Apache中有关Tomcat服务器的文章,但我不知道这对通信有什么作用 比如说,我正在创建一个聊天应用程序,允许用户通过服务器相互交谈。如果两个用户在同一台服务器上,这很好,但是如果一个用户在一台服务器上,另一个在另一台服务器上呢?服务器如何通信 我想我的观点是,我将使用多个服务器来减少负载,但是如果用户通过服务器进行通信,并且每个用户都在一个单独的服务器上,那么我的两个服务器将成为彼此的客户机,并且负载不会减少 我的观点是,进出每台服务器的数据量是相同的,那么当有100万用户时,这是如

我读过Apache中有关Tomcat服务器的文章,但我不知道这对通信有什么作用

比如说,我正在创建一个聊天应用程序,允许用户通过服务器相互交谈。如果两个用户在同一台服务器上,这很好,但是如果一个用户在一台服务器上,另一个在另一台服务器上呢?服务器如何通信

我想我的观点是,我将使用多个服务器来减少负载,但是如果用户通过服务器进行通信,并且每个用户都在一个单独的服务器上,那么我的两个服务器将成为彼此的客户机,并且负载不会减少


我的观点是,进出每台服务器的数据量是相同的,那么当有100万用户时,这是如何工作的呢?

您可以使用负载平衡器来实现所需的功能

基本上,服务器负载平衡器可以是:

  • 传输级负载均衡器-基于DNS的方法或TCP/IP级负载平衡
  • 应用程序级负载平衡器-使用应用程序负载做出负载平衡决策
基本服务器负载平衡器如下所示:

基本上,每个服务器都会将其当前连接计数通知负载平衡器。负载平衡器使用此信息来决定将新客户端发送到哪个服务器

我的观点是,每个服务器进出的数据量相同, 那么,当有100万用户时,这是如何工作的呢

<>实际上它的数据量不一样,如果你不需要把每一个信息广播到每个客户机,你可以动态地优化,并且显著地降低负载。 有关Tomcat实现的更多详细信息,请参阅以下链接:


您实际上看到了两种不同的要求:

  • 负载平衡:为多个Web(或其他协议)服务器公开单个网络地址
  • 多台服务器之间的通信状态(消息)
  • 第一个要求很简单:使用硬件或软件负载平衡器,或者在多个Java服务器前面使用单个Apache web服务器

    第二个要求是问题

    让我们设想一个单一系统上的虚拟聊天服务器。当收到一条消息时,将解析该请求,并将新消息放入收件人的内存中。将需要处理常见的情况:例如,用户在会话中间注销。您还需要弄清楚如何将收到的消息传递回用户的浏览器。浏览器可以轮询(“为用户X在#N之后向我发送所有消息”),或者服务器可以使用多种技术之一推送接收到的消息。如果您有一个在Web服务器上运行的聊天服务器,这一切都应该很熟悉

    棘手的部分是:如何在多台机器上实现这一点?在我的脑海中,我可以想出两种方法来缩放OK:

    • 跟踪收件人所在的服务器。使用另一种传输机制将消息发送到该服务器,以便将其推入内存,就像发送者是本地的一样。请参阅“消息队列”或“企业服务总线”
    • 将消息处理与通信分离:为活动对话指定一个或多个服务器。让收件人服务器向这些服务器发送消息;使用通知机制(良好)或轮询(不太好)提醒收件人服务器有聊天消息等待发送。特点:使用分布式哈希表将邮件邮箱分发到服务器池;如果一台或多台服务器出现故障,DHT可以自动调整
    • 使用广播:如果收件人不是本地的,则每个服务器向所有其他服务器广播。每个服务器接收通知;只有与收件人在一起的人才能对其进行任何操作
    这里的关键是,您不能再使用多台机器之间的共享内存。您必须使用几种可能的机制之一在服务器之间移动消息。您不太可能为此使用通用的、开销相对较高的协议(如HTTP);有很多很好的工具效率更高,您可以在多个抽象层次上实现这一点,从使用Terracotta之类的共享缓存工具、JXTA之类的对等网络协议、ActiveMQ之类的企业服务总线,等等。这取决于您想在用户的浏览器上放置多少,您甚至可以直接在客户机系统上运行一些消息队列软件——有新消息的通知可以直接发送给用户,而不是发送到中间邮箱


    最明显的优化是支持一种机制,将具有活动会话的用户移动到同一台服务器,但这在大多数负载平衡机制中都不起作用。应该有一些方法来强制用户在特定服务器之间建立密切关系,但我想不出一个简单的方法。

    我也在搜索类似的内容。聊天服务器需要共享资源,像我们在网页上使用的负载平衡系统也帮不上忙。是否有聊天/状态服务器集群的框架?