全部产品服务
  • 网站建设◆平台开发
    网站定制
    网站建设方案
    网站建设收费明细
    模仿建站
    模板建站
    多合一建站
  • 网络推广
    SEO优化推广
    万词霸屏推广
    百度竞价推广
    爱采购CPC推广
    四大搜竞价推广
  • 商城开发
    分销商城
    小程序商城
    入驻联营商城
    B2B订货商城
    商城开发
    订货宝
  • 应用市场
    销售系统
    智能名片
    企业名录系统
    crm系统
    微信公众号助手
    400号码
    企业邮箱
    教育系统
    门店会员系统
    互动游戏系统
    微信传单
    云设计系统
    进销存
182-690-14756
立足南宁.服务全国

总结:43 | 套路篇:网络性能优化的几个思路(上)

 二维码 150
发表时间:2021-01-14 09:29作者:南宁网站建设来源:网络采集

上一节,我们了解了 NAT(网络地址转换)的原理,学会了怎么排查 NAT 带来的性能问题,最后还总结了 NAT 性能优化的基本思路。我先带你简单回顾一下。

NAT 基于 Linux 内核的联接跟踪机制,实现了 IP 地址及端口号重画的功能,主要被拿来解决网段 IP 地址紧缺的问题。

在剖析 NAT 性能问题时,可以先从内核联接跟踪模块 conntrack 角度来剖析,比如用 systemtap、perf、netstat 等工具,以及 proc 文件系统中的内核选项,来剖析网路协议栈的行为;然后,通过内核选项调优、切换到无状态 NAT、使用 DPDK 等形式,进行实际优化。

通过上面的学习,你应当早已感受到,网络问题比我们上面学过的 CPU、内存或c盘 I/O 都要复杂。无论是应用层的各类 I/O 模型,冗长的网路协议栈和诸多的内核选项,抑或是各类复杂的网路环境,都增强了网路的复杂性。

不过,也不要过于害怕,只要你把握了 Linux 网络的基本原理和常见网路合同的工作流程,再结合各个网路层的性能指标来剖析,你会发觉,定位网路困局并不难。

找到网路性能困局后,下一步要做的就是优化了,也就是怎么增加网路延后,并提升网路的吞吐量。学完相关原理和案例后,我就来讲讲,优化网路性能问题的思路和一些注意事项。

由于网络优化思路的内容比较多,我们分两节来学习,今天我们先来看下篇。

确定优化目标

跟 CPU 和 I/O 方面的性能优化一样,优化前,我会先问问自己,网络性能优化的目标是哪些?换句话说,我们观察到的网路性能指标,要达到多少才合适呢?

实际上,虽然网路性能优化的整体目标,是增加网路延后(如 RTT)和提升吞吐量(如 BPS 和 PPS),但具体到不同应用中,每个指标的优化标准可能会不同,优先级次序也大相径庭。

就拿上一节提及的 NAT 网关来说,由于其直接影响整个数据中心的网路出入性能,所以 NAT 网关一般须要达到或接近线性转发,也就是说, PPS 是最主要的性能目标。

再如,对于数据库、缓存等系统,快速完成网路收发,即低延后,是主要的性能目标。

而对于我们常常访问的 Web 服务来说,则须要同时兼具吞吐量和延后。

所以,为了更客观合理地评估优化疗效,我们首先应当明晰优化的标准网络优化,即要对系统和应用程序进行基准测试,得到网路协议栈各层的基准性能。

在 怎么评估系统的网路性能 中,我早已介绍过,网络性能测试的方式。简单回顾一下,Linux 网络协议栈,是我们须要把握的核心原理。它是基于 TCP/IP 协议族的分层结构,我用一张图来表示这个结构。

明白了这一点,在进行基准测试时,我们就可以根据协议栈的每一层来测试。由于底层是其上方各层的基础,底层性能也就决定了高层性能。所以我们要清楚,底层性能指标,其实就是对应高层的极限性能。我们从下到上来理解这一点。

首先是网路插口层和网路层,它们主要负责网路包的封装、寻址、路由,以及发送和接收。每秒可处理的网路包数 PPS小程序开发,就是它们最重要的性能指标(特别是在大包的情况下)。你可以用内核自带的分包工具 pktgen ,来测试 PPS 的性能。

再向下到传输层的 TCP 和 UDP,它们主要负责网路传输。对它们而言,吞吐量(BPS)、连接数以及延后,就是最重要的性能指标。你可以用 iperf 或 netperf ,来测试传输层的性能。

不过要注意,网络包的大小,会直接影响这种指标的值。所以,通常,你须要测试一系列不同大小网路包的性能。

最后,再往上到了应用层,最须要关注的是吞吐量(BPS)、每秒恳求数以及延后等指标。你可以用 wrk、ab 等工具,来测试应用程序的性能。

不过,这里要注意的是,测试场景要尽量模拟生产环境,这样的测试才更有价值。比如,你可以到生产环境中,录制实际的恳求情况,再到测试中回放。

总之,根据这种基准指标,再结合早已观察到的性能困局,我们就可以明晰性能优化的目标。

网络性能工具

同上面学习一样,我建议从指标和工具两个不同维度出发,整理记忆网路相关的性能工具。

第一个维度,从网路性能指标出发,你更容易把性能工具同系统工作原理关联上去,对性能问题有宏观的认识和掌握。这样,当你想查看某个性能指标时,就能清楚晓得,可以用什么工具。

指标工具

这里,我把提供网路性能指标的工具,做成了一个表格,方便你梳理关系和理解记忆。你可以把它保存并复印下来,随时查看。当然,你也可以把它当作一个“指标工具”指南来使用。

再来看第二个维度,从性能工具出发。这可以使你更快上手使用工具,迅速找出想要观察的性能指标。特别是在工具有限的情况下,我们更要充分利用好手头的每一个工具,用少量工具也要竭力挖掘出大量信息。

工具指标

同样的,我也将这种常用工具,汇总成了一个表格,方便你分辨和理解。自然,你也可以当作一个“工具指标”指南使用,需要时查表即可。

网络性能优化

总的来说,先要获得网路基准测试报告,然后通过相关性能工具,定位出网路性能困局。再接下来的优化工作,就是水到渠成的事情了。

当然,还是那句话,要优化网路性能,肯定离不开 Linux 系统的网路协议栈和网路收发流程的辅助。你可以结合下边这张图再追忆一下这部份的知识。

接下来,我们就可以从应用程序、套接字、传输层、网络层以及链路层等几个角度,分别来看网路性能优化的基本思路。

应用程序

应用程序,通常通过套接字插口进行网路操作。由于网路收发一般比较历时,所以应用程序的优化,主要就是对网路 I/O 和进程自身的工作模型的优化。

相关内容,其实我们在 C10K 和 C1000K 回顾 的文章中早已学过了。这里我们简单回顾一下。

网络 I/O 的角度

从网路 I/O 的角度来说,主要有下边两种优化思路。

进程的工作模型

而从进程的工作模型来说,也有两种不同的模型拿来优化。

应用层的网路合同优化

除了网路 I/O 和进程的工作模型外,应用层的网路合同优化,也是至关重要的一点。我总结了常见的几种优化方式。

套接字

套接字可以屏蔽掉 Linux 内核中不同合同的差别,为应用程序提供统一的访问插口。每个套接字,都有一个读写缓冲区。

所以,为了提升网路的吞吐量网络优化,你一般须要调整那些缓冲区的大小。比如:

至于套接字的内核选项,我把它们整理成了一个表格,方便你在须要时参考:

不过有几点需要你注意。

当然,表格中的数值只提供参考价值,具体应当设置多少,还需要你按照实际的网路状况来确定。比如,发送缓冲区大小,理想数值是吞吐量 * 延迟,这样才可以达到最大网路利用率。

除此之外,套接字插口还提供了一些配置选项,用来更改网路联接的行为:

小结

今天,我们一起梳理了常见的 Linux 网络性能优化方式。

在优化网路性能时,你可以结合 Linux 系统的网路协议栈和网路收发流程,然后从应用程序、套接字、传输层、网络层再到链路层等,进行逐层优化。

当然,其实我们剖析、定位网路困局,也是基于这种进行的。定位出性能困局后,就可以按照困局所在的协议层进行优化。比如,今天我们学了应用程序和套接字的优化思路:

而其他各个网路层的优化方式,建议你先自己想一想,下一节,我们再来一起总结。

在线客服
 
 
 
 
 工作时间
周一至周五 :8:30-17:30
周六至周日 :9:00-17:00
 联系方式
郑工:182-6901-4756