宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > 高性能即时通讯技术(或者说互联网)并发连接问题的解决思路

高性能即时通讯技术(或者说互联网)并发连接问题的解决思路

2021-08-20

1、前言

对于更关注高性能即时通讯技术(或互联网编程)的开发者来说,应该都对C10K问题(即单机并发连接问题)有所了解。 “C10K”的概念最早由Dan在他的个人网站上发表,即出自他的经典著作《The C10K(英文PDF版,中文译本)》。

如你所料,近10年来,通过高性能网络编程技术领域众多开发者的努力,C10K问题已经得到很好的解决,大家也开始关注并着手解决未来十年的问题。正确的C10M问题(即单机1000万并发连接问题,C10M相关技术的讨论和学习将在本系列文章的下一部分开始,本文不再深入介绍)。

虽然C10K问题已经得到妥善解决,但对于即时通讯应用(或其他网络编程)的开发者来说,研究C10K问题还是有很大的价值的,因为技术的发展是有规律的,有线索可循。了解C10K问题及其解决方案,通过对他人的推论,或许能为你以后解决类似问题提供更多的参考思路和实践思路。而这正是写这篇文章的目的。

2、学习交3、C10K系列文章

本文是C10K系列题的第二篇,大致内容如下:

4、C10K 提问者

丹:软件工程师

目前在美国洛杉矶工作,目前受雇于公司。我从1978年开始从事计算机编程。我是.0的作者,管理员,也是(一个让gcc/编译器更容易使用的工具套件)的作者。发表著名的《The C10K》技术文章,是Java JSR-51规范的提交者网络编程技术实验2,参与了Java平台的NIO和文件锁的编译,参与了NAT穿越(P2P打洞)技术的描述在 RFC 5128 标准和定义中。

高性能即时通讯技术(或者说互联网)并发连接问题的解决思路(图1)

5、C10K 问题的根源

大家都知道,互联网的基础是网络通信。早期的互联网可以说是小团体的集合。互联网不够普及,用户也不多。一台服务器同时有100个用户在线,估计当时是大型应用,所以C10K是没有问题的。互联网的爆发应该是在www、浏览器和雅虎出现之后。最早的互联网叫做Web1.0。互联网的大部分使用场景是下载一个HTML页面,用户在浏览器中查看页面上的信息。这段时间没有C10K问题。

Web2.0 时代不同了。一方面,渗透率大幅提升,用户群呈指数级增长。另一方面,互联网不再是单纯的浏览万维网页面,逐渐开始交互,应用的逻辑也变得更加复杂。从简单的表单提交到即时通讯和在线实时交互,C10K的问题都体现出来了。向上。由于每个用户都必须与服务器保持TCP连接才能进行实时数据交互,因此像这样的网站同时的TCP连接数很可能超过1亿。

早期的腾讯QQ也面临C10K的问题,不过他们使用UDP的原始包交换协议来实现这一点。这个问题被绕过了。当然,过程一定是痛苦的。如果当时有技术,肯定会用TCP。众所周知,后来的手机QQ和微信都采用了TCP协议。

其实当时有异步模式,比如:/poll模式,这些技术都有一定的缺点:比如最大不能超过1024、poll,没有限制,但是每次接收数据,需要遍历每个连接,查看哪个连接有数据请求。

这时候,问题来了。原始服务器基于进程/线程模型。对于新的 TCP 连接,需要分配一个进程(或线程)。而进程是操作系统最昂贵的资源,一台机器不能创建多个进程。如果 C10K 必须创建 10,000 个进程,那么操作系统无法在单机上承担它(通常效率低下甚至完全瘫痪)。如果采用分布式系统,维持1亿用户在线需要10万台服务器,成本巨大。只有像雅虎这样的巨头!雅虎有财力购买这么多服务器。

基于以上考虑,如何突破单机性能的局限,是高性能网络编程必须直接面对的问题。这些局限和问题首先由Dan进行了总结总结,并首次系统地分析并提出了解决方案。后来,这种常见的网络现象和技术限制被称为 C10K 问题。

6、技术C10K问题解读

C10K 问题的最大特点是,如果一个程序设计得不好,其性能与连接数和机器性能之间的关系往往是非线性的。

高性能即时通讯技术(或者说互联网)并发连接问题的解决思路(图2)

例如:如果不考虑C10K问题,一个基于经典的程序在旧服务器上可以很好地处理1000并发吞吐量,但在2倍性能的新服务器上往往无法处理并发2000吞吐量。 这是因为当策略不当时,大量操作的消耗与当前连接数n线性相关。单个任务的资源消耗与当前连接数之间的关系将为 O(n)。服务程序需要同时处理数以万计的I/O,累积的资源消耗会相当可观,这显然会导致系统吞吐量与机器性能不匹配。

以上是典型C10K问题的技术方面。这也是为什么大多数开发者可以轻松实现相同功能的原因,但是一旦放到大并发场景中,初级和高级开发者的技术实现相同功能的实际应用效果就会体现出来。完全不一样。

所以,一些在大并发方面没有太多实践经验的技术同行实现了即时通讯应用等网络应用。所谓的理论负载声称可以支持数万、数十万甚至数百万的单机。情况经不起考验和考验。

7、C10K 问题的本质

C10K 问题本质上是操作系统问题。对于Web1.0/2.0时代的操作系统,传统的同步阻塞I/O模型是一样的,处理方式是per。并发10K和100的区别关键在于CPU。

创建的进程线程过多,数据拷贝频繁(缓存I/O,内核拷贝数据到用户进程空间,阻塞),进程/线程上下文切换消耗大,导致操作系统崩溃。这就是C10K问题的本质!

可以看出,解决C10K问题的关键是尽可能减少CPU等核心计算资源的消耗,从而挤压单台服务器的性能,突破C10K中描述的瓶颈问题。

8、C10K 问题解决讨论

解决这个问题,从纯网络编程技术来看,主要有两个思路:

8.1 思路一:每个进程/线程处理一个连接

这个想法是最直接的。但是,由于应用进程/线程会占用相当多的系统资源,并且多进程/线程的管理会给系统带来压力,因此该方案没有很好的可扩展性。

所以这个想法在服务器资源不够丰富的情况下是不可行的。即使资源足够丰富,效率也不够高。总之,这个思路的技术实现会造成资源占用过多网络编程技术实验2,扩展性差。

8.2 思路二:每个进程/线程同时处理多个连接(IO复用)

IO 多路复用可以分为很多技术实现。下面我们来一一看看以下实现的优缺点。

● 实现方法一:传统思维最简单的方法是将每个连接一个一个循环处理,每个连接对应一个。当他们都有数据时,这种方法是可行的。但是当应用程序读取某个文件数据失败时,整个应用程序会阻塞在这里等待文件句柄,即使其他文件句柄,也无法进一步处理。

实现总结:直接循环处理多个连接。

问题总结:任何文件的文件句柄不成功都会阻塞整个应用程序。

● 实现2:解决上述阻塞问题,思路很简单。如果我在阅读之前检查文件句柄的状态,我会处理它。这个问题解决了吗?所以有一个计划。使用结构告诉内核同时监视多个文件句柄。当文件句柄的状态发生变化(例如,句柄从不可用变为可用)或超时时,调用将返回。之后,应用程序可以使用它来一一检查哪个文件句柄状态发生了变化。这样,小规模的连接问题不大,但是当连接数大(文件句柄数大)时,一一查看状态就很慢。因此,托管句柄通常有一个上限 ()。同时,在使用中,因为只有一个字段记录关注点和发生,所以每次调用前都要重新初始化结构体。

高性能即时通讯技术(或者说互联网)并发连接问题的解决思路(图3)

intselect(intnfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,structtimeval *timeout);

实现总结:如果有连接请求到达,再次检查处理。

问题总结:句柄上限+反复初始化+一一检查所有文件句柄状态效率不高。

● 实现方法三:poll主要解决的前两个问题:将需要关注的事件通过数组传递给内核,消除文件句柄的上限,用不同的字段标记感兴趣的事件和发生的事件避免重复初始化。

实现总结:设计新的数据结构,提高使用效率。

问题总结:一一查看所有文件句柄的状态效率不高。

● 实现 4:由于一一检查所有文件句柄的状态效率不高,因此很自然地在调用返回时仅向应用程序提供状态更改的文件句柄(最可能的数据),并且检查的效率是不是要高很多?这样的设计,适合大规模的应用场景。实验表明,当文件句柄数超过10个时,性能会优于和poll;当文件句柄数达到10K时,已经超过和轮询两个数量级。

实现总结:只返回状态改变的文件句柄。

问题总结:依赖特定的平台()。

因为它是互联网公司中使用最多的操作系统,所以它已经成为C10K、高并发、高性能、异步和非阻塞技术的代名词。启动,启动,启动 IOCP,启动 /dev/poll。这些操作系统提供的功能旨在解决C10K问题。该技术的编程模型是异步非阻塞回调,也可以称为事件驱动、事件轮询()。 ,, Node.js 这些都是时代的产物。

● 实现5:由于,IOCP每个接口都有自己的特点,程序移植非常困难,所以需要对这些接口进行封装,使其易于使用和移植,库就是其中之一。跨平台,封装底层平台的调用,提供统一的API,但底层会自动选择不同平台上合适的调用。根据官网介绍,该库提供了以下功能: 当文件描述符的特定事件(如可读、可写或错误)发生,或发生定时事件时,会自动执行用户指定的回调函数来处理事件。目前,支持以下接口 /dev/poll,,,, poll 和 。内部事件机制完全基于所使用的接口。所以它很容易移植,也使得它的可扩展性很容易。目前,它已在以下操作系统中编译通过:BSD、Mac OS X 和.使用该库进行开发非常简单,易于移植到各种unix平台。使用该库的简单程序如下:

9、参考资料

[1] 为什么QQ用的是UDP协议而不是TCP协议?

[2]手机IM/推送系统的协议选择:UDP还是TCP?

[3] 高性能网络编程经典:《The C10K(英文)》【附件下载】

[4] 高性能网络编程(一):单台服务器可以有多少并发TCP连接

[5]《C10K(英文在线阅读、英文PDF下载、中文翻译)》

[6] 搜狗实验室技术交流文档《C10K问题讨论》().pdf (350.83 KB)

[7]【浅显易懂】深入理解TCP协议(上):理论基础

[8] 【浅显易懂】深入理解TCP协议(二):RTT、滑动窗口、拥塞处理

[9]《TCP/IP详解第一卷:协议(在线阅读版)》

Tag: 文件句柄 poll 句柄
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • php开源cms自助建站系统CMS系统是什么?CMS程序1.的建站程序开源cms php建站系统
  • php开发从入门到精通为什么程序员都喜欢黑php?这个嘛!(组图)php开发从入门到精通pdf下载
  • sql编程语言 30岁转换居然也想混饭吃,不把我们放在眼里?
  • php高级程序设计:模式、框架与测试数据成搜索频率最高词汇,2022或将继续占主导 php框架高级编程
  • php模板引擎技术1.php常用的算是一种很老的PHP模板引擎php模板引擎排名
  • php的内存管理机制与垃圾回收机制腾云网络教你看
  • PHP编程快速实现数组去重的方法,结合实例形式分析
  • php域名重定向代码利用301永久重定向来高速搜索引擎,我的网站内容搬家了php代码里隐藏域名
  • php开源网站管理系统一个的轻量级PHP开发框架,支持基于命令行的应用开发深喉咙php免费开源企业建站系统
  • 五个最常用的PHP开发框架为什么人们喜欢TP框架?

相关

如何修复被黑客篡改的网站代码与数据库?入侵迹象与范围评估指南

如何修复被黑客篡改的网站代码与数据库?入侵迹象与范围评估指南

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

微信支付SDK漏洞曝光!谁会用到它?商家必看

大会现场蒋涛调查参会者,柳峰解析LBS与智能客服开发重难点?

大会现场蒋涛调查参会者,柳峰解析LBS与智能客服开发重难点?

如何查看php版本?多种方法助你快速知晓

如何查看php版本?多种方法助你快速知晓

PHP格式化:提升代码质量与协作效率的关键规则

如何查看虚拟主机上的 PHP 版本?这篇文章告诉你

Linux 系统管理员和 web 开发者必知:如何查看 PH

Linux 系统管理员和 web 开发者必知:如何查看 PH

免费开源的轻量级 PHP 开发框架 ThinkPHP,遵循

FastAdmin 开发基础管理插件步骤及环境配置详解

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们