无论是消息系统,还是配置管理中心,甚至存储系统,你都要面临这样一个选择,push模型 or pull模型?是服务端主动给客户端推送数据,还是客户端去服务器拉数据,一张图表对比如下:
|
push模型 |
pull模型 |
描述 |
服务端主动发送数据给客户端 |
客户端主动从服务端拉取数据,通常客户端会定时拉取 |
实时性 |
较好,收到数据后可立即发送给客户端 |
一般,取决于pull的间隔时间 |
服务端状态 |
需要保存push状态,哪些客户端已经发送成功,哪些发送失败 |
服务端无状态 |
客户端状态 |
无需额外保存状态 |
需保存当前拉取的信息的状态,以便在故障或者重启的时候恢复 |
状态保存 |
集中式,集中在服务端 |
分布式,分散在各个客户端 |
负载均衡 |
服务端统一处理和控制 |
客户端之间做分配,需要协调机制,如使用zookeeper |
其他 |
服务端需要做流量控制,无法最大化客户端的处理能力。
其次,在客户端故障情况下,无效的push对服务端有一定负载。
|
客户端的请求可能很多无效或者没有数据可供传输,浪费带宽和服务器处理能力 |
缺点方案 |
服务器端的状态存储是个难点,可以将这些状态转移到DB或者key-value存储,来减轻server压力。 |
针对实时性的问题,可以将push加入进来,push小数据的通知信息,让客户端再来主动pull。
针对无效请求的问题,可以设置逐渐延长间隔时间的策略,以及合理设计协议尽量缩小请求数据包来节省带宽。
|
在面对大量甚至海量客户端的时候,使用push模型,保存大量的状态信息是个沉重的负担,加上复制N份数据分发的压力,也会使得实时性这唯一的优点也被放小。使用pull模型,通过将客户端状态保存在客户端,大大减轻了服务器端压力,通过客户端自身做流量控制也更容易,更能发挥客户端的处理能力,但是需要面对如何在这些客户端之间做协调的难题。
来自:淘宝JAVA中间件团队博客
分享到:
相关推荐
Push or Pull ?.md
2.在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一问题就只有对adb工具的源代码进行修改,让adb对...
3. **Push Or Pull的思考**: - 数据获取有两种方式:推模式(Push)和拉模式(Pull)。 - 根据查询效率,推模式更适合Feed系统,因为它能更有效地处理大量实时数据。 4. **Feed System构成**: - Dispatch:...
Represents the push or pull exerted on an object. - **Frequency**: Measured in hertz (Hz). Describes the number of occurrences of a repeating event per unit time. - **Impulse**: Measured in newton-...
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框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个"SSH Project"是一个使用Eclipse开发环境搭建的项目,旨在演示和实践如何将这三个框架有效地整合在一起,以实现...
:globe_with_meridians: 机器翻译 一个GitHub Action,可自动创建翻译文件的机器翻译PR。 支持的文件格式包括: .ini ... Triggers the workflow on push or pull request # events but only for
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 ...
Ø 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. Ø ...
Ø 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. Ø ...
git pull origin master --allow-unrelated-histories ``` 这个命令允许合并两个不相关的仓库历史。 #### 4. 更新项目并推送 完成上述命令后,Idea可能会提示你更新项目。点击`Update Project`或使用快捷键`Ctrl ...
当执行`adb push`或`adb pull`时,需要确保不在shell环境中,使用`adb -s 设备编号 push`或`adb -s 设备编号 pull`。如果出现“device not found”的错误,检查数据线连接是否稳定。 **三、ADB常用命令** 1. **...
2. **问题:not a git repository (or any of the parent directories): .git** 这个错误表示当前目录或其任何父目录下没有找到`.git`文件,即Git仓库的标志。这可能是由于你不在正确的项目目录下。 解决方法: ...
* 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 ...
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 ...
获取所有更改的文件 获取在请求请求或推送的提交中更改/修改的所有文件。 您可以选择获取所有更改... # Can be 'space-delimited', 'csv', or 'json'. # Default: 'space-delimited' format : ' ' 情境 以空格分隔获
* device commands:包括push、pull、sync等命令,用于与Android设备进行文件传输和同步。 知识点:ADB命令行工具提供了许多有用的命令和选项,用于管理和调试Android设备。 4. 使用ADB文件浏览器工具:可以下载...
需要配置用户信息(`git config --global user.name "Your Name"`和`git config --global user.email "youremail@example.com"`),然后通过`git clone`克隆远程仓库,`git pull`获取更新,以及`git push`推送本地...
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-...