• 互联网架构设计中的poll和push


    poll方式
    poll方式,也称为轮询,是大家都比较熟悉的一种数据同步方式,客户端定期去ping查询服务器,确定是否有需要的数据。例如,软件更新模块,客户端软件需要定期去查询官方网站,判断当前是否有更新的版本,如果有就提醒用户进行升级。邮件客户端,需要定期查询邮件服务器,查询是否有新的邮件。RSS阅读器,也是需要不断的查询rss地址的状态,如果有更新,就将数据拿回来。

    当服务器没有数据的时候,poll方式会浪费大量的带宽。 为了降低带宽,通常是采用减低poll的频率来实现的,这就导致了消息的长延迟,实时性不高。像gmail的POP3邮件检查间隔从10分钟到1小时不等。

    push方式
    poll的问题在于很多情况下,通信信道是单向的。为了解决poll的问题,可以将通信信道设计为双向的,这样就可以服务器采用push的方式主动向客户端进行数据同步了。双向通信信道设计,考虑到要穿透NAT和防火墙,很多实现采用长连接。例如各种IM的实现:MSN是TCP的长连接,QQ是UDP模仿的长连接,GTALK是HTTP模仿的长链接。

    push方式,服务器主动向客户端推送数据。当前实现push方式有两种方法:
    1. 客户端首先连接到服务器,并维持长连接
    2. 服务器能够直接访问到客户端,不需要长连接
    在国内NAT和firewall遍地都是的情况下,第2种方法不是很可行,但是对于一些企业应用,这种方法还是不错的,比如后面提到的pubsubhubbub。

    但是push方式,通常需要长连接,对于服务器端其实也是一个不小的压力,虽然现在C10K问题得到了比较好的解决,但是对于一些大规模互联网应用来讲,用户数是数以亿计的,单单是维持TCP连接,就需要太多的服务器。因此,除了一些实时性要求比较高的应用,现在push方式使用的范围还不是很广,例如push方式在IM、服务器监控等领域都有应用。

  • 相关阅读:
    POJ 1222 高斯消元更稳
    Maven与Eclipse使用中遇到的问题解决之道
    Java并发之任务的描述和执行
    XMemcached简单使用示例
    Java的容器类小结
    Java系统属性与Preferences API的简单介绍
    你知道自己执行的是哪个jre吗?
    Log4J配置文件详解
    Java日志工具之SLF4J
    Java日志工具之Log4J
  • 原文地址:https://www.cnblogs.com/henryhappier/p/1689716.html
Copyright © 2020-2023  润新知