微服务架构 网络传输优化

Posted zachary 分解狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构 网络传输优化相关的知识,希望对你有一定的参考价值。


本文主要讲解,浏览器请求过程及网络传输等优化手段


优化之前首先了解其调用过程,如下图:



流程分析

  • 获取IP之后,浏览器会请求与服务器连接,TCP经过3次握手后建立连接通道

  • 浏览器真实发送http请求,请求包含了(cookie,header信息)

  • 网络开始传输请求到服务器,这个会包含很多时间,如网络阻塞时间、网络延迟时间、真正传输内容时间等

  • web服务器接收到请求,会根据url上下文转交给相应web应用进行处理

  • web应用会经过很多处理,如 filter、aop前置处理、IOC处理、处理寻找对象和创建,进行业务处理后生成Response对象,熟悉spring对此过程更清晰

  • 通过网络传输应答内容回到前端浏览器,先返回html代码,不包含图片、外部脚本、css等

  • 浏览器解析页面,进行渲染和绘制过程
    1.装载和解析html文档,构建DOM,如果在解析过程中发现需要其它资源,如图片,浏览器会发出请求获取资源
    2.装载和解析css,构建cssom
    3.根据DOM和cssom构建渲染树
    4.然后对渲染树节点进行布局处理,确认其屏幕位置
    5.渲染好的节点绘制到界面上,渲染引擎不会等到所有html都解析完后才创建布局渲染树,并行处理解析渲染树同时向后端请求资源

重绘:页面渲染到后面发现需要修改前面已经绘制元素的外观,如背景色、文字颜色。需要重绘这个元素
回流:页面渲染到后面发现需要修改前面已经绘制好的元素某些行为,引起页面上某些元素占位面积、定位方式、边距的变化,会引起周围或者整个页面重新渲染

针对以上第三点之后,可以进行特定的网络优化

优化思路:

  • 尽量利用浏览器缓存,优化到极致能不传输最好不传

  • 尽量减少需要传输的内容数据量

  • 尽量最短距离访问,比如使用客户端最近CDN

  • 尽量优化网络链路

详细描述

  • 使用浏览器本身缓存,尽量减少来回传输数据量

  • 精简代码,移除不必要的字符以减少其大小

  • 静态文件,如JS/CSS,进行混淆压缩,如jsmin、YUIcompressor、CSScompressor

  • 优先考虑使用CSS来代替,其次才是图片裁剪,如果条件允许,选择有损压缩格式,如jpg
    针对大图片,尽量进行精简,在图片效果和大小之间仔细斟酌

  • 压缩请求传输内容,前后端交互文章中有详细实例说明,使用压缩 如Gzip 后再传输给客户端,客户端接收后由浏览器进行解压,稍微会占取客户端和服务器的CPU,但是会显著提高宽带利用率,特别是纯文本,相当明显

  • 减少cookie传递,http规范中描述,每个客户端最多保持300个,每个域名下最多20个,其大小基本保持4K左右,如需传输控制其传输大小

总结

web调用过程分为很多阶段、不同阶段处理方式不同,其过程链路复杂甚长,了解过程后可对其中特定点进行优化,本文主要特定阐述网络传输的优化方式,周期甚短,优化过后效果显著。

作者简介:张程 技术研究


以上是关于微服务架构 网络传输优化的主要内容,如果未能解决你的问题,请参考以下文章

优化架构设计的 10 个微服务最佳实践

科技转型恒丰银行微服务架构优化实践

生产级基于SpringCloud微服务架构性能优化实战,建议收藏

生产级基于SpringCloud微服务架构性能优化实战,建议收藏

阿里架构师细谈:微服务+分布式+性能优化+JVM调优+团队开发

微服务架构及设计模式