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

性能比拼: Go vs Bun

本内容是对知名性能评测博主 Anton Putra Go (Golang) vs. Bun: Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准

我对 Bun 在之前的基准测试中的出色表现感到惊讶,因此我决定将它与 Go 进行比较。在我看来,Go 与 JavaScript 相比属于不同的级别。

在以下内容中,我们将首先使用标准库来比较 Bun 和 Go。我们将使用标准库 API 的 /devices 端点,以 JSON 格式向客户端返回一个硬编码的设备信息。我们将重点关注四个黄金指标。

由于这些是面向用户的应用程序,我们的主要关注点将是延迟,特别是使用 P99 百分位(P99 percentile)。

接下来是吞吐量(Throughput),对于 Web 应用程序而言,这意味着每个应用程序每秒可以处理的请求数量。

然后,我们将通过测量服务的繁忙程度来考察饱和度(Saturation),更具体地说是应用程序相对于 Kubernetes 中定义的限制的 CPU 和内存使用情况。我们还需要测量 CPU 节流(CPU throttling),因为它在 Kubernetes 中扮演着重要角色。当一个服务被节流时,会立即增加延迟并降低整体性能。
最后,我们将通过查看特定时间段内失败请求数相对于总请求数的比例来衡量可用性(Availability)。

现在,大多数基准测试都侧重于综合测试(synthetic tests),但我也想看看这些应用程序在真实世界场景中的表现如何。我在不同的基准测试中使用了不同的用例。在这个测试中,我们将使用 MongoDB 数据库添加一个持久化层。每当应用程序收到一个 POST 请求时,它将解析请求体,生成 UUID,并将该项目保存到 MongoDB 中。

除了标准指标外,我还使用 Prometheus 指标(Prometheus Metrics)对每个应用程序进行了检测,以测量每个应用程序将设备保存到数据库所需的时间。此外,有人建议加入数据库指标,所以我还添加了 MongoDB 自身的 CPU 使用率。在这些测试中,我们将产生足够的负载以找到两个应用程序的崩溃点。

我将这两个应用程序部署到了 AWS 上的生产级 Kubernetes 集群中,为应用程序使用了大型实例,每个实例配备 2 个 CPU 和 8 GB 内存。由于 Bun 在大多数操作中使用单线程,我将每个应用程序限制为使用 1 个 CPU,这可以看作是一个无限重复的周期中 100 毫秒间隔的 100% 使用率,并由 cgroups 强制执行。此外,我分配了 256MB 的内存。我还对应用程序进行了水平扩展,在每个 EC2 实例上为每个应用程序部署了两个实例。

为了产生负载,我使用了 Graviton 实例(它们稍微便宜一些),并为每个应用程序部署了 20 个 Pod。这些 Pod 会逐渐增加虚拟客户端的数量,直到两个应用程序都失败为止。

欢迎提出任何关于如何改进任一应用程序的建议,也欢迎提交 Pull Request,我通常会在一天内合并。

好的,让我们开始吧。

在第一个测试中,我们评估每个应用程序处理 HTTP 请求并将硬编码值以 JSON 格式返回给客户端的能力。在右上方的图表中,我们将测量吞吐量,显示每个应用程序可以处理多少请求。在左侧,我们有延迟,测量响应所需的时间。从一开始你就可以看到,Bun 应用程序处理每个请求需要明显更多的时间。同样重要的是要注意,我们是从客户端测量延迟,以使其尽可能准确。

接下来,我们看饱和度,它表明服务的繁忙程度。你可以看到 CPU 使用率的趋势:Go 使用更多的 CPU 时间,并将首先经历节流。由于我为每个应用程序部署了两个副本,我们测量的是平均 CPU 使用率。在右侧,我们有内存使用率,这只在两个服务都过载时才变得关键。

接下来是可用性。在这个测试中,平均请求完成时间不到 1 毫秒,所以我将客户端超时设置为 100 毫秒。当超过该超时时间时,你会在可用性图表中看到下降。

直到 CPU 使用率达到 60% 到 70%,你不会看到任何节流。在大约每秒 23,000 个请求时,两个应用程序之间的 CPU 使用率差异变得更加明显。到这一点,Go 开始失去其在延迟方面的优势(对于这类应用程序)。一旦 CPU 使用率达到 40%,性能开始下降,延迟增加。

在大约每秒 46,000 个请求时,Go 在可处理的请求数量方面开始落后于 Bun。在每秒 61,000 个请求时,差异变得更加显著。Go 的延迟增加到 10 毫秒,Kubernetes 开始对其进行节流,这影响了性能。另一方面,Bun 保持着低延迟,尽管有些请求开始超时。数量不多,但你会在可用性图表中注意到下降。

在每秒 69,000 个请求时,情况变得很明显,Go 无法处理更多请求,并开始缓存(caching)其中一些请求。

好的,让我们继续。在大约每秒 90,000 个请求时,Bun 也达到了其极限,并被 Kubernetes 节流。

现在,让我打开每个图表以显示完整的测试持续时间。如你所见,测试耗时约 2 小时完成。

首先是每秒请求数。

接下来是客户端延迟。在 Go 于大约 40% CPU 使用率时开始性能下降后,其延迟超过了 Bun,但在此之前,它的延迟要低得多。

接下来是 CPU 使用率。

然后是内存使用率。你可以看到当 Go 无法处理所有请求并开始缓存它们时,内存使用量出现峰值。最终内存使用率达到 100%,Kubernetes 由于内存不足错误(out of memory errors)多次终止了该应用程序。

之后是可用性图表。

最后是 CPU 节流。

如果你正在构建延迟很重要的面向客户端的应用程序,你可能需要考虑 Go,因为在 CPU 使用率达到 40% 之前,它的性能要好得多。另一方面,如果你更关心吞吐量而延迟不那么关键(例如内部微服务),那么 Bun 可能是更好的选择。



现在,让我们开始第二个测试。大多数基准测试使用简单的任务和算法来衡量性能,但实际上,你会严重依赖外部库,并且你的应用程序性能将取决于这些库的开发水平。此外,几乎所有应用程序都需要某种持久化层,例如数据库。

在之前的 Bun 对比 Node 的基准测试中,我使用了 PostgreSQL 关系数据库。在这个测试中,我将其替换为 MongoDB 文档数据库。如果你对 Bun 与 PostgreSQL 的表现感兴趣,可以查看那个视频。

我使用 Prometheus 指标对两个应用程序都进行了检测,这样我们就可以测量每个函数调用的持续时间。在这个测试中,当应用程序收到一个 POST 请求时,它会生成 UUID 并将完整的对象存储在数据库中。你可以在视频描述中找到源代码的链接。我还使用 Prometheus 直方图(histogram)来测量向 MongoDB 插入数据所需的时间。

此外,根据我收到的反馈,我现在也测量 MongoDB 的 CPU 使用率以及其他标准指标。

在这个测试中,Go 的表现明显优于 Bun。客户端延迟和数据库插入延迟都几乎是 Bun 的一半。与 Bun 相比,Go 的 CPU 使用率也低得多。在大约每秒 7500 个请求时,Bun 开始性能下降并丢弃一些请求。Kubernetes 也开始对其进行节流,导致延迟增加。

让我们继续,找到 Go 的崩溃点。在大约每秒 24,000 个请求时,Go 也开始性能下降,CPU 使用率接近 100%。

如你所见,当测试涉及的不仅仅是像上一个测试那样返回静态响应时,Go 在真实世界场景中的表现要好得多。你肯定需要比静态响应更多的功能。根据我的经验和我运行的基准测试,Bun 在静态、综合基准测试中表现非常好,但是当需要执行实际工作(例如与数据库交互)时,Bun 失去了许多优势,甚至在这些情况下 Node.js 的表现都更好。所以我建议在选择 Bun(如果你的目标是提高性能)之前,先测试你的特定用例。

好的,让我展示整个测试期间的每个图表。

首先是每秒请求数图。

然后是客户端延迟。

数据库插入延迟。

MongoDB CPU 使用率。

应用程序 CPU 使用率。

内存使用率。

可用性图表。

(图略)

最后是 CPU 节流。

(图略)

相关文章:

性能比拼: Go vs Bun

本内容是对知名性能评测博主 Anton Putra Go (Golang) vs. Bun: Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 我对 Bun 在之前的基准测试中的出色表现感到惊讶,因此我决定将它与 Go …...

Kubernetes相关的名词解释Dashboard界面(6)

什么是Kubernetes Dashboard? Kubernetes Dashboard 是一个基于 Web 的用户界面,用于管理 Kubernetes 集群。它是 Kubernetes 官方提供的可视化工具,允许用户通过直观的图形界面而不是命令行来部署、管理和监控集群中的应用程序。 Dashboard…...

Linux网络编程 TCP---并发服务器:多进程架构与端口复用技术实战指南

知识点1【并发服务器—多进程版】 并发服务器:服务器可以同时服务多个客户端 首先复习一下服务器的创建过程(如下图) 1、监听套接字(套接字→绑定→监听(连接队列)) 2、利用accept从连接队列…...

(done) 吴恩达版提示词工程 1. 引言

url: https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 LLM 有两种: 1.基础 LLM,通过文本训练数据预测后面的内容。 这种 LLM 当你给它提问:What is…...

uniapp微信小程序实现sse

微信小程序实现sse 注:因为微信小程序不支持sse请求,因为后台给的是分包的流,所以我们就使用接受流的方式,一直接受,然后把接受的数据拿取使用。这里还是使用uniapp的原生请求。 上代码 //注意:一定要下…...

【TeamFlow】3 Rust 与 WebAssembly (Wasm) 深度应用指南

WebAssembly 是一种低级的类汇编语言,能在现代浏览器中高效执行。Rust 因其无 GC、内存安全和卓越性能,成为编译到 Wasm 的理想语言。 一、为什么选择 Rust Wasm 性能优势:Rust 生成的 Wasm 代码执行效率接近原生 内存安全:避免…...

C 语言的未来:在变革中坚守与前行

C 语言,作为编程语言领域的一位 “老将”,自诞生以来就一直扮演着至关重要的角色。历经数十年的发展,它的影响力依然广泛而深远。在科技飞速发展的今天,新的编程语言如雨后春笋般不断涌现,C 语言的未来发展走向成为了众…...

SQL注入之information_schema表

1 information_schema表介绍: information_schema表是一个MySQL的系统数据库,他里面包含了所有数据库的表名 SQL注入中最常见利用的系统数据库,经常利用系统数据库配合union联合查询来获取数据库相关信息,因为系统数据库中所有信…...

android framework开发的技能要求

作为Android Framework开发工程师,需要具备深入的系统底层理解能力和对Android架构的全面认知。以下是核心技能要求,分为技术能力和软实力两大方向: 一、核心技术能力 Android系统架构深度掌握 Binder机制:理解Binder驱动、ServiceManager、AIDL跨进程通信原理,能分析Bind…...

AWS EC2完全指南:如何快速搭建高性能云服务器?

一、什么是AWS EC2?云时代的虚拟服务器革命 AWS Elastic Compute Cloud(EC2)作为全球领先的云服务器解决方案,正在重新定义虚拟服务器的可能性。与传统VPS相比,EC2提供: 秒级弹性扩展:CPU/RAM按…...

go环境安装mac

下载go安装包:https://golang.google.cn/dl/ 找到对应自己环境的版本下载。 注意有二进制的包,也有图形界面安装的包。图形界面直接傻瓜式点就行了。 二进制的按照下面操作: 1、下载二进制包。 2、将下载的二进制包解压至 /usr/local目录…...

Python实现对大批量Word文档进行批量自动化排版(15)

前言 本文是该专栏的第15篇,后面会持续分享Python办公自动化干货知识,记得关注。 在本专栏上一篇文章《Python实现对目标Word文档进行自动化排版【4万字精讲】(14)》中,笔者已经详细介绍“基于Python,实现对目标docx格式的word文档进行自动化排版”的实战教学(文章附带…...

嵌入式面试题解析:二维数组,内容与总线,存储格式

在嵌入式系统领域,扎实掌握基础概念是应对面试的关键。本文通过典型面试题,详细解析核心知识,梳理易错点,并补充常见面试题,助力新手快速入门。 一、二维数组元素地址计算 题目 若二维数组 arr[0..M-1][0..N-1] 的首…...

【iOS】alloc init new底层原理

目录 前言 alloc alloc核心操作 cls->instanceSize(extraBytes) calloc obj->initInstanceIsa init 类方法: 实例方法: new 前言 笔者最近在进行对OC语言源码的学习,学习源码的过程中经常会出现一些从来没有遇见过的函数&…...

解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1、 首先在.vscode下的launch.json中添加"env": {“PYTHONPATH”: “${workspaceRoot}”} {"version": "0.2.0","configurations": [{省略其他配置"env": {"PYTHONPATH": "${workspaceRoot}"}}] }2、 …...

【某比特币网址请求头部sign签名】RSA加密逆向分析

目标:aHR0cDovL21lZ2FiaXQudmlwL21hcmtldA 直接搜索sign不方便定位,可以换个思路搜asi_uuid或者user_info 为什么搜这个,因为都是请求头里面的参数,基本上会在一起 实际上就是Object(h.a)((new Date).getTime()) 直接在这里打断点…...

【Docker项目实战】使用Docker部署Jupyter Notebook服务

【Docker项目实战】使用Docker部署Jupyter Notebook服务 一、 Jupyter Notebook介绍1.1 Jupyter Notebook 简介1.2 主要特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compos…...

Oracle高级语法篇 - 用户与角色关系

在Oracle数据库中,用户和角色是权限管理的核心概念。用户是数据库的使用者,而角色则是权限的集合。通过合理地分配角色给用户,可以简化权限管理,提高数据库的安全性和易用性。本文将详细讲解Oracle中用户和角色之间的关系&#xf…...

“小坝” 策略:始发站 buffer 控制与优化

端到端,这两个端是两个应用程序中的位置,第一个端指数据被产生处,第二个端指数据被消费处。更一般的,把数据发生的应用程序所在的主机视为数据始发站也是合理的。 网络中遍布 buffer,buffer 却是一把双刃剑的存在&…...

【esp32 点亮led】-解决不能闪烁问题

问题现象:将esp例程中的led例程下载到开发板中,led不能闪烁,串口查看,可以看到对应的led ON/led off 信息。 解决办法: 使用idf.py menuconfig 命令配置相应的引脚为GPIO模式,如下图所示,保存…...

自然语言处理(9)—— 共现词矩阵及Python实现

共现词矩阵 1. 概述2. 构建步骤3. 代码实现(Python)结语 共现词矩阵(Co-occurrence Matrix)是自然语言处理(NLP)中用于捕捉词语间语义关系的重要工具。共现矩阵通过统计词语在特定上下文窗口内的共现频率&a…...

缓存 --- Redis的三种高可用模式

缓存 --- Redis的三种高可用模式 主从复制(Replication)哨兵模式(Sentinel)集群模式(Cluster)总结对比选择建议 Redis 的高可用架构模式主要有三种:主从复制(Replication&#xff09…...

飞帆中控件数据和 Vue 双向绑定

在 Vue 中,数据的双向绑定是指在视图和数据模型之间自动保持同步。Vue 实现双向绑定的核心特性是其 响应式系统,它能够追踪数据的变化并自动更新视图,反之亦然,视图的变化也可以影响数据。 Vue 提供了几种方式来实现数据双向绑定&…...

【外研在线-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

实现AWS Data Pipeline安全地请求企业内部API返回数据

需要编写一段Data Pipeline在AWS云上运行,它需要访问企业内部的API获取JSON格式的数据,企业有网关和防火墙,API有公司的okta身份认证,通过公司的域账号来授权访问,现在需要创建一个专用的域账号,让Data Pip…...

AI书籍大模型微调-基于亮数据获取垂直数据集

大模型的开源,使得每位小伙伴都能获得AI的加持,包括你可以通过AIGC完成工作总结,图片生成等。这种加持是通用性的,并不会对个人的工作带来定制的影响,因此各个行业都出现了垂直领域大模型。 垂直大模型是如何训练出来…...

cloudstudio学习笔记之openwebui

代码获取 git clone 参考资料 openwebui官网 https://docs.openwebui.com/getting-started/advanced-topics/development 后端启动 cd backend pip install -r requirements.txt -U sh dev.sh后端启动成功后的界面 在cloudstudio提供的vscode弹出的提示中打开浏览器并在末…...

Linux安装mysql_exporter

mysqld_exporter 是一个用于监控 MySQL 数据库的 Prometheus exporter。可以从 MySQL 数据库的 metrics_schema 收集指标,相关指标主要包括: MySQL 服务器指标:例如 uptime、version 等数据库指标:例如 schema_name、table_rows 等表指标:例如 table_name、engine、…...

Kubernetes控制平面组件:API Server代码基础概念

云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...

修改PointLIO项目

添加key_frame_info.msg消息 新建.msg文件,内容填写为: # Cloud Info Header header # cloud messages sensor_msgs/PointCloud2 key_frame_cloud_ori sensor_msgs/PointCloud2 key_frame_cloud_transed sensor_msgs/PointCloud2 key_frame_poses其中k…...

将 JSON 字符串转化为对象的详细笔记 (Java示例)

1. 主流 JSON 库的选择 在 Java 中,常用以下库进行 JSON 和对象之间的转换: Jackson:Spring 默认集成,性能优异,支持流式解析。FastJSON:阿里开发,速度快,但需注意版本安全性。Gso…...

基于Docker+k8s集群的web应用部署与监控

项目架构图 server ip master 192.168.140.130 node1 192.168.140.131 node2 192.168.140.132 ansible 192.168.140.166 jumpserver 192.168.100.133 firewall 192.168.1.86 nfs 192.168.140.157 harbor 192.168.140.159 Promethethus 192.168.140.130 Jen…...

Java(自用查看版)

目录 1.java的基本运行 2、基本格式 注释 标识名 关键字 常量 整型常量 浮点数: 字符常量: 字符串常量 布尔 null值 变量 整型变量: 浮点变量: 字符变量: 布尔变量: 类型转换 自动类型转换 强制类型转换 运算符 …...

头歌java课程实验(函数式接口及lambda表达式)

第1关:利用lambda表达式对Book数组按多个字段进行排序 任务描述 本关任务:利用Comparator接口完成对Book数组同时按多个字段进行排序。 编程要求 1、本任务共有三个文件,可查看各文件的内容 2、无需修改SortBy.java枚举文件及Book.java类文…...

Jsp技术入门指南【九】详细讲解JSTL

Jsp技术入门指南【九】详细讲解JSTL 前言一、什么是JSTL&#xff1f;&#xff08;JavaServer Pages Standard Tag Library&#xff09;二、使用JSTL前的准备三、核心标签库常用标签详解1. <c:out>&#xff1a;输出内容&#xff08;替代<% %>&#xff09;2. <c:i…...

【C语言】用铁路系统来类比流,管道,进程,线程,内存,输入输出等

用**铁路网络**来比喻计算机中的这些概念会非常形象。下面是一个完整的类比体系,帮助你直观理解它们之间的关系: --- ### **1. 核心角色对照表** | **计算机概念** | **铁路网络比喻** | |--------…...

PCA——主成分分析数学原理及代码

主成分分析 PCA的目的是&#xff1a;对数据进行一个线性变换&#xff0c;在最大程度保留原始信息的前提下去除数据中彼此相关的信息。反映在变量上就是说&#xff0c;对所有的变量进行一个线性变换&#xff0c;使得变换后得到的变量彼此之间不相关&#xff0c;并且是所有可能的…...

[Windows] Adobe Camera Raw 17.2 win/Mac版本

[Windows] Adobe Camera Raw 链接&#xff1a;https://pan.xunlei.com/s/VOOIAXoyaZcKAkf_NdP-qw_6A1?pwdpd5k# Adobe Camera Raw&#xff0c;支持Photoshop&#xff0c;lightroom等Adobe系列软件&#xff0c;对相片无损格式进行编辑调色。 支持PS LR 2022 2023 2024 2025版…...

基于计算机视觉的行为检测:从原理到工业实践

一、行为检测的定义与核心价值 行为检测(Action Recognition)是计算机视觉领域的关键任务,旨在通过分析视频序列理解人类动作的时空特征。其核心价值体现在时序建模和多尺度分析能力上——系统需要捕捉动作的起始、发展和结束全过程,同时适应不同持续时间(0.1秒至数分钟)…...

基于 OpenCV 的图像与视频处理

基于 OpenCV 的图像处理 一、实验背景 OpenCV 是一个开源的计算机视觉库&#xff0c;广泛应用于图像处理、视频分析、目标检测等领域。通过学习 OpenCV&#xff0c;可以快速实现图像和视频的处理功能&#xff0c;为复杂的应用开发 奠定基础。本实验旨在通过实际代码示例&…...

B树的异常恢复

B-Tree & Crash Recovery B树作为平衡的n叉树 高度平衡树 许多实用的二叉树&#xff08;如AVL树或红黑树&#xff09;被称为高度平衡树&#xff0c;这意味着树的高度&#xff08;从根节点到叶子节点&#xff09;被限制为Ο(log &#x1d441;)&#xff0c;因此查找操作的…...

Centos9 离线安装 MYSQL8

centos 9 离线安装 mysql 8 参考教程 1. 官网下载mysql 下载地址 2. 将文件传输到Centos中解压 软件全部安装到了/opt中 在opt中新建mysql目录&#xff0c;解压到mysql目录中 tar -xvf mysql压缩文件 mysql[rootcentoshost mysql]# ls mysql-community-client-8.4.5-1.e…...

【RabbitMQ | 第2篇】RabbitMQ 控制台实现消息路由 + 数据隔离

文章目录 同步调用和异步调用MQRabbitMQ1. RabbitMQ控制台实现交换机路由到队列1.1 创建队列1.2 将消息发送给交换机&#xff0c;是否会到达队列 2. RabbitMQ控制台实现数据隔离2.1 添加一个用户2.2 创建新的虚拟主机 同步调用和异步调用 同步调用是指完成一个功能&#xff0c…...

算法—选择排序—js(场景:简单实现,不关心稳定性)

选择排序原理&#xff1a;&#xff08;简单但低效&#xff09; 每次从未排序部分选择最小元素&#xff0c;放到已排序部分的末尾。 特点&#xff1a; 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) 不稳定排序 // 选择排序 function selectionSort(arr) {for (let …...

龙舟中国行走进湖南娄底 2025湖南省龙舟联赛娄底站盛大举行

鼓声震天破碧波&#xff0c;百舸争流显豪情。2025年4月20日星期日&#xff0c;"龙舟中国行2025"首站——龙舟中国行走进湖南娄底2025湖南省龙舟联赛娄底双峰站在双峰县湄水河育才桥至风雨桥水域火热开赛。12支劲旅劈波斩浪&#xff0c;在青山绿水间上演传统与现代交织…...

重构之去除多余的if-else

一、提前返回&#xff08;Guard Clauses&#xff09; 适用场景&#xff1a;当 else 块仅用于处理异常或边界条件时。 优化前&#xff1a;if (isValid) {doSomething(); } else {return; }优化后&#xff1a;if (!isValid) return; // 提前处理异常&#xff0c;主流程保持简洁…...

【Vim】vim的简单使用

文章目录 1. vi的模式2. 按键使用说明2.1 一般命令模式光标移动替换和查找删除/复制/粘贴 2.2 编辑模式插入/替换 2.3 命令行模式保存/退出环境修改 3. vim的缓存4. vim可视区块5. vim多文件编辑6. vim多窗口功能7. vim关键词补全 1. vi的模式 一般命令模式&#xff1a;以vi打…...

【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析

在当今互联网技术飞速发展的时代&#xff0c;分布式系统的架构设计愈发复杂。消息队列作为分布式系统中重要的组件&#xff0c;在解耦应用、异步处理、削峰填谷等方面发挥着关键作用。RocketMQ 作为一款高性能、高可靠的分布式消息中间件&#xff0c;被广泛应用于各类互联网场景…...

hadoop分布式部署

1. 上传jdk和hadoop安装包到服务器 2. 解压压缩包 tar xf jdk1.8.0_112.tgz -C /usr/local/ tar xf hadoop-3.3.6.tar.gz -C /usr/local/3. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld4. 修改配置文件 core-site.xml、hadoop-env.sh、yarn-env.sh、…...

C++面试题集合(附答案)

C全家桶 C基础 1. C和C有什么区别&#xff1f; 2. C语言的结构体和C的有什么区别&#xff1f; 3. C 语言的关键字 static 和 C 的关键字 static 有什么区别&#xff1f; 4. C 和 Java有什么核心区别&#xff1f; 5. C中&#xff0c;a和&a有什么区别&#xff1f; 6. …...