无论是以前工作需要,还是兴趣爱好,我们大多数人可能都只是研究学习过少数几种网络协议。因公司规模或者说项目的原因,流量远达不到需要我们去关心网络方面问题,又或者没机会去接触。

笔者现在参与网络项目的研发,发现自己很多网络知识都不了解,在跨部门沟通时很是被动,需要补一些网络方面的知识。

本篇我们一起从一个后端开发者的视角,理解带宽、以及内容分发网络CDN。

网络带宽

影响应用吞吐量瓶颈的因素,除了我们开发常说的CPU核心数与内存大小,还有最容易被忽视的网络带宽。

对于服务端开发者而言,我们更关心的影响应用吞吐量的是公网带宽、内网专线带宽。而网卡带宽一般都很大,一般不需要我们关注。

你有没有遇到过这种现象:CPU负载很正常,内存使用率也很低,GC什么的也正常,单节点的QPS就是上不去。如果统计出站流量,就能根据每秒流量和带宽比较,是否是带宽瓶颈。

那么,如何计算带宽多大才支撑得起期望的QPS呢。

首先我们要理解带宽是什么?

一般1M带宽是指1Mbps(bit), 并不是平时说的字节(byte)。例如,4Mbps带宽,即每秒传输数据量最大为4/8=0.5M bit/s,等于512KB/s。

带宽包括出入带宽,出带宽指服务器响应给客户端的出站数据流量带宽,入带宽指服务器接收客户端的入站数据流量带宽。为云虚拟机购买公网带宽时,一般入网带宽等于出网带宽。

常用的需求带宽计算公式:每秒出站流量字节数×8(转为bit)/ 0.7(70%的利用率)/ (1024*1024) = 需求宽带(Mbps)。

假设某接口数据包大小为1kb,受硬件限制支持最大200 QPS。那么理论上对带宽的需求就是2Mbps。

笔者做了一组测试来验证理论。

笔者编写了一个简单的web应用,只提供一个响应1kb大小的json数据的接口,并统计平均QPS。已在本地测试,忽略带宽的情况下,将性能优化到最佳。

然后,在阿里云上购买了两台虚拟机,为了排除CPU和内存的影响,买了两台4核8G的虚拟机,然后一台虚拟机选择公网带宽为1Mbps、另一台是4Mbps。这两台虚拟机同机房、同配置,唯一不同的就是带宽。

将服务部署到虚拟机上后,本地启动个并发脚本,测试数据如下。

带宽 平均QPS

100%利用率需要的带宽

70%利用率需要的带宽

实际带宽占用峰值
1Mbps 114 0.89Mbps 1.27Mbps 1.07Mbps
4Mbps 438 3.42Mbps 4.88Mbps 3.77Mbps

阿里云控制台查看监控带宽使用情况(显示的是每分钟的平均值):

(1Mbps带宽-虚拟机网络监控)

(4Mbps带宽-虚拟机网络监控)

结论:公式不确定是否符合实际,但可以肯定的是,固定带宽会影响应用吞吐量。

内容分发网络-CDN

CDN可能大家比较熟悉,也经常听到这个词。如果对CDN比较陌生,可以登录阿里云、腾讯云、华为云、Akamai、Cloudflare,搜索CDN,然后查阅CDN的介绍文档。工作原理如图所示。

(图片来源:华为云-内容分发网络 CDN-产品介绍-工作原理)

CDN早期主要应用于静态资源加速,缓解源站压力,降低带宽和服务器需求成本。将源站隐藏在CDN后面,还能借助CDN防DDoS攻击。随着技术的发展,CDN也被应用于直播音视频流、信令的加速,解决用户最后一公里的接入问题。

源站:CDN回源的站点,当CDN没有缓存资源时,会请求源站获取资源,然后缓存,再响应给客户端。

信令:请求响应。

在没有接入CDN的情况下,用户向后端服务发送请求,假设后端服务用的是电信运营商,用户使用联通网络发送请求。在国内,由于三大运营商网络通过公共交换中心互联,支持跨网互通,但其质量难以保证。如若物理距离还很远,网络延时大会使连接极其不稳定。

不知道你小时候有没有玩过热血江湖、魔域这类网游,当时游戏都是分很多大区的,比如网通一区、联通一区、电信一区,都是使用运营商分区的,不同区数据不互通,而且如果你是电信用户,玩联通一区,可能网络就会很卡,延迟高。

接入CDN后,用户只需要与地理位置最近、择优同运营商的CDN节点建立连接(通过DNS解析获取),保证了用户与CDN节点之间的网络稳定性。而CDN节点是怎么回源到源站的,不同厂商的实现也不同。

CDN节点或通过内网直接回源源站(配置内网回源),或通过公网直接回源源站(配置公网回源),或通过内部路径择优路由技术,先将请求转发到离源站最近的CDN节点,再由该节点走内网/公网转发请求给源站。

另外,CDN加速可以覆盖全球的线路。CDN厂商通过和运营商合作,自己搭建BGP网络,实现了跨运营商、跨地域的全网覆盖互联互通。实际上,现在我们购买云虚拟机,云厂商分配的IP都已经是多网互通的,而不能指定运营商了。

如果感兴趣,在Mac系统上,我们可以使用traceroute host命令追踪路由,获取从源主机到目标主机经过的所有路由器。能够知道网络通不通、需要经过多少跳、以及到达各个路由器的耗时。通过ip138等网站查询路由器所属运营商,观察是否有跨运营商情况。

参考文献:

  • cdn详解:https://www.ucloud.cn/yun/11581.html

  • BGP漫谈:https://zhuanlan.zhihu.com/p/25433049

  • traceroute使用与实现原理分析:https://zhuanlan.zhihu.com/p/36811672

开发也需了解的网络知识,实践验证真理相关推荐

  1. 网络干货,无论是运维还是开发都要知道的网络知识系列之(五)

    IP地址分类与子网划分基础 什么是IP地址:(常见的ip地址版本为ipv4和ipv6) 32位 * 32位二进制数字序列组成的数字序列 点分十进制 * 采用点将32位数字进行分割为4段,每段8位的二进 ...

  2. Android开发面试:架构设计和网络知识答案精解

    目录 架构设计 编程思想 六大设计原则 重构-Code Smell AOP 设计模式 创建型5个 行为型11个 结构型7个 编程范式 MVC MVP MVVM MVI 模块化 组件化 插件化.热修复 ...

  3. 树莓派Pico W无线WiFi开发板使用方法及MicroPython网络编程实践

    树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C++和MicroPython编程.本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroP ...

  4. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  5. 知识图谱开发实战案例剖析_我从剖析Web开发人员路线图中学到的知识

    知识图谱开发实战案例剖析 by Nicole Archambault 妮可·阿坎巴特(Nicole Archambault) 我从剖析Web开发人员路线图中学到的知识 (What I learned ...

  6. 网络知识和交换机的基本配置知识培训

    网络知识和交换机的基本配置知识培训 一.培训目的: 我中心维护维修人员了解基本网络知识,交换机.路由器的基本配置知识. 二.培训人员: 信息处职员. 三.培训方式.方法: 集中现场培训.交换机模拟配置 ...

  7. 网络知识详解之:网络攻击与安全防护

    网络知识详解之:网络攻击与安全防护 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...

  8. 华三杯H3C 网络知识学习笔记(1)

    通俗易懂的IP地址.子网掩码.默认网关.DNS服务器 https://blog.csdn.net/belongtocode/article/details/106453395 一文搞懂网络知识,IP. ...

  9. 网络安全标准实践指南—远程办公安全防护

    TC260-PG-20201A 网络安全标准实践指南-远程办公安全防护(v1.0-202003) 全国信息安全标准化技术委员会秘书处 2020年03月 前言 <网络安全标准实践指南>(以下 ...

最新文章

  1. fmt-重新格式化段落
  2. plsql 快捷键设置
  3. c ++查找字符串_C ++结构| 查找输出程序| 套装3
  4. php echo nbsp,关于include里面的函数echo的问题
  5. 乌托邦式的经理人日记——小的奖励激发员工热情
  6. 在64位系统中无法看到Microsoft Excel Application的问题
  7. XenApp_XenDesktop_7.6实战篇之十七:XenApp应用程序交付
  8. 互联网协议 — ECMP 等价多路径路由
  9. SQList数据库存储
  10. 计算机网络(第八版) 谢希仁——知识点
  11. Scratch案例——放烟花
  12. uboot中往s5p6818的emmc刷写内容
  13. xtdpdgmm:动态面板数据模型一网打尽
  14. JavaScript基本语法
  15. iOS 15 正式版发布,210 条改进大汇总
  16. 木子-后端-Java小知识点
  17. 使用Charles 抓取数据包
  18. 图像处理笔记4-霍夫变换直线检测、圆检测
  19. 【大数据入门核心技术-Tez】(一)Tez介绍
  20. php跳转wap代码,JavaScript_wap浏览自动跳转到wap页面的js代码,如何让用户输入wap手机网站的 - phpStudy...

热门文章

  1. 深入积分兑换商城系统的业务流程思考
  2. OFFICE文件碎片恢复
  3. Mac - eclipse中缺少project facets解决办法
  4. Android 10 Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TY
  5. #组态王#云平台##组态图库#物联网云平台图库工业组态图库工控软件组态图库svg gif png高清格式
  6. 不知道吃啥?随机数教你吃东西(娱乐)
  7. (1+x)^(1/x)的导数
  8. matlab模拟正态,Matlab仿真正态分布
  9. php提取数字和字母,php从字符串中提取汉字字母和数字
  10. nas存储服务器磁盘阵列失效和服务器无法访问故障问题解决