首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

理解了实现再谈网络性能-202202更新

前端 23.56MB 26 需要积分: 1
立即下载

资源介绍:

理解了实现再谈网络性能-202202更新
理 解 了 实 现 再 谈
⽹ 络 性 能
开 发 内 功 修 炼 之 ⽹ 络 篇
张 彦 ⻜
最后更新时间:2022-02-01
添加⽹络包发送过程分析
Githubhttps://github.com/yanfeizhang/coder-kung-fu
技术群:加作者微信 zhangyanfei748527,我来拉⼤家!
作者简介
⼤家好,我是张彦⻜,⼤家都喜欢称呼我⻜哥。我于 2010 7 ⽉从⻄北⼤学计算机学院硕⼠
毕业,之后⼀直混迹于帝都。刚毕业时因为户⼝的问题去了⼀家⼴播电视软件⻰头公司,但
按捺不住对互联⽹的向往,在 2011 年就跳槽去了腾讯。后来随着腾讯和搜狗的战略联姻,被
⽼板连⼈带业务⼀并注⼊到搜狗。现在在搜狗任专家开发⼯程师,负责 PC 浏览器、搜狗⼿
机助⼿等产品的后端技术。
我在这⼗多年的⼯作中有不少的技术思考,因此创办了「开发内功修炼」技术号,分别在微
信公众号和知乎两个平台发布。这本电⼦书是我之前所发布的⽹络相关⽂章的⼀个总结,在
⽹络⽂章的基础上理顺了整本电⼦书的架构,也添加了⼀些⽹络开发优化建议、实际问题分
析等章节。
⻢上 35 岁,我该不该焦虑
之前⽹络在爆炒⼀篇标题为《互联⽹不需要中年⼈》,疯狂渲染 35 岁的码农的前程问题,制
造焦虑。本来我觉得这个事情应该只是媒体博眼球的⼀个炒作⽽已。不过恰恰最近⾯试了有
70 多⼈,其中有很多⼯作 7, 8 年以上的的同学。
这些⼈⾥基本上可以⾮常明确地划分成两类。第⼀类是虽然⼯作了 7, 8 年以上了,但是所有
的经验都集中在业务层。换句话说,并不是有 7 - 8 年经验,⽽是⼯作了 7 - 8 年⽽已。稍微
深⼊问⼀点性能相关的问题都没有好的思路,技术能⼒并没有随着⼯作年限的增⻓⽽增⻓。
也确实为这种类型的同学的前途感到担忧。另外⼀类同学都是除了业务的开发以外,还会额
外抽时间注重⾃⼰的技术积累,成⻓的就⽐较好,对于他们我觉得别说 35 岁了,45 岁也仍
然会是团队的中流砥柱。
对于第⼀类同学来讲,技术成⻓过慢也不完全是他们⾃⼰的原因。现在国内的开发环境中都
存在着⼀个普遍的⽭盾,那就是排期过满的需求开发和需要⼤把时间去磨练技术的⽭盾。
期过满导致开发同学平时绝⼤部分的时间都是在处理各种各样的业务逻辑和 bug 。很多同学
的时间全部被这种需求吃掉了,导致没有想法或精⼒去提升⾃⼰的底层技术能⼒,导致技术
level 并没有随着⼯作年限⽽同⽐增⻓。
︎︎︎︎ udp_rcv 平时⼤家都是⽤各种语⾔进⾏业务逻辑的代码编写,⽆论你⽤的是 PHPGo、还
Java,都是属于应⽤层的范畴。但是应⽤层是建⽴在物理层和内核层之上的。如果遇到⼀
些性能问题的时候,很可能需要你对底层有⾜够深的理解,才能够有效优化性能或排除线上
故障。内核和物理层的知识往往⼜⽐较难吃透,不投⼊⾜够多的时间是难有⼤的突破。
我把在应⽤层的技术能⼒称之为外功,把 Linux 内核、设备物理结构称之为内功。我想⼤家的
外功能⼒已经都⾜够优秀了,但是⼀部分同学的内功能⼒却严重不⾜。
我的技术号的名称之所以命名为开发者内功修炼,就是想把我在内核、物理层上的⼀些理解
思考总结分享给⼤家,帮助这些同学提升⾃⼰的技术⽊桶短板。
在本书中,我会从应⽤层的问题出发,深⼊到 Linux 中进⾏分析。帮助⼤家提升对底层的理
解,加强你的技术深度,也为你的中年焦虑症送上⼀剂良药。
⽬前业界技术⽂章的问题
相信很多同学也都保持着在互联⽹上进⾏学习的习惯,我但我觉得⽬前⼤多数的技术类⽂章
还是太偏向于各种花拳绣腿了。
⾼性能的 PHP 异步⽹络通信引擎 swoole 的作者韩天峰说过,很多程序员职业规划的⽂章,
上来就是 LinuxPHPMySQLNginxRedisMemcachejQuery 这些,然后就直接
上⼿搭环境、做项⽬,中级就是学习各种 PHP 框架和类库,⾼级阶段就是 MySQL 优化、
PHP 内核与扩展、架构设计这些了。这些⽂章都存在⼀个严重的缺陷,不重视基础。就好⽐
练武功,只求速成,不修炼内功和⼼法,只练各种招式,这样练出来的⾼⼿能⾼到哪⾥去?
事实上,码农圈⾥的⽜⼈⽐如韩天峰,⽐如 PHP7 作者⻦哥,他们都具备⾮常⾮常扎实的基
础,他们之所以⽜,并不是他们掌握的花拳绣腿的功夫多,⽽是内功⾮常⾮常深厚。举个⼩
例⼦,⻦哥在 PHP7 中把 HashTable 结构体从 72 字节压缩到了 56 字节,表⾯看起来不⼤的
优化,实际上是成倍的性能提升。因为 CPU 在向内存要数据的时候是以 Cache Line 为单位
进⾏的,⼀个 Cache Line 64 字节。56 字节可以⼀次请求搞定,⽽原来的 72 字节则需要
两次。另外就是 L1/L2/L3 的命中率也会提升很多,这个对性能的帮助更⼤。
内功它不帮助你掌握最新的开发语⾔,也不教会你时髦的框架,也不会带你⾛进⽕热的⼈⼯
智能。但是我相信它是你成为⼤⽜的必经之路。我简单列⼀下锻炼内功的好处:
1)内功⽅⾯的技术⽣命周期⻓。Linux 操作系统 1991 年就发布了,现在还是发展的如⽇中
天。对于作者 Linus,我觉得他也有年龄焦虑。但他可能焦虑的找不到接班⼈。反观应⽤层的
⼀些技术尤其是很多的框架,⽣命周期能超过⼗年我就已经觉得他很⽜叉了。如果你的精⼒
全部押宝在这些⽣命周期很短的技术上,你说能不焦虑吗!所以我觉得戒掉浮躁,踏踏实实
练好内功打好是你对抗中年焦虑的解药之⼀。
2)内功深厚的⼈理解新技术⾮常快。拿我⾃⼰来举两个⼩例⼦吧。我其实没怎么去翻过
kafka 的源码。但是当我研究完了内核是如何读取⽂件的、内核处理⽹络包的整体过程后,
就秒懂了 kafka 在⽹络这块为啥性能表现很突出了。另外⼀个是当我理解了 epoll 的内部实
现以后,回头再看 Golang net 包,才切切实实看懂了地球上绝顶精妙的对⽹络 IO 的封
装。所以 Linux 内核你真的弄懂了的话,再看应⽤层的各种新技术就犹如带了透视镜⼀般,直
接看到⻣骼。
3)内核提供了优秀系统设计的实例。Linux 作为⼀个千锤百炼的系统,其中蕴含了⼤量的世
界顶级的设计和实现⽅案。平时我们在⾃⼰的业务开发中,在编码之前也需要先进⾏设计。
⽐如我在刚⼯作的时候负责的⼀个数据采集任务调度,其中的实现就是部分参考了操作系统
进程调度⽅案。再⽐如如何在管理海量的连接的情况下仍然能⾼效发现某⼀条连接上的 IO
件,epoll 内部的红⿊树 + 队列的组合可以提供给你⼀个很好的参考。这种例⼦还有很多很
多,总之如果能将 Linux 的某些优秀实现,搬到你的系统中会极⼤提升你的项⽬的实现⽔平。
时髦的东⻄终究会过时,但扎实的内功能⼒将会伴随你的⼀⽣。只有具备了深厚的内功底
蕴,你才能在你的发展道路上⾛的更稳、⾛的更远。
⻜哥深⼊研究⽹络的出发点
其实我在刚⼯作前⼏年对计算机⽹络的理解也是不深的。
有⼈说,学习⽹络就是在学习各种协议,这种说法其实误导了很多的⼈。提到计算机⽹络的
知识点,你肯定也⾸先想到的是 OSI 七层模型、IPTCPUDPHTTP 等等。关于 TCP 再多
⼀点你也会想到三次握⼿、四次挥⼿、滑动窗⼝、流量控制。关于 HTTP 协议就是报⽂格式、
GET/POST,状态码、Cookie/Session 等等。
但是我的这些知识却不能帮我清除我在⼯作中的如下⼏个疑惑。
1)有⼀次我们运维找过来,说某某⼏台线上机器上出现了 3 万多个 TIME_WAIT,不⾏了得赶
紧处理哈。后来他帮我们打开了 tcp_tw_reuse tcp_tw_recycle,先把问题处理掉了。
但是我的思考却并没有停⽌,⼀条 TIME_WAIT 到底会有哪些开销。端⼝占⽤导致新连接⽆法
建⽴?还是会过多消耗机器上的内存? 3 万条 TIME_WAIT 究竟该算是 warning 还是 error
2)另外⼀次是当时公司还没有建⽴ redis 平台之前,我们业务⾃⼰维护了⼀组 redis server
。为了节约握⼿开销,我们的业务进程对 redis 开启了⻓连接。这样⼀个 redis 实例上最终就
出现了 6000 条的连接。虽然每条连接上⼤部分时间都是空闲的,但是我却在思考⼀条空闲的
连接究竟会有哪些开销?这 6000 条连接会不会把服务器搞坏? 当然最终观测的结果是没啥
问题,但是对于细节原理我仍然吃的不是很准。
3)另外⼀次也是我们业务要把短连接优化成⻓连接。但是这次涉及到了要访问公司的 Mysql
平台。当时我们公司的 Mysql 需要为每⼀个 ip 申请⼀个并发数。因为我们当时使⽤的是
php-fpm,没有连接池的概念。所以我们有多少个 fpm 进程,就得申请多⼤的并发数,我们
当时申请了 200 个。 然后⼯程部的同学就过来 PK 了,你们这单机 200 个并发不⾏,太⾼
了。虽然我最终给他举了上⾯ redis 的例⼦,最终他同意了。虽然勉强说服了他,但是我仍然
吃不准空闲的 tcp 连接到底开销在哪⼉?

资源文件列表:

理解了实现再谈网络性能_202202更新(1).zip 大约有2个文件
  1. 理解了实现再谈网络性能_202202更新.pdf 24.35MB
  2. __MACOSX/._理解了实现再谈网络性能_202202更新.pdf 233B
0评论
提交 加载更多评论
其他资源 gfdsgfdsgfdsgs
gfdsgsfdgfdsg
用AI帮我实现产品月度销售雷达图
用于测试的资源文件和结果文件
C#在PictureBox控件上和PictureBox控件图片上绘制直线
C#在PictureBox控件上和PictureBox控件图片上绘制直线
基于JAVA的企业质量管理系统(Vue.js+SpringBoot+MySQL)
基于Vue.js和SpringBoot的企业质量管理系统是一个高效、灵活且易于维护的解决方案,专为满足不同角色(管理员、工作人员、普通用户)的需求而设计。该系统分为用户前台和管理后台,提供了丰富的功能模块,包括抽样标准模块、质量检测模块、质量标准模块、质量控制模块和质量分析模块。用户前台为用户提供了直观的操作界面,方便他们进行日常的质量管理任务;而管理后台则为管理员和工作人员提供了强大的管理功能,包括数据管理、权限分配、系统配置等。通过Vue.js的响应式数据绑定和组件化开发,系统能够快速响应用户操作,提供流畅的用户体验。同时,SpringBoot作为后端框架,确保了系统的稳定性和可扩展性,支持高并发处理和大数据量存储。此外,系统还具备良好的安全性,通过角色权限控制和数据加密技术,保障了企业数据的安全性和隐私性。 演示录屏:https://www.bilibili.com/video/BV1JAYDeSEGp 配套教程:https://www.bilibili.com/video/BV1pW4y1P7GR
20240812样例20240812
20240812样例20240812
OpenXMLSDKv25.msi
openxmlsdkv25.msi 是 Open XML SDK 的安装文件。Open XML SDK 是微软开发的一套用于处理和生成 Office
prettyZoo.zip
prettyZoo.zip
基于JAVA的助农产品采购平台(Vue.js+SpringBoot+MySQL)
基于Vue.js和SpringBoot的助农产品采购平台是一个综合性的电子商务解决方案,旨在帮助农产品销售和推广。该平台分为用户前台和管理后台,支持管理员、商家和普通用户三种角色,以满足不同用户的需求。在用户前台,普通用户可以浏览和购买各种农产品,查看商品资讯,参与论坛讨论,同时可以参与捐赠项目,查看捐赠记录。商家可以发布和管理自己的商品,接收订单和处理退款。管理员则可以对整个平台进行监控和管理,包括商品管理、捐赠项目管理、捐赠记录管理、商品资讯管理和论坛管理等模块。通过这个平台,农产品可以更有效地销售,同时帮助有需要的人获得帮助。 演示录屏:https://www.bilibili.com/video/BV1X7YDeuE74 配套教程:https://www.bilibili.com/video/BV1pW4y1P7GR