开发也需了解的网络知识,实践验证真理
无论是以前工作需要,还是兴趣爱好,我们大多数人可能都只是研究学习过少数几种网络协议。因公司规模或者说项目的原因,流量远达不到需要我们去关心网络方面问题,又或者没机会去接触。
笔者现在参与网络项目的研发,发现自己很多网络知识都不了解,在跨部门沟通时很是被动,需要补一些网络方面的知识。
本篇我们一起从一个后端开发者的视角,理解带宽、以及内容分发网络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
开发也需了解的网络知识,实践验证真理相关推荐
- 网络干货,无论是运维还是开发都要知道的网络知识系列之(五)
IP地址分类与子网划分基础 什么是IP地址:(常见的ip地址版本为ipv4和ipv6) 32位 * 32位二进制数字序列组成的数字序列 点分十进制 * 采用点将32位数字进行分割为4段,每段8位的二进 ...
- Android开发面试:架构设计和网络知识答案精解
目录 架构设计 编程思想 六大设计原则 重构-Code Smell AOP 设计模式 创建型5个 行为型11个 结构型7个 编程范式 MVC MVP MVVM MVI 模块化 组件化 插件化.热修复 ...
- 树莓派Pico W无线WiFi开发板使用方法及MicroPython网络编程实践
树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C++和MicroPython编程.本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroP ...
- python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...
Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...
- 知识图谱开发实战案例剖析_我从剖析Web开发人员路线图中学到的知识
知识图谱开发实战案例剖析 by Nicole Archambault 妮可·阿坎巴特(Nicole Archambault) 我从剖析Web开发人员路线图中学到的知识 (What I learned ...
- 网络知识和交换机的基本配置知识培训
网络知识和交换机的基本配置知识培训 一.培训目的: 我中心维护维修人员了解基本网络知识,交换机.路由器的基本配置知识. 二.培训人员: 信息处职员. 三.培训方式.方法: 集中现场培训.交换机模拟配置 ...
- 网络知识详解之:网络攻击与安全防护
网络知识详解之:网络攻击与安全防护 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...
- 华三杯H3C 网络知识学习笔记(1)
通俗易懂的IP地址.子网掩码.默认网关.DNS服务器 https://blog.csdn.net/belongtocode/article/details/106453395 一文搞懂网络知识,IP. ...
- 网络安全标准实践指南—远程办公安全防护
TC260-PG-20201A 网络安全标准实践指南-远程办公安全防护(v1.0-202003) 全国信息安全标准化技术委员会秘书处 2020年03月 前言 <网络安全标准实践指南>(以下 ...
最新文章
- fmt-重新格式化段落
- plsql 快捷键设置
- c ++查找字符串_C ++结构| 查找输出程序| 套装3
- php echo nbsp,关于include里面的函数echo的问题
- 乌托邦式的经理人日记——小的奖励激发员工热情
- 在64位系统中无法看到Microsoft Excel Application的问题
- XenApp_XenDesktop_7.6实战篇之十七:XenApp应用程序交付
- 互联网协议 — ECMP 等价多路径路由
- SQList数据库存储
- 计算机网络(第八版) 谢希仁——知识点
- Scratch案例——放烟花
- uboot中往s5p6818的emmc刷写内容
- xtdpdgmm:动态面板数据模型一网打尽
- JavaScript基本语法
- iOS 15 正式版发布,210 条改进大汇总
- 木子-后端-Java小知识点
- 使用Charles 抓取数据包
- 图像处理笔记4-霍夫变换直线检测、圆检测
- 【大数据入门核心技术-Tez】(一)Tez介绍
- php跳转wap代码,JavaScript_wap浏览自动跳转到wap页面的js代码,如何让用户输入wap手机网站的 - phpStudy...
热门文章
- 深入积分兑换商城系统的业务流程思考
- OFFICE文件碎片恢复
- Mac - eclipse中缺少project facets解决办法
- Android 10 Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TY
- #组态王#云平台##组态图库#物联网云平台图库工业组态图库工控软件组态图库svg gif png高清格式
- 不知道吃啥?随机数教你吃东西(娱乐)
- (1+x)^(1/x)的导数
- matlab模拟正态,Matlab仿真正态分布
- php提取数字和字母,php从字符串中提取汉字字母和数字
- nas存储服务器磁盘阵列失效和服务器无法访问故障问题解决