当前位置: 首页 > news >正文

Spring Cloud各个微服务之间为什么要用http交互?难道不慢吗?

先说结论:性能在大规模工程化的时候,或者技术成为流行趋势的时候,永远不是第一顺位的选择。

拿编程语言来说,Java/Golang 一般认为没有Rust/C++快,如果想更快可以直接ASM。但是实际上90%的业务系统,特别是大规模业务系统基本上都是Java来实现的。大型银行核心业务之前的技术栈都是COBOL或C,目前都在转Java了。证券保险类的业务也是这个大趋势。为什么这样呢,一般情况高性能的东西会具有更大的复杂度,一个大型系统如果用汇编语言来写,复杂度和协作程度要严重很多倍,生产率就下降了。

拿出门旅行来说,飞机比较快,战斗机更快,目前还是火车/大巴/自驾为主要方式。开车比电动车和自行车快,但是我在小区附近活动的时候,自行车还是最佳方式。为啥,足够用,足够灵活,性价比高,这往往是比性能更重要的指标。

拿通信协议来说,HTTP肯定比TCP慢,HTTP协议本身有一个变长的头,TCP不需要这个东西,但是反过来,HTTP这个头可以用来做很多扩展性的东西,用TCP就需要一些自己定义一个类似的头,这么来看,TCP的复杂度就上升了。而且HTTP协议作为RCP的底层,一般搭配的JSON数据序列化格式,这个也比一般基于TCP的二进制方式慢一点。但是反过来,1s序列化20万次,跟1s序列化22万次,虽然性能相差了10%,但是我们一次RCP请求里,相对于几ms的网络,几ms的数据库处理,10-200ms这个区间的RT来看,HTTP和JSON序列化的这点性能损失,在99%的场景下可以直接作为误差忽略掉。这就是Spring Cloud/gRPC 之类的使用HTTP协议的原因。

实际上就算在4层网络协议,TCP也不是最快的,UDP更快,之前我们一直说UDP不可靠,实际上稍微封装一下,就可以实现可靠的UDP。

HTTP本身也在发展,从HTTP1.0到keep alive的HTTP 1.1,到后面的HTTP2.0的二进制和复用改进,到HTTP3.0/QUIC 可以基于UDP来实现,就非常快,并且解决了一些TCP的性能问题。并且近些年,HTTP协议作为底层是TCP的一个7层网协议,已经支持一些类似TCP的骚操作了,比如websocket,可以看做是通过一个upgrade指令,借用了HTTP下的TCP通道来实现通信双方的双向二进制通信。Spring对websocket支持的也挺好。

所以有个老话说,脱离场景谈性能都是耍流氓。kimmking:性能也不是万能的,只是我们做出技术选择时的一个指标。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • camtasia studio字幕位置怎么移动 camtasia studio字幕有黑框怎么删除黑框
  • oracle 数据库安装与配置 全新教程
  • nestjs目录命名导致的循环引用
  • 2024嵌入式面试:比亚迪嵌入式面试题及参考答案(BYD面试)
  • 数据安全与个人信息保护的辨析
  • 数据结构---五大排序---哈希表---二分查找法
  • 9,sql 约束
  • 面试题总结(一) -- 基础语法篇
  • 自动化工程案例01:8工位插针装配机01
  • Guitar Pro v8.1最新图文安装教程
  • 73.给定一个 m x n 的矩阵,实现一个算法如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法
  • LeetCode: 551. 学生出勤记录 I
  • 【JavaScript】jQuery的使用
  • 【区块链 + 物联网】长虹智能家居跨平台互联方案 | FISCO BCOS应用案例
  • 安装 rocky9.4
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【mysql】环境安装、服务启动、密码设置
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • echarts花样作死的坑
  • gops —— Go 程序诊断分析工具
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • npx命令介绍
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Sass 快速入门教程
  • session共享问题解决方案
  • yii2权限控制rbac之rule详细讲解
  • 区块链技术特点之去中心化特性
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用 Docker 部署 Spring Boot项目
  • 微服务核心架构梳理
  • 小程序测试方案初探
  • 赢得Docker挑战最佳实践
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # wps必须要登录激活才能使用吗?
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #Linux(帮助手册)
  • (2)MFC+openGL单文档框架glFrame
  • (3) cmake编译多个cpp文件
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)我也是一只IT小小鸟
  • (转)原始图像数据和PDF中的图像数据
  • .“空心村”成因分析及解决对策122344
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core 2.1路线图
  • .net 程序发生了一个不可捕获的异常