一 数据传输
1 传统数据从文件到网络的传输路径
1. 操作系统将数据从磁盘读入内核空间的pagecache中
2. 应用程序将内核空间中的数据读入用户空间缓冲区
3. 应用程序将数据写回内核空间的套接字缓冲区
4. 操作系统将数据从套接字缓冲区复制到NIC缓冲区(网卡),并发送到网络上
其中1,2,3,4步骤均发生了数据拷贝。
2,3步骤发生了系统调用。
也就是发生了4次拷贝,2次系统调用。
2 传统数据从文件到网络的传输路径图解

传统数据从文件到网络的传输路径图解
3 对传统数据传输的优化 --- sendfile

对传统数据传输的优化图解
2 推拉模式的选择
1. 如果选择broker向消费者push消息
1. 各种消费者的处理能力不同,有的处理性能高,有的处理性能低,如果broker在不了解消费者处理能力的前提下push消息,有可能导致消费者不堪重负。
2. 基于Push的系统必须选择立即发送请求,并且在不能感知下游消费者是否能马上处理的情况下发送。
如果倾向于低延迟的调整,这将导致每次只能发送单条消息,这非常浪费。
2. 如果选择消费者向broker pull消息
1. 消费者可以根据自己的消费能力来决定拉取消息,比较灵活,也可以保证系统的稳定性
2. pull模式可以引入批处理模式,一个基于Pull的设计消费者总是拉取日志中当前位置后所有有效的消息,
因此可以在不引入不必要的延迟的情况下得到最佳的批处理。
网友评论