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

“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施​

云工作负载在性价比上的自然演进路径:

Intel ➜ AMD ➜ ARM

不信?来看看 Uber 的做法:

01/Arm架构:云计算新时代

2023 年 2 月,Uber 正式开启了一项战略性迁移:将从本地数据中心迁移至云端,采用 Oracle Cloud Infrastructure(OCI)和 Google Cloud Platform(GCP)作为主要平台。

虽然如此大规模的云迁移本身已极具挑战性,Uber 同时还设立了另一个野心勃勃的目标:在以 x86 为主的服务器环境中引入 Arm 架构。

这么做的原因何在?为了降低成本、提升性价比,并在不可预测的供应链环境中确保硬件灵活性。

随后,Uber 经历了一段充满技术挑战和跨团队协作的旅程,逐步将 Arm 主机纳入服务器集群中。

本文将重点介绍在向多架构环境过渡的过程中,我们遇到了哪些基础设施层面的技术难题。

OCI 战略

想要理解我们为何迁移到基于 Arm 架构的主机,首先要了解 OCI(Oracle Cloud Infrastructure)采用 Ampere 处理器的初衷——能源效率是所有超大规模云服务商采纳 Arm 的核心驱动力。

一直以来,Arm 都以移动设备的低功耗设计闻名,而这一优势已延伸至数据中心产品,Ampere 处理器在单位功耗性能上树立了新标杆。这不仅降低了能源成本,也为 OCI 带来了显著节省。

另一个不那么显眼但同样重要的优势是空间集约化:Ampere 处理器能在更小的数据中心空间内实现更高的计算密度,从而在机架级别实现更高性能,最大限度减少占地面积和基础设施成本。

Uber 的动机是什么?

归根结底,是追求硬件与容量的多样化。

作为致力于成为“零排放公司”的一员,采用高性能、高能效的服务器,是减少环境影响的重要一步。

OCI 实现的能源和空间节省,将直接为 Uber 转化为更佳的成本结构和更强的可持续运营能力。

迁移阶段

Uber 采用多架构环境是一个复杂的过程,涉及多个阶段的 Bootstrap自举、周密规划和跨团队执行。整体流程大致可分为七个阶段,如下图所示:

图 1:Arm 采用流程图

 

  • 主机准备:确保主机层软件兼容 Arm 架构
  • 构建准备:更新构建流水线以支持多架构容器镜像
  • 平台准备:增强部署系统,添加架构特定的调度约束与保护机制
  • SKU 验证:评估硬件可靠性与性能,确认是否可行
  • 工作负载:改造代码库与容器镜像以支持 Arm
  • 迁移准备:建立测试与监控机制,验证 Arm 上负载表现
  • 正式迁移:逐个工作负载迁移至 Arm 环境

尽管采用过程主要遵循顺序流程,但部分阶段是并行进行的,以便加快进度。

下面我们将探讨在基于 Arm 的主机上引导构建基础设施时面临的挑战:

初始目标

最初的目标其实很简单:为 Arm 构建一个服务,并使用现有的部署平台将其部署到基于 Arm 的主机上。但这个看似简单的目标,却揭示出基础设施各层对 x86 的高度依赖。

主机准备

构建与部署服务之前,必须确保主机可支持 Arm。这意味着从最底层开始。

第一步是构建 Arm 兼容的主机镜像,包含操作系统、内核及 Uber 核心基础设施依赖的各类主机级软件。

每个组件都必须被重构、测试并验证,以确保在 Arm 硬件上稳定运行。一旦主机镜像准备完毕,我们就可以将 Arm 主机集成进服务器集群,为下一步构建服务打好基础。

构建服务

最初我们以为构建服务很简单,没想到这一步迅速暴露出问题:我们的构建基础设施在设计时高度依赖单一架构。

多年来,Uber 的容器镜像栈依赖于由 Makisu 支持的集中式 Buildkite™ 流水线。Makisu 是一种高效且快速的容器镜像构建器,专为单一架构构建优化。

尽管 Makisu 表现出色,但它有一个关键限制:它无法为 Arm 交叉编译。

这意味着我们不能简单地打开开关来生成兼容 Arm 的容器镜像。相反,我们必须重新思考如何在集群中构建容器镜像。

更糟糕的是,我们有超过 5000 个服务,其构建流程都紧密绑定 Makisu,包括大量定制化构建步骤。因此,从 Makisu 迁移是一项艰巨的任务。

构建流水线演进

我们没有完全放弃 Makisu,而是选择通过引入一个支持构建 Arm 架构镜像的新容器镜像构建器,来演进我们的构建流水线。

具体方案是:

  • 先用这个新的构建器创建出兼容 Arm 的 Makisu 版本,随后就能用这个 Arm 版 Makisu 为所有其他服务构建 Arm 版本。

但正如后文所示,在 Arm 上启动 Makisu 的过程引发了一系列连锁反应,最终需要引导构建更多组件。

我们选择了 Google Bazel™ 作为新的容器镜像构建工具,以应对挑战。

这一决策主要基于两大优势:

  • Bazel 能通过 OCI 容器镜像规则实现跨架构构建(即在非宿主架构上构建容器镜像)
  • 我们的 Monorepo 已在使用 Bazel

这一选择也使我们能够复用现有的工程经验与工具链,既保留了现有 Makisu 投入,又通过 Bazel 的跨平台能力打通了 Arm 构建的路径。

打破循环依赖

Bazel 加入构建流程后,我们可以构建出 Arm 版 Makisu。但 Makisu 运行在 Buildkite CI 系统上,而 Buildkite 又依赖我们名为 Odin 的 Stateful 平台。

Odin 又依赖一系列核心主机代理程序(日志、指标、网络等),而这些代理都由 Makisu 构建。这导致一个“循环依赖”:我们必须将这些组件由 Makisu 构建迁移至 Bazel 构建,从主机代理 → 有状态平台的组件 → Buildkite → Makisu。

我们使用 Bazel 的多架构功能,系统地处理每一层,逐步改造我们的基础设施。

图2:引导构建栈的组件

分布式构建流程

一旦 Makisu 和整个 Buildkite 栈在基于 Arm 的主机上运行起来,我们迈出了下一个重要步骤:通过为容器镜像设置分布式构建流水线来推进构建设置。

这个新的流水线将构建过程多路复用到 Arm 和 x86 主机上,在每个架构上本地运行 Makisu。

镜像构建完成后,流水线会触发最后一步,使用多架构容器 manifest 将 x86 和 Arm 镜像合并为一个统一的多架构容器镜像。

图 3:分布式容器镜像构建流程

 

该架构优势显著:

  • 无需整体迁移至 Bazel,节省人力成本
  • 原生支持无法交叉编译的工作负载
  • 避免交叉编译的性能开销,缩短构建时间,帮助我们满足构建延迟的 SLA 要求

但缺点也存在:构建成本翻倍——因为需要为两种架构分别构建容器镜像。

截至本文撰写时,我们每周要进行超过 40 万次容器镜像构建,这种额外成本很快变得非常可观。但即便如此,从单位经济效益来看,向 Arm 架构过渡仍然物有所值。

此外,多架构构建支持渐进式迁移策略,因为同一个镜像标签可以同时部署在 Arm 和 x86 主机上。

首批服务上线

有了多架构镜像构建能力后,下一步是部署支持 Arm 的无状态和有状态平台。

在 Uber,我们在逐步引入生产环境变更时非常谨慎,逐步扩大变更范围,因此构建了基于架构的调度约束和回滚机制。

例如,如果部署的镜像仅有 x86 版本,系统将自动放弃 Arm 调度约束并回滚到 x86 主机。这确保了稳定性。

最终,我们成功在 Arm 主机上部署并运行首批服务,证明了 Arm 与 x86 可共存于 Uber 的生产环境中。

02/结论

对 Uber 来说,这项浩大的工程不仅仅是为了节省成本,更是为了实现能效优化可持续发展基础设施灵活性

Arm 处理器在性能功耗比方面设立了新的行业基准,意味着更低的能耗和更高的数据中心部署密度。

基础设施引导构建的初步成功只是更大征程的开始。欢迎关注⌈ CloudPilot AI ⌋,获取更多基础设施建设的案例。

推荐阅读

全球化团队如何高效协作?航旅平台 Skyscanner 技术负责人的 3 年实践

云成本直降60%!Karpenter+Spot实例在QA环境的实战优化

多邻国打卡打到 AWS 发烧?小绿鸟年省 20% 实录

相关文章:

“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施​

云工作负载在性价比上的自然演进路径: Intel ➜ AMD ➜ ARM 不信?来看看 Uber 的做法: 01/Arm架构:云计算新时代 2023 年 2 月,Uber 正式开启了一项战略性迁移:将从本地数据中心迁移至云端,…...

java加强 -File

File类的对象可以代表文件/文件夹,并可以调用其提供的方法对象文件进行操作。 File对象既可以代表文件,也可以代表文件夹。 创建File对象,获取某个文件的信息 语法: File 对象名 new File("需要访问文件的绝对路径&…...

SQL注入 ---04

1 简单的sql注入 要求: 要有sql注入: 1,变量 2,变量要带入数据库进行查询 3,没有对变量进行过滤或者过滤不严谨 mysql> select * from users where id2 limit 0,1; 当我的语句这样写时查寻到的结果 当我修改为&…...

MySQL知识点总结(持续更新)

聚合函数通常用于对数据进行统计和聚合操作。以下是一些常见数据库系统(如 MySQL、PostgreSQL、Oracle、SQL Server 等)中常用的聚合函数: 常见的数据库聚合函数: COUNT():计算指定列中非空值的数量 SELECT COUNT(*) …...

数字信号处理-大实验1.1

MATLAB仿真实验目录 验证实验:常见离散信号产生和实现验证实验:离散系统的时域分析应用实验:语音信号的基音周期(频率)测定 目录 一、常见离散信号产生和实现 1.1 实验目的 1.2 实验要求与内容 1.3 实验…...

Qt操作SQLite数据库教程

Qt 中操作 SQLite 数据库的步骤如下&#xff1a; 1. 添加 SQLite 驱动并打开数据库 #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>// 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QSQLITE"); db.setData…...

【PSINS工具箱】基于工具箱的单独GNSS导航、单独INS导航、两者结合组合导航,三种导航的对比程序。附完整的代码

本文给出基于PSINS工具箱的单独GNSS导航、单独INS导航、两者结合组合导航(153EKF)的程序。并提供三者的轨迹对比、误差对比。 文章目录 运行结果MATLAB代码代码的简单介绍简介2. 平均绝对误差 (MAE)主要模块运行结果 三轴轨迹图: 各轴误差曲线: 命令行窗口的结果输出: …...

开发者的测试复盘:架构分层测试策略与工具链闭环设计实战

摘要‌ 针对测试复盘流于形式、覆盖率虚高等行业痛点&#xff0c;本文提出一套结合架构分层与工具链闭环的解决方案&#xff1a; ‌分层测试策略精准化‌&#xff1a;通过单元测试精准狙击核心逻辑、契约测试驱动接口稳定性、黄金链路固化端到端场景&#xff0c;实现缺陷拦截率…...

手写CString类

学习和理解字符串处理机制&#xff1a;手写 CString 类是深入学习字符串处理和内存管理的有效方式。通过实现构造函数、析构函数、赋值运算符等&#xff0c;能够理解字符串在内存中的存储方式、动态内存分配和释放的原理&#xff0c;以及如何处理字符串的复制、拼接、查找等操作…...

electron结合vue,直接访问静态文件如何跳转访问路径

在最外的app.vue或者index.vue的js模块编写 let refdade ref(1);//刷新&#xff0c;获得请求// 获取完整的查询字符串&#xff08;例如: "?dade/myms"&#xff09;const searchParams new URLSearchParams(window.location.search);// 获取 dade 参数的值&#xf…...

解读RTOS 第七篇 · 驱动框架与中间件集成

1. 引言 在面向生产环境的 RTOS 系统中,硬件驱动框架与中间件层是连接底层外设与上层应用的桥梁。一个模块化、可扩展的驱动框架能够简化外设管理,提升代码可维护性;而丰富的中间件生态则为网络通信、文件系统、图形界面、安全加密等功能提供开箱即用的支持。本章将从驱动模…...

Java GUI开发全攻略:Swing、JavaFX与AWT

Swing 界面开发 Swing 是 Java 中用于创建图形用户界面&#xff08;GUI&#xff09;的库。它提供了丰富的组件&#xff0c;如按钮、文本框、标签等。 import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class SwingExa…...

Cursor 0.5版本发布,新功能介绍

Cursor,这款流行的AI编程平台,刚刚在其v0.50更新中推出了一系列新功能。 首先,请将您的Cursor IDE更新到最新版本。当您打开Cursor时,您应该会在屏幕左下方收到关于最新版本发布的通知。 更多上下文控制: 对上下文的精细可见性,以及最新模型的MAX模式。 聊天升级: 导出…...

Android学习总结之Glide自定义三级缓存(实战篇)

一、为什么需要三级缓存 内存缓存&#xff08;Memory Cache&#xff09; 内存缓存旨在快速显示刚浏览过的图片&#xff0c;例如在滑动列表时来回切换的图片。在 Glide 中&#xff0c;内存缓存使用 LruCache 算法&#xff08;最近最少使用&#xff09;&#xff0c;能自动清理长…...

Maven 下载安装与配置教程

## 1. Maven 简介 Maven 是一个项目管理和构建自动化工具&#xff0c;主要用于 Java 项目。Maven 可以帮助开发者管理项目的构建、报告和文档&#xff0c;简化项目依赖管理。 ## 2. 下载 Maven 1. 访问 Maven 官方网站 [https://maven.apache.org/download.cgi](https://maven.…...

一篇解决Redis:持久化机制

目录 认识持久化 持久化方案 RDB&#xff08;Redis DataBase&#xff09; 手动触发 自动触发 小结 AOF(Append-Only File) AOF缓冲区刷新机制 AOF重写机制 AOF重写流程 ​编辑 混合持久化 认识持久化 我们都知道Mysql有四大特征&#xff0c;原子性&#xff0c;持久…...

使用IDEA创建Maven版本的web项目以及lombok的使用

1.新建项目 2.修改pom.xml 3.修改项目结构 4.在main/java下面写一个Servlet测试一下 然后当前页面往下滑 -Dfile.encodingUTF-8编写一句输出语句&#xff0c;测试是否成功部署配置&#xff0c;并选择到正确的位置&#xff1a; 回车以后 再回到idea里面&#xff0c;发现控…...

2025年AI开发者在开发者占比?

AI开发者在全球开发者中的占比目前没有一个统一且精确的数值&#xff0c;但根据行业报告和调研数据&#xff0c;可以给出以下大致的范围和趋势分析&#xff1a; 1. 综合估算范围 全球范围&#xff1a;AI/ML&#xff08;机器学习&#xff09;开发者约占开发者总数的 5%-15%&…...

SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话

一、引言 随着物联网(IoT)技术的快速发展&#xff0c;MQTT(Message Queuing Telemetry Transport)协议因其轻量级、低功耗和高效的特点&#xff0c;已成为物联网设备通信的事实标准。本文将详细介绍如何使用SpringBoot框架整合MQTT协议&#xff0c;基于开源MQTT代理EMQX实现设…...

Windows更新暂停七天关键注册表

环境&#xff1a;windows10 工具&#xff1a;procmon 下载地址&#xff1a;https://learn.microsoft.com/zh-cn/sysinternals/downloads/procmon 监控截图&#xff1a; 界面截图&#xff1a; 注&#xff1a; 1.北京时间差8小时 2.至少是从第二天恢复&#xff0c;即至少暂停…...

小白学习java第18天(上):spring

Spring &#xff1a;是一个轻量级&#xff08;一个小依赖就可以实现还不是轻量级&#xff09;的控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;的框架&#xff01; 优点&#xff1a; 1.Spring 是一个开源免费的框架&#xff08;容器&#xf…...

用Array.from实现创建一个1-100的数组

一、代码实现 let arr Array.from({length: 100}, (_, i) > i 1); 二、代码分析 1、Array.from(arrayLike, mapFn) &#xff08;1&#xff09;arrayLike 类数组对象&#xff08;如 { length: 100 }&#xff09;本身没有索引属性&#xff08;如 0: undefined, 1: undefi…...

什么是物联网 IoT 平台?

目录 物联网IoT平台的定义 物联网 IoT 平台发展历程 物联网IoT平台数据的特征 物联网IoT平台的处理流程 专为物联网 IoT 平台处理而生的时序数据库 物联网 IoT 平台时序数据处理面临的挑战及解决方案 收益与价值 物联网 IoT 平台企业案例 至数摇光 x TDengine 华自科技…...

PostgREST:无需后端 快速构建RESTful API服务

在现代 Web 开发中&#xff0c;API 已成为连接前后端的核心桥梁&#xff0c;传统的做法是通过后端框架来构建API接口&#xff0c;然后由前后端人员进行联调。 PostgREST是基于无服务器的一种实现方案&#xff0c;允许开发者将PostgreSQL数据库直接暴露为RESTful API&#xff0…...

3天北京旅游规划

北京 第一天应该集中在故宫和市中心区域&#xff0c;比如天安门、人民广场。这样可以体验到北京的历史和政治文化。午餐推荐烤鸭&#xff0c;因为这可是北京的特色。下午可以安排南锣鼓巷&#xff0c;既有古色古香的胡同&#xff0c;又有丰富的美食选择。 第二天的话&#xff0…...

MySQL--day1--数据库概述

&#xff08;以下内容全部来自上述课程&#xff09; 概述 1. 为什么要用数据库 持久化&#xff1a;内存中的数据断电之后就不存在了&#xff0c;所以需要持久化–>需要相关介质。 其中的一个介质就是数据库&#xff1a;存储数据量大、存储数据类型多 2. 数据库与数据库…...

[思维模式-38]:看透事物的关系:什么是事物的关系?事物之间的关系的种类?什么是因果关系?如何通过数学的方式表达因果关系?

一、什么是事物的关系&#xff1f; 事物的关系是指不同事物之间存在的各种联系和相互作用&#xff0c;它反映了事物之间的相互依存、相互影响、相互制约等特性。以下从不同维度为你详细阐述&#xff1a; 1、关系的类型 因果关系 定义&#xff1a;一个事件&#xff08;原因&a…...

图像识别与 OCR 应用实践

图像识别是一种让计算机具备“看”与“理解”图像能力的人工智能技术&#xff0c;其目标是从图像或视频中提取有意义的信息&#xff0c;如物体、人物、场景或文字。在现实生活中&#xff0c;这项技术被广泛应用于面部识别、自动驾驶、安防监控、医疗诊断、图像搜索等多个领域。…...

深入理解卷积神经网络:从基础原理到实战应用

在人工智能领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称 CNN&#xff09;凭借其强大的图像识别、处理能力&#xff0c;成为深度学习中不可或缺的技术。无论是自动驾驶汽车识别道路标志&#xff0c;还是医学影像分析辅助疾病诊断&…...

51单片机——交通指示灯控制器设计

设计目标 1、设计一交通灯控制&#xff0c;控制东西方向的红、黄、绿灯和南北方向的红、黄、绿灯。 2、可手动控制和自动控制&#xff0c;设置两个输入控制开关。 手动/自动开关&#xff0c;通过P11的按键输入控制 3、手动&#xff1a;设置开关P11&#xff0c;两种情况&#x…...

vue2 头像上传+裁剪组件封装

背景&#xff1a;最近在进行公司业务开发时&#xff0c;遇到了头像上传限制尺寸的需求&#xff0c;即限制为一寸证件照&#xff08;宽295像素&#xff0c;高413像素&#xff09;。 用到的第三方库&#xff1a; "vue-cropper": "^0.5.5" 完整组件代码&…...

面向对象设计模式之代理模式详解

文章目录 面向对象设计模式之代理模式详解面向对象思想&#xff1a;现代软件开发的基石代理模式&#xff1a;巧妙的中间层设计JavaScript 语法点与代理模式的结合JavaScript 实现代理模式示例代理模式的应用场景 面向对象设计模式之代理模式详解 在现代软件开发的浩瀚领域中&a…...

Leetcode209做题笔记

力扣209 题目分析&#xff1a;想象一个窗口遍历着这个数组&#xff0c;不断扩大右边界&#xff0c;让r。往窗口中添加数字&#xff1a; 此时我们找到了这个窗口&#xff0c;它的和满足了大于等于target的条件&#xff0c;题目让我求最短的&#xff0c;那么我们就尝试来缩短它&…...

SVG 知识详解:从入门到精通

SVG 知识详解&#xff1a;从入门到精通 作为一名前端开发者&#xff0c;我经常会被SVG的魅力所折服。这种基于XML的矢量图形格式&#xff0c;不仅能完美适配各种屏幕分辨率&#xff0c;还能通过CSS和JavaScript进行灵活控制。今天&#xff0c;就让我们一起来深入探索SVG的世界…...

编译openssl源码

openssl版本 1.1.1c windows 安装环境 perl 先安装perl&#xff0c;生成makefile需要 https://strawberryperl.com/releases.html nasm nasm 也是生成makefile需要 https://www.nasm.us/ 安装完perl输入一下nasm&#xff0c;看看能不能找到&#xff0c;找不到的话需要配…...

土壤温湿盐分传感器用于节水农业灌溉引领者三针设计原理便于安装维护

土壤温度部分是由精密铂电阻和高精度变送器两部分组成。变送器部分由电源模块、温度传感模块、变送模块、温度补偿模块及数据处理模块等组成&#xff0c;彻底解决铂电阻因自身特点导入的测量误差&#xff0c;变送器内有零漂电路和温度补偿电路&#xff0c;对使用环境有较高的适…...

Kotlin Compose 与传统 Android UI 开发对比

在移动应用开发领域,Android 开发一直是技术演进的前沿阵地,而 UI 开发作为用户与应用交互的核心环节,其技术体系的变革更是备受瞩目。 技术演进背景 Android UI 开发体系发展脉络 原生 View 体系阶段 在早期的 Android 开发中,原生 View 体系占据了主导地位。开发者通…...

docker-compose——安装redis

文章目录 一、编写docker-compose.yaml文件二、编写redis.conf文件三、启动docker-compose 一、编写docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…...

MFC 调用海康相机进行软触发

初始化相机类文件 #pragma once #include "MvCameraControl.h" class CMvCamera { public:CMvCamera();~CMvCamera();//初始化相机int InitCamera();int SaveCurrentImage(CString filePath);//关闭相机void CloseCamera();//设置int SetEnumValue(IN const char* s…...

第二章 变量和运算符

主要内容 关键字和标识符变量和常量八大基本数据类型Scanner键盘输入基本数据类型的类型转换算术运算符赋值运算符扩展赋值运算符比较运算符逻辑运算符三目运算符运算符的优先级别 学习目标 知识点要求关键字和标识符理解变量和常量掌握八大基本数据类型掌握Scanner键盘输入…...

【starrocks】StarRocks 常见 HTTP 操作与导入错误排查指南

文章目录 一、Stream Load&#xff1a;通过 HTTP 导入数据二、导入状态查询三、取消导入任务四、节点状态监控查看所有 Backend 状态&#xff1a;查看所有 Frontend 状态&#xff1a; 五、导入失败的排查方式1. 查询导入任务状态2. 下载详细错误日志3. 查看 FE/BE 节点日志FE 日…...

网络协议分析 实验七 FTP、HTTP、DHCP

文章目录 实验7.1 FTP协议练习二 使用浏览器登入FTP练习三 在窗口模式下&#xff0c;上传/下传数据文件实验7.2 HTTP(Hyper Text Transfer Protocol)练习二 页面提交练习三 访问比较复杂的主页实验7.3 DHCP(Dynamic Host Configuration Protocol) 实验7.1 FTP协议 dir LIST&…...

ET ProcessInnerSender类(实体) 分析

ProcessInnerSender 作用是进程内部发送Actor消息 字段 TIMEOUT_TIME 超时时间RpcId 用来累加requestCallback 存储RPC的回调事件list 用来获取MessageQueue中的Actor消息 方法 Awake 初始化在MessageQueue中注册待处理的消息队列Destroy 移除在MessageQueue中的消息队列U…...

远程连接工具

绿色轻便ToDesk https://www.todesk.com/download.html 向日葵 https://sunlogin.oray.com/download...

MySQL库级管理:数据库管理与存储引擎剖析

引言 各位数据库爱好者们好&#xff01;今天我们要深入探讨MySQL数据库的基本操作&#xff0c;这是每位开发者必须掌握的"内功心法" &#x1f4aa;。无论你是刚接触MySQL的小白&#xff0c;还是需要复习基础的老手&#xff0c;这篇教程都将带你系统学习数据库的核心…...

MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?

MongoDB 是一个面向文档的数据库&#xff0c;它的核心概念与传统的关系型数据库&#xff08;RDBMS&#xff09;有所不同。以下是它的四个主要核心概念&#xff1a; 文档 (Document) 定义&#xff1a; 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录&#…...

占位符读取标准输入缓冲区规则

1、如果标准输入缓冲区中的前若干个字符都是空白字符&#xff0c;%s&#xff0c;%d&#xff0c;%f都能直接跳过并且从第一个非空白字符开始读取&#xff0c;但%c不能&#xff0c;而是直接读取。 2、%s遇到空白字符时停止&#xff0c;不会读取遇到的空白字符。 3、%d遇到非数字…...

使用Docker部署MongoDB

使用Docker部署MongoDB 使用Docker部署MongoDB是一种快速、便捷的方式&#xff0c;以下是详细步骤&#xff1a; 1. 基本部署 拉取MongoDB镜像 docker pull mongo:latest运行MongoDB容器&#xff08;最简单方式&#xff09; docker run --name mongodb -d -p 27017:27017 m…...

如何通过命令提示符(CMD)检查虚拟化是否已启用

想确认 Windows 11 或 10 电脑或笔记本上的虚拟化是否已启用,可以使用命令提示符或 PowerShell 中的 systeminfo 命令。之前已经介绍过使用图形界面的检查方法。在大多数现代系统中,虚拟化默认在 BIOS 中启用,但我们无需打开 BIOS/UEFI 固件菜单即可确认这一点。 虚拟化是一…...

【氮化镓】AlGaN合金中成分相关的辐射响应

2025年,美国宾夕法尼亚州立大学Miaomiao Jin等人基于分子动力学模拟方法,研究了AlGaN合金中成分依赖的辐射响应。研究结果表明,AlGaN合金的辐射损伤特性与铝含量密切相关:随铝含量增加,单次碰撞事件产生的缺陷减少,但由于累积效应,富铝系统更易形成扩展间隙缺陷簇,导致…...