`
tianyuzhu
  • 浏览: 24098 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

push or pull

阅读更多

无论是消息系统,还是配置管理中心,甚至存储系统,你都要面临这样一个选择,push模型 or pull模型?是服务端主动给客户端推送数据,还是客户端去服务器拉数据,一张图表对比如下:

push模型 pull模型
描述 服务端主动发送数据给客户端 客户端主动从服务端拉取数据,通常客户端会定时拉取
实时性 较好,收到数据后可立即发送给客户端 一般,取决于pull的间隔时间
服务端状态 需要保存push状态,哪些客户端已经发送成功,哪些发送失败 服务端无状态
客户端状态 无需额外保存状态 需保存当前拉取的信息的状态,以便在故障或者重启的时候恢复
状态保存 集中式,集中在服务端 分布式,分散在各个客户端
负载均衡 服务端统一处理和控制 客户端之间做分配,需要协调机制,如使用zookeeper
其他 服务端需要做流量控制,无法最大化客户端的处理能力。

 

其次,在客户端故障情况下,无效的push对服务端有一定负载。

客户端的请求可能很多无效或者没有数据可供传输,浪费带宽和服务器处理能力
缺点方案 服务器端的状态存储是个难点,可以将这些状态转移到DB或者key-value存储,来减轻server压力。 针对实时性的问题,可以将push加入进来,push小数据的通知信息,让客户端再来主动pull。

 

针对无效请求的问题,可以设置逐渐延长间隔时间的策略,以及合理设计协议尽量缩小请求数据包来节省带宽。

在面对大量甚至海量客户端的时候,使用push模型,保存大量的状态信息是个沉重的负担,加上复制N份数据分发的压力,也会使得实时性这唯一的优点也被放小。使用pull模型,通过将客户端状态保存在客户端,大大减轻了服务器端压力,通过客户端自身做流量控制也更容易,更能发挥客户端的处理能力,但是需要面对如何在这些客户端之间做协调的难题。

来自:淘宝JAVA中间件团队博客

 

 

分享到:
评论

相关推荐

    Push or Pull ?.md

    Push or Pull ?.md

    adb push不支持中文乱码的解决方案

    2.在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一问题就只有对adb工具的源代码进行修改,让adb对...

    G41D3+ 主板用 时钟芯片资料

    •2 - Differential pairs push-pull CPU @0.8V or @3.3V •6 - Differential pairs push-pull PCI-E @0.8V •1 - Differential pairs push-pull SATA @0.8V or PCI-E @0.8V •1 - Differential pairs push-pull DOT...

    dg-upload-app-action:将应用程序上载到DeployGate的操作(非官方)

    on: push or pull_request将此操作添加到步骤。 uses: jmatsu/dg-upload-app-action@<version> with: app_owner_name: <your> api_token: ${{ secrets.DEPLOYGATE_API_TOKEN }} # for example app_file_path: /path...

    SSH Project

    本资源是博文Eclipse搭建SSH框架项目的项目源代码。整合Struts2,Spring3,Hibernate3。

    resource-translator:一个GitHub Action,可自动创建翻译文件的机器翻译PR。 支持的文件格式包括.ini,.po,.restext,.resx,.xliff

    :globe_with_meridians: 机器翻译 一个GitHub Action,可自动创建翻译文件的机器翻译PR。 支持的文件格式包括: .ini ... Triggers the workflow on push or pull request # events but only for

    TL494datasheet

    The TL494 provides for push-pull or single-ended output operation, which can be selected through the output-control function. The architecture of this device prohibits the possibility of either ...

    kicadStepUp-cheat-sheet.pdf

    pcb Board - PULL a pcb Edge from a kicad_pcb Board, edit it in FC Sketcher and PUSH it back to kicad - PUSH & PULL 3D models positions between FreeCAD and KiCAD - ECAD / MCAD Collaboration and ...

    zeromq-4.2.1

     Ø  Smart patterns like pub-sub, push-pull, and router-dealer.  Ø  High-speed asynchronous I/O engines, in a tiny library.  Ø  Backed by a large and active open source community.  Ø  ...

    zeromq-4.1.5.zip

     Ø  Smart patterns like pub-sub, push-pull, and router-dealer.  Ø  High-speed asynchronous I/O engines, in a tiny library.  Ø  Backed by a large and active open source community.  Ø  ...

    Google Nexus 4 ToolKit v1.3.0

    * Push Files from your PC to your phone * Pull Files from your phone to your PC * Dump selected LogCat buffers to your PC * Dump BugReport to your PC * Set Files Permissions on your phone * Open new ...

    action-eslint::white_heavy_check_mark:在Pull请求中更改的文件上运行ESLint的GitHub Action

    push : branches : - master jobs : eslint : runs-on : ubuntu-latest steps : - uses : actions/checkout@v2 - uses : actions/setup-node@v2 with : node-version : ' 14 ' - run : npm ci # or yarn ...

    get-changed-files:获取在pull请求或push的提交中所有修改过的文件

    获取所有更改的文件 获取在请求请求或推送的提交中更改/修改的所有文件。 您可以选择获取所有更改... # Can be 'space-delimited', 'csv', or 'json'. # Default: 'space-delimited' format : ' ' 情境 以空格分隔获

    DIXml v4.0.0 D6-XE3 Full Source + Demo

    XML and HTML reading and writing, pull and push parser modes. XML and HTML document tree creation, traversal, load, and save. SAX interface. DTD validation. Encoding support for UTF-8, UTF-16, ISO-...

    leetcode下载-sooof_workspace:工作

    or git add --all git commit -m "first commit" git push -u origin master 更新: git pull: 更新当前分支(将本地的文件更新到最新) git pull origin master: 更新 origin remote 的 master 分支 git fetch: 获取...

    ds4a-project

    以防其他人更新了其更改: git pull 进行更改后,再次更新本地文件: git pull 推送更改以回购暂存文件以提交: git add file1.ipynb file2.csv or if you want to update all files git add . 提交更改: git ...

    germon-landing:“Преображення”教堂的登陆页面

    杰蒙·兰丁(Germon Landing) ... 安装 使用软件包管理器yarn或npm安装依赖项。 yarn ...git push --set-upstream origin feature/FEATURE_NAME 在您的分支的master分支上设置一个Pull Request。 执照

    GMNY-WFM-CaseStudy:在WWUMünster的“信息系统硕士”课程中实施“工作流管理”课程的案例研究

    GMNY-WFM-案例研究 在WWUMünster的“信息系统硕士... vor push definieren was gepusht werden soll git commit -m“ abc” =2。注释zu commit schreiben“ abc” git push origin XXX =3。在分支XXX中推送nach oben

    mutual-aid-networks

    欢迎使用互助网络! 该站点用于组织社区内的互助工作。 设置 1.总体开发工作流程如下: 分叉互助网络仓库 更改您的分叉存储库 将PR从分叉存储库发送到主要的互助网络存储库 2.合并对互助网络主存储库所...git push or

    ADBShell操作手册

    adb shell rm [options] <files or directory> 13 adb shell mkdir [options] <directory name> 15 adb shell touch [options] <file > 15 adb shell pwd 16 adb shell cp [options] <source> <dest> 16 adb shell ...

Global site tag (gtag.js) - Google Analytics