grpc与rpcx的区别

      • 什么是微服务?
      • 微服务的主要区别
      • rpcx与grpc的区别
        • rpcx:
        • grpc:
          • 为什么grpc要使用http2,为什么不适应http1或者http3?
          • 为什么grpc要使用proto而不是json或者其他数据格式?
      • 为什么rpcx快,快多少?
        • rpcx的具体性能指标与grpc比较:

什么是微服务?

整体功能通过多个程序实现,每个程序只关心特定的业务.

优点:

简化功能: 单个服务之需要关心部分业务,实现起来更容易

更灵活: 不同服务间互不影响,可以使用不同的语言与技术栈,以及交给不同的成员/团队实现,便于团队合作/外包

隔离: 部分服务出问题不影响其他服务的功能

拓展: 更容易针对借口的实际压力情况进行横向拓展.

微服务的主要区别

微服务中每个服务都是一个独立运行的程序,他们要进行合作才能实现完整和功能.

基本功能: 通信(接口调用),服务注册,发现

不同架构的主要区别: 通信协议,数据传输格式,中间件支持等

rpcx与grpc的区别

rpcx:
  • 通信协议: 支持tcp,http,quic,kcp
  • 数据格式: 支持json,proto等多种解码器
  • 服务发现。支持 peer2peer、configured peers、zookeeper、etcd、consul 和 mDNS。
  • 其他: 多功能支持 https://github.com/smallnest/rpcx?tab=readme-ov-file
  • 性能优越
grpc:
  • 通信协议:http2
  • 数据格式: proto
  • 服务发现: 支持etcd等多种组件.
  • 其他:https://www.cnblogs.com/leijiangtao/p/4453914.html
  • 自动生成photo文件规范,节省开发时间,方便快捷的部署微服务,跨语言开发等多种优势
为什么grpc要使用http2,为什么不适应http1或者http3?
  1. http1是一次请求一次响应的形式,要等上一次请求完成才能下一次请求,效率太低;而http2:每个请求都是一个双向流,一个连接可以包含多个流,等于是同时发起多个请求,效率更高
  2. 当时,http3技术不成熟,并且http3相对来讲比较复杂.并且http2对于grpc来讲已经够用了.
为什么grpc要使用proto而不是json或者其他数据格式?
  1. proto格式只包含数据,即T-(L)-V(TAG-LENGTH-VALUE)方式编码,没有额外不用的:与{,不像json那样包含字段名+数据的格式,数据结构更紧凑.数据体更小,传输的性能更好
  2. grpc作为一个跨语言的rpc架构,指定特定的数据类型可以更好的对接不同语言的接口

参考: https://segmentfault.com/a/1190000039158535

为什么rpcx快,快多少?

我翻阅了许多博客,他们都没有讲清楚为什么rpcx快.大多数都是在将rpcx与其他的比如grpc,阿里的Dubbo进行性能测试对比

rpcx的作者想做一个性能强大,服务治理的golang的rpc框架来补充golang rpc框架的空缺(虽然grpc与一些rpc架构开始支持go,但是他们都是走跨语言路线的.)

rpcx作者的发展历程介绍到开始的rpcx就是对标准库的rpc进行的封装,rpc标准库就是一个性能非常优秀的库;客户度通过tcp连接和服务器通讯,协议分为header和payload两部分,header很简单,包括服务名、方法和seq,payload包括序列化的数据。简单的数据格式,高效的网络通信使得他的性能非常的优秀.

rpcx开始的版本就是根据标准库进行封装的,封装了服务发现,各种fail处理以及丰富的路由支持.所以rpcx事实上继承了标准rpc库的性能优势,并且在后期重构了代码并且提供了更加丰富的功能.

参考: rpcx简史

rpcx的具体性能指标与grpc比较:
  1. 模拟0ms处理时间
客户端并发数50020005000
测试指标吞吐量(call/s)平均延迟(ms)p99延迟(ms)吞吐量(call/s)平均延迟(ms)
rpcx20万2520万
grpc14万2514万
  1. 模拟10ms处理时间
客户端并发数50020005000
测试指标吞吐量(call/s)平均延迟(ms)p99延迟(ms)吞吐量(call/s)平均延迟(ms)
rpcx5万102515万20
grpc5万10259万30
  1. 模拟30ms处理时间
客户端并发数50020005000
测试指标吞吐量(call/s)平均延迟(ms)p99延迟(ms)吞吐量(call/s)平均延迟(ms)
rpcx1.8万10257万30
grpc1.8万10256万20

参考:rpcx- GitHub

总结: 在并发数量增加的情况下,rpcx相比grpc的吞吐量与与p99延迟(处理99%请求的平均延迟)要更加优秀.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据集搜集器(百科)008

对数据集搜集器(百科)007进行一下改进: 错误处理:增加更多的错误处理,比如网络请求超时、解析错误等。 用户界面:增加一些提示信息,让用户更清楚当前的操作状态。 多线程处理:确保多…

windows下用mysqld启动免安装mysql

windows系统可以下载免安装版本,就是绿色版,里面包含mysql运行的所有必要条件。 ![[Pasted image 20241128231459.png]] 启动步骤: 解压,然后在解压目录创建my.ini。 [mysqld] # 设置13306端口 port13306# 设置mysql的安装目录…

学习嵩山版《Java 开发手册》:编程规约 - 命名风格(P15 ~ P16)

概述 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,他旨在提升开发效率和代码质量 《Java 开发手册》是一本极具价值的 Java 开发规范指南,对于提升开发者的综合素质和代码质量具有重要意义 学习《Java 开发手册》是一个提升 Jav…

windows安装itop

本文介绍 win10 安装 itop 安装WAMP集成环境前 先安装visual c 安装itop前需要安装WAMP集成环境(windowsApacheMysqlPHP) 所需文件百度云盘 通过网盘分享的文件:itop.zip 链接: https://pan.baidu.com/s/1D5HrKdbyEaYBZ8_IebDQxQ 提取码: m9fh 步骤一&#xff1…

Leetcode - 周赛425

目录 一,3364. 最小正和子数组 二, 3365. 重排子字符串以形成目标字符串 三,3366. 最小数组和 四,3367. 移除边之后的权重最大和 一,3364. 最小正和子数组 本题可以直接暴力枚举,代码如下: …

微服务即时通讯系统的实现(服务端)----(2)

目录 1. 语音识别子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 接口的实现 2. 文件存储子服务的实现2.1 功能设计2.2 模块划分2.3 模块功能示意图2.4 接口的实现 3. 用户管理子服务的实现3.1 功能设计3.2 模块划分3.3 功能模块示意图3.4 数据管理3.4.1 关系数据…

Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型

创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…

【VUE3】【Naive UI】<NCard> 标签

【Vue3】【Naive UI】 标签 title 属性bordered 属性header-style 和 body-style 属性footer 属性actions 属性hoverable 属性loading 属性size 属性type 属性cover 和 avatar 属性description 属性style 属性 【VUE3】【Naive UI】<NCard> 标签 【VUE3】…

Python小白语法基础20(模块与包)

0) 参考文章 python的模块(module)、包(package)及pip_python package-CSDN博客Python之函数、模块、包库_python函数、模块和包-CSDN博客Python函数模块自定义封装及模块嵌套导入(手把手教程)_python如何封装一个模块-CSDN博客 1) 模块与包说明 软件…

选择排序之大根堆

大根堆:树的根节点大于左右子树的结点值,这样就能保证每次从树根取的是最大值 灵魂在于HeadAdjust函数,以某节点为树根通过下落调整为大根堆, 建树思想 就是,从最后一个非终端结点开始调整以该结点为根的子树&#x…

springboot/ssm旅游民宿信息管理系统Java旅游景点管理系统web旅游源码

springboot/ssm旅游民宿信息管理系统Java旅游景点管理系统web旅游源码 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&…

mfc110u.dll是什么意思,mfc110u.dll丢失解决方法大全详解

mfc110u.dll是Microsoft Foundation Classes (MFC)库的一个特定版本(版本11.0)的Unicode动态链接库文件。MFC是Microsoft为C开发者设计的一个应用程序框架,主要用于简化Windows应用程序的开发工作。这个框架封装了很多Windows API函数&#x…

smb cifs samba smbpasswd 笔记241127

smb cifs samba smbpasswd 笔记241127 SMB、CIFS和Samba都是与文件共享相关的技术,它们在不同的层面上发挥着作用。以下是关于SMB、CIFS和Samba的详细解释: SMB(Server Message Block) 定义:SMB(Server …

debian 11 虚拟机环境搭建过坑记录

目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12,安装后出现包依赖问题,搞了半天&…

JAVAWeb之CSS学习

前引 CSS,层叠样式表(Cascading Style Sheets),能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有网页对象和模型样式编辑的能力,简单来说,美化页面。…

全排列内存对齐

46. 全排列 class Solution { public:vector<int> vis;//标记数组vector<int> mid;//中间数组vector<vector<int>> ans;//答案二维数组//dfs搜索和回溯求全排列void dfs(vector<int>& nums,int depth) {if (depth nums.size()) {ans.push_…

从单机缓存到分布式缓存那些事

作者&#xff1a;秦怀 1 缓存前世今生 1.1 故事从硬件开始 Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义&#xff0c;用于电脑工程领域。当时没有 Cache&#xff0c;CPU 和内存都很慢&#xff0c;CPU 直接访…

macos下brew安装redis

首先确保已安装brew&#xff0c;接下来搜索资源&#xff0c;在终端输入如下命令&#xff1a; brew search redis 演示如下&#xff1a; 如上看到有redis资源&#xff0c;下面进行安装&#xff0c;执行下面的命令&#xff1a; brew install redis 演示效果如下&#xff1a; …

element ui select绑定的值是对象的属性时,显示异常.

需要声明 value-key"value",如果还不行可能是数据类型不一致数字0和字符串0是不一致的. el-select v-model"value" clearable placeholder"Select" value-key"value" style"width: 240px"><!-- <el-option v-for&…

黑马程序员Java笔记整理(day06)

1.继承的特点 2.继承的权限 3. 4.小结 5.方法重写 6.子类构造器 7.兄弟构造器 8.多态 9.小结