IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 网络编程 - 网络连接,请求,进程/线程的关系 - 学习/实践 -> 正文阅读

[系统运维]网络编程 - 网络连接,请求,进程/线程的关系 - 学习/实践

1.应用场景

主要用于理清网络连接,请求,进程/线程的关系,以及qps, tps, 吞吐量/率之间的关系。

2.学习/操作

1.文档阅读

网络编程原理:一个字符的互联网之旅_穿素白衫的少年的博客-CSDN博客

2021-03-22 - 数据 - 系统/程序/服务/网络 - 性能数据/性能指标收集_穿素白衫的少年的博客-CSDN博客

高性能 - 单服务器高性能模式[网络模型]及性能对比 - 学习/实践_穿素白衫的少年的博客-CSDN博客

计算机网络 - 网络I/O模型 - 学习/实践_穿素白衫的少年的博客-CSDN博客

https://blog.csdn.net/william_n/article/details/124629946

2.整理输出

一定要结合下面这篇文章以及其中的补充部分,思考汇总

高性能 - 单服务器高性能模式[网络模型]及性能对比 - 学习/实践_穿素白衫的少年的博客-CSDN博客

问题目录

1. 连接,请求,进程/线程之间的关系

以及连接分为半连接,就绪连接,活动连接。?

供信息汇总:

18 | 单服务器高性能模式:PPC与TPC-极客时间

网友-咬尾巴的蛇

很感谢分享,我想问下 就是我开一个tomcat,支持tcp请求,然后什么都不做处理,同时有几百个请求是后面连接就进不来了吗,我是新手才开始架构这块,希望能帮忙解释下,非常感谢

作者回复: tomcat应该不是ppc的模式,如果你找一个ppc的服务器,连接满了后新的连接进不来,但旧的连接发送请求是没问题的

个人问题:

后面的连接进不来,是否会出现报错,是由服务端来决定如何处理的?TBD

MySQL似乎会报错: To many connections

确实是MySQL本身报错,还是由PDO扩展进行的报错?TBD

网友-互联网老辛

单台数据库服务器可以支撑多少并发?单台nginx 可以支撑多少呢

作者回复: nginx反向代理可以达到3万以上,具体需要根据业务和场景测试

个人补充问题:

请问,这个并发是指并发连接还是并发请求呢。
另外,关于连接超时,这个通常是由谁来做控制呢?

网友-熊猫酒仙

单方close和双方close应该是全双工与半双工的区别,连接仍然还存在的。 ppc/tpc比较适合系统中担当路由器或容器角色的部分,像nginx,甚至像mongodb集群也有router。 感觉一些部署容器的线程池,应该属于tpc范畴!

作者回复: close是减少文件描述符引用计数,当socket的文件描述符引用计数为0时,操作系统底层会执行连接关闭操作,全双工和半双工是shutdown操作。 路由器恰恰不适合ppc/tpc,nginx也不是这种模式

网友-盘尼西林

怎么理解常量连接 海量请求。 如果请求多的话,连接还会是常量么?

作者回复:

常量连接海量请求:100个连接,每个连接每秒发10000个请求,例如数据库

海量连接常量请求:100000个连接,每个连接每秒发1个请求,例如nginx

天外来客

主要考察连接数,因单机的fd 是有限的,可根据并发连接数考虑是否部署集群!

作者回复: fd不是关键,关键是进程或者线程数量太多,所占资源和上下文切换很耗费性能

网友-siwei

同一页面发起多次ajax请求是一个连接还是多个连接?

作者回复: ajax发的是HTTP请求,所以你要看你具体的HTTP协议版本是1.0还是1.1还是HTTP/2

个人补充:

持久连接在 HTTP/1.1 中是默认开启的,所以你不需要专门为了持久连接去 HTTP 请求头设置信息,如果你不想要采用持久连接,可以在 HTTP 请求头中加上Connection: close。目前浏览器中对于同一个域名,默认允许同时建立 6 个 TCP 持久连接。

极客时间,使用的http协议基本都是1.1 和 2.0, 打开开发者工具,查看network就可以知道,另外,也可以看到很多请求走的是统一连接,从Connection ID就可以知道。

插入补充:

这里的连接是基于TCP传输协议,如果是UDP协议,没有连接的过程,而是直接传输数据,不保证可靠输出。具体要对比TCP与UDP的区别。

29 | HTTP/1:HTTP性能优化-极客时间

30|HTTP/2:如何提升网络速度?-极客时间

31|HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络-极客时间

一段话总结

TBD

2. 网络模型有哪些?出现的原因?解决的问题?

计算机网络 - 网络I/O模型 - 学习/实践_穿素白衫的少年的博客-CSDN博客

18 | 单服务器高性能模式:PPC与TPC-极客时间

临时插入,供参考:

DFighting

看大家的评论,对aio、bio和nio讨论的比较多,我也来凑个数: 请求到达服务器到最终处理完毕可以分为3个过程,接受请求+系统处理+结果返回,其中需要切换线程写作的是请求接受后,在系统处理这段时间,连接线程如何做: bio:阻塞调用等待系统处理完毕 nio:不阻塞调用,不断查询结果,其实从结果上来看依然是阻塞等待的一种,只不过是主动点 io复用:一个连接同时处理多个io请求,本质上还是阻塞,不过由多个线程同时阻塞等待转为一个线程阻塞,等待多个io调用结果 aio:连接请求和处理请求完全异步,连接交给系统处理以后,我就可以去处理下一个连接,等待系统处理结果完毕以后,发送消息或者信号异步发送结果返回 其实从本质以上来看,阻塞和非阻塞这两种性能差异感觉不大,多路复用虽然也是阻塞但是它复用了阻塞线程,提高了性能。异步io才是真正实现了连接线程和系统处理线程的并发执行。 以上是我自己的了解,如有不正确的地方,欢迎指正和探讨

作者回复: 异步io性能相比io复用没有明显优势,但操作系统设计比较复杂,目前来看:Linux上主流的是epoll io复用,windows上是IOCP的异步io

19 | 单服务器高性能模式:Reactor与Proactor-极客时间

最终 Reactor 模式有这三种典型的实现方案:

单 Reactor 单进程 / 线程。

单 Reactor 多线程。

多 Reactor 多进程 / 线程。

以上方案具体选择进程还是线程,更多地是和编程语言及平台相关。

例如,Java 语言一般使用线程(例如,Netty),C 语言使用进程和线程都可以。例如,Nginx 使用进程,Memcache 使用线程。

。。。


单 Reactor 单进程的方案在实践中应用场景不多,只适用于业务处理非常快速的场景,目前比较著名的开源软件中使用单 Reactor 单进程的是 Redis。

需要注意的是,C 语言编写系统的一般使用单 Reactor 单进程,因为没有必要在进程中再创建线程;而 Java 语言编写的一般使用单 Reactor 单线程,因为 Java 虚拟机是一个进程,虚拟机中有很多线程,业务线程只是其中的一个线程而已。

一段话总结:

TBD

3.?C10K

https://blog.csdn.net/william_n/article/details/124629946

一段话总结:

TBD

4. MySQL, Memcached, Redis, Apache,?Nginx,ES,??Kafka, RocketMQ, RabitMQ

是如何处理连接问题的,以及各自采用的网络模型是怎样的,考虑的原因,优缺点? -- 待汇总为表格

临时插入:

18 | 单服务器高性能模式:PPC与TPC-极客时间

网友-Hanson

如果针对自内部系统,是否使用长链接性能损耗较低,毕竟频繁建链拆链性能损耗还是不小的,尤其是TLS的情况下

作者回复: 内部系统长连接多,例如各种中间件,数据库.

网友-馒头

理论上可以理解,如果有实际场景分析配合一起讲解就完美啦

作者回复: 可以看看apache服务器不同运行模式

19 | 单服务器高性能模式:Reactor与Proactor-极客时间

单 Reactor 单进程的方案在实践中应用场景不多,只适用于业务处理非常快速的场景,目前比较著名的开源软件中使用单 Reactor 单进程的是 Redis。

prethread确实可以,mysql就是这种模式

目前著名的开源系统 Nginx 采用的是多 Reactor 多进程,采用多 Reactor 多线程的实现有 Memcache 和 Netty。

我多说一句,Nginx 采用的是多 Reactor 多进程的模式,但方案与标准的多 Reactor 多进程有差异。具体差异表现为主进程中仅仅创建了监听端口,并没有创建 mainReactor 来“accept”连接,而是由子进程的 Reactor 来“accept”连接,通过锁来控制一次只有一个子进程进行“accept”,子进程“accept”新连接后就放到自己的 Reactor 进行处理,不会再分配给其他子进程,更多细节请查阅相关资料或阅读 Nginx 源码。

产品/组件网络IO模型优点缺点补充
MySQLprethread
Memcached多Reactor 多线程
Redis单Reactor 单线程因为基于内存操作,单次操作非常快,这作为前提,才可以使用这种方式,否则很难达到高性能。
Apache
Nginx多Reactor 多进程Nginx 采用的是多 Reactor 多进程的模式,但方案与标准的多 Reactor 多进程有差异。具体差异表现为主进程中仅仅创建了监听端口,并没有创建 mainReactor 来“accept”连接,而是由子进程的 Reactor 来“accept”连接,通过锁来控制一次只有一个子进程进行“accept”,子进程“accept”新连接后就放到自己的 Reactor 进行处理,不会再分配给其他子进程,更多细节请查阅相关资料或阅读 Nginx 源码。
ES
Kafka
RocketMQ
RabitMQ

后续补充

...

3.问题/补充

1. 网络编程模型,最重要的硬件资源:

从理论上来说,网络模型的核心性能部件就是 CPU,因此如下数据是具备参考意义的

11 | 多任务:进程、线程与协程-极客时间

2. Wilson

“系统中有大量的 IO 请求,大部分的 IO 请求并未命中而发生调度。”老师,这句话我不是很理解,能解释一下吗

作者回复: 在高并发的网络服务器中,有大量的执行体都处在 io 请求中,并且 io 的数据还没有准备好,所以这些执行体 io 请求不可完成,只能让出 cpu 时间。

3. Sylh -- Nginx相关

https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/

官方文档里面的,我看就是说是多进程的

作者回复: https://linux.cn/article-5681-1.html?pr 你可以仔细看一下中文版的

4.参考

参见文档阅读列表

后续补充

...

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 12:06:11  更:2022-05-19 12:06:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:45:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码