35 | 基础篇:C10K 和 C1000K 回顾
该思维导图由 AI 生成,仅供参考
C10K
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了C10K和C1000K问题,以及解决这些问题的方法。首先介绍了C10K问题的背景和关键解决方法,包括I/O模型优化和I/O多路复用。详细讨论了水平触发和边缘触发两种I/O事件通知方式,并对select、poll和epoll等I/O多路复用方法进行了比较和分析。随后提到了使用异步I/O的方式来处理大量并发请求,并指出了异步I/O的一些局限性。文章还探讨了C1000K和C10M问题,指出了解决这些问题的关键在于深度优化从应用程序到Linux内核、再到CPU、内存和网络等各个层次,特别是需要借助硬件来卸载原来通过软件处理的大量功能。最后,介绍了DPDK和XDP两种常见的机制,它们都能跳过内核协议栈,直接处理网络包,从而提高网络处理效率。整体而言,本文通过深入探讨C10K和C1000K问题,为读者提供了深入了解网络性能优化的知识。文章内容涵盖了从C10K到C1000K问题的演进,以及相应的解决方法,为读者提供了全面的网络性能优化知识。
《Linux 性能优化实战》,新⼈⾸单¥68
全部留言(53)
- 最新
- 精选
- Maxwell一台机器不是只有65536个端口吗,每个网络请求都需要消耗一个端口,这样大于65536个请求会不会导致端口不够用呢?
作者回复: 如果是只有一个IP地址的客户端,那的确是受限于端口数量。 不过,如果是服务器端,那可以接受的连接就多得多了(组合客户端IP+端口)。
2019-02-20544 - 挺直腰板老师,很多人都说并发数不能超过65536,假如访问服务器80端口,服务器ip是183.3.226.35这个,客户端ip是58.62.30.2,超过65536端口如何显示,是这样183.3.226.35 58.62.30.2:80?单机最大并发的连接数据是多少?谢谢!
作者回复: 注意区分客户端还是服务器端:客户端使用单个IP去访问服务器的时候,端口号数是最大限制;服务器端没有这个限制。
2019-03-31321 - Geek_9815f1老师,redis的采用水平触发的epoll。 nginx 采用 垂直触发的epoll 。所以epoll跟 触发方式无关。老师,你的一言一语对于小白 都是圣经, 好好斟酌
作者回复: 👍 还是要以文档为准
2020-07-21312 - 我来也[D35打卡] 09年那会,我所在公司的服务器端都是单进程+select. 后来把select换为了poll和epoll. 再后来还拆分成了多进程,N个网络收发层+M个业务处理层. 毕竟我们的情况是 业务处理的耗时远大于网络收发的耗时. 目前的网络收发层也只支持最大65530个并发连接,毕竟是单ip单端口的. 如果想支持更多并发连接,就另外再开一个进程. 并没有往C100K甚至是C1000K的方向上努力了.
作者回复: 其实并不是 65530,Linux使用五元组标志一个连接:协议、源IP、源端口、目的IP、目的端口。根据这些,你可以算下理论上最大支持的连接数。
2019-02-1228 - 9527没碰到单机一千万这么夸张的场景,想问下一千万连接这种场景下,一般机器是什么配置呢 按这么发展下去,以后会不会出现单机1亿连接,那样的话所有处理都得硬件来完成了吧
作者回复: 这在流量集中的场景是需要的,比如网关或者流量清洗这种安全系统上
2019-02-1136 - 深海极光老师你好,您说到epoll 的边缘触发只在文件描述符可读或可写事件发生时才通知,那么应用程序就需要尽可能多地执行 I/O,并要处理更多的异常事件,我有点不理解这个多执行IO是为什么?是指有一个文件描述符也就是链接可读或者可写时就通知应用程序一次,那么有100个链接同时都可读,就通知应用程序100次吗,应用程序拿到这100个都是可读的。并没有多的IO执行啥,还请老师解惑,谢谢!
作者回复: 因为一次读有可能不会读到所有数据,但这种情况不会有新的事件通知了
2019-03-195 - 杜嘉嘉老师,您好。我看IO模型这块老提到文件描述符,这个跟IO模型有啥关系呢?
作者回复: 还记得虚拟文件系统(VFS)吧,使用套接字接口的时候,也是要分配一个文件描述符,然后后续所有的I/O都通过这个文件描述符来操作(包括IO模型中要判断可读写状态)。
2019-02-225 - 科学Jia老师,问题1: DPDK和XDP,是不是在qps不能上去的情况下都可以采用的方案?问题2:DPDK和XDP是linux需要额外配置的工具么?
作者回复: 是的,都需要额外的开发
2019-03-044 - Tachone推荐陈硕的 muduo网络库,就是采用reator模式(epoll)+线程池实现的,写的非常好
作者回复: 嗯,不过现在网络库已经不是个大问题了,特别是新型的语言(比如 Go)都内置了很好用的网络库
2019-02-124 - shawn我理解,流量大于十万就该用集群了吧,一堆小型机的维护和开发成本应该小于一个大家伙吧
作者回复: 要看场景的,特别是流量集中的位置(比如数据中心的入口或出口处的应用)对 PPS 的要求还是很高的
2019-02-114