Optimization 在拉式通知和推式通知之间选择折衷方案

Optimization 在拉式通知和推式通知之间选择折衷方案,optimization,push-notification,architecture,Optimization,Push Notification,Architecture,我正试图找到解决下列问题的办法 我有N个客户端,数量固定在5000到6000之间,还有一个服务器 此服务器有一个本地客户端缓存,用于存储每个客户端的一些数据 public class Client { public bool inGroup; } 此服务器定期查询某些数据库,并获取这些客户端的列表,并更新其本地缓存。每当发现差异时,客户机数据只是缓存和来自数据库的新数据之间的一个布尔值,它必须通知特定的客户机 现在我不知道是应该实现基于拉还是基于推的解决方案。 如果选择PULL,则意味着

我正试图找到解决下列问题的办法

我有N个客户端,数量固定在5000到6000之间,还有一个服务器

此服务器有一个本地客户端缓存,用于存储每个客户端的一些数据

public class Client
{
  public bool inGroup; 
}
此服务器定期查询某些数据库,并获取这些客户端的列表,并更新其本地缓存。每当发现差异时,客户机数据只是缓存和来自数据库的新数据之间的一个布尔值,它必须通知特定的客户机

现在我不知道是应该实现基于拉还是基于推的解决方案。 如果选择PULL,则意味着每个客户机都会在大约30分钟的固定时间间隔内询问服务器。这意味着每个请求之间的间隔为30/6000=300毫秒

如果选择基于推送的解决方案,则意味着服务器将按时间间隔查询数据库,并且只推送到特定的客户端。现在的问题是,每个客户端也将成为服务器,因此服务器还必须存储一个IP-s和端口表

客户端的工作时间也类似,因此这也意味着在目标时间会出现峰值,每个客户端都会发送其IP和端口,以便服务器检查其是否被修改

还有其他中间解决方案吗?如果不是,那么一个好的解决方案应该考虑什么:

客户机的数量是相当稳定的5000-6000 客户端IP和端口通常不会更改。 如果基于拉动,客户端将每30分钟查询一次服务器 服务器将每1分钟查询一次数据库,如果基于推送,则推送到目标客户机
中间的解决方案是使用。客户端仍然发出轮询请求,如果有通知等待此客户端,服务器将立即返回该请求。但是如果没有通知,请求会被阻止一段时间,比如说两分钟。如果在此期间有新的通知,则客户端请求将被取消阻止并返回新数据。否则,请求在两分钟超时后返回空结果并发出新请求

这是许多高规模服务使用的方法,例如