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

OpenStack Nova 创建虚拟机

创建虚拟机的过程是一个经典的分布式、异步、状态驱动的工作流。其核心设计哲学是:API 接收请求 -> 调度决策 -> 资源分配 -> 虚拟化层执行。整个过程涉及多个 Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。

1、基本流程

sequenceDiagramparticipant Userparticipant nova-apiparticipant DB as Nova DBparticipant MQ as Message Queueparticipant Schedulerparticipant Conductorparticipant Computeparticipant Libvirtparticipant Glanceparticipant Neutronparticipant CinderUser->>nova-api: 1. POST /servers (创建实例)nova-api->>DB: 2. 创建初始实例记录(state: BUILDING)nova-api->>MQ: 3. cast(run_instance to scheduler)Scheduler->>MQ: 4. 获取消息Scheduler->>DB: 5. 查询资源Scheduler->>MQ: 6. cast(build_and_run_instance to compute.X)Compute->>MQ: 7. 获取消息Compute->>Conductor: 8. 请求资源(镜像、网络等)Conductor->>DB: 9. 查询数据Conductor-->>Compute: 10. 返回信息Compute->>Glance: 11. 下载镜像Compute->>Neutron: 12. 分配网络Compute->>Cinder: 13. 挂接卷(如适用)Compute->>Libvirt: 14. 定义并启动域(XML)Libvirt-->>Compute: 15. 成功Compute->>DB: 16. 更新状态(state: ACTIVE)Compute->>MQ: 17. 发送状态事件

流程可分为三大阶段:

  1. API 阶段 (nova-api):接收并验证请求,创建数据库记录,立即返回响应,将后续任务异步下发。
  2. 调度阶段 (nova-scheduler):决策虚拟机在哪个计算节点上启动。
  3. 构建阶段 (nova-compute):与各类服务交互准备资源,调用 Hypervisor 真正创建虚拟机。

2、详细流程源码分析

2.1 API请求入口

nova/api/openstack/compute/servers.py

# nova/api/openstack/compute/servers.py (Caracal版本)class ServersController(wsgi.Controller):@wsgi.response(202)@validation.schema(schema_server_create_v242, '2.42')def create(self, req, body):"""处理创建虚拟机API请求"""context = req.environ['nova.context']server = body['server']# 1. 参数校验与提取name = server['name']image_ref = server.get('imageRef')flavor_ref = server.get('flavorRef')# 2. 创建实例对象instance = objects.Instance(context=context)instance.display_name = nameinstance.image_ref = image_ref# 3. 调用Compute API(instances, resv_id) = self.compute_api.create(context,instance_type=flavor_ref,image_href=image_ref,# ...其他参数)# 4. 返回202 Accepted响应return wsgi.ResponseObject({}, status=202)

2.1 核心创建逻辑

nova/compute/api.py

# nova/compute/api.py (Caracal版本)class API(base.Base):@check_instance_create@wrap_exception()def create(self, context, instance_type, image_href, **kwargs):# 1. 配额检查(使用Placement API)self._check_quotas(context, requested_cores, requested_ram, ...)# 2. 创建RequestSpec对象request_spec = objects.RequestSpec(context=context,flavor=flavor,image=image_meta,num_instances=num_instances,# ...其他参数)# 3. 安全组处理(使用Neutron API)security_groups = self._get_requested_security_groups(context, ...)# 4. 异步调用Conductorself.compute_task_api.schedule_and_build_instances(context,request_spec=request_spec,security_groups=security_groups,# ...其他参数)

2.3 调度决策

nova/scheduler/manager.py

# nova/scheduler/manager.py (Caracal版本)class SchedulerManager(manager.Manager):@messaging.expected_exceptions(exception.NoValidHost)def select_destinations(self, context, request_spec, ...):# 1. 获取所有主机状态(从Placement)hosts = self.host_manager.get_all_host_states(context)# 2. 应用过滤器链filter_properties = self._get_filter_properties(request_spec)hosts = self.host_manager.get_filtered_hosts(hosts, filter_properties)# 3. 权重计算weighed_hosts = self.host_manager.get_weighed_hosts(hosts, request_spec, filter_properties)# 4. 选择目标主机selections = []for i in range(request_spec.num_instances):if not weighed_hosts:raise exception.NoValidHost(reason="")chosen_host = weighed_hosts.pop(0).objselections.append(chosen_host)return selections

2.4 计算节点执行

nova/compute/manager.py

# nova/compute/manager.py (Caracal版本)class ComputeManager(manager.Manager):@wrap_exception()@wrap_instance_faultdef build_and_run_instance(self, context, instance, request_spec, ...):# 1. 准备网络(使用Neutron API)network_info = self.network_api.allocate_for_instance(context, instance, requested_networks, ...)# 2. 处理块设备(使用Cinder API)block_device_info = self._prep_block_device(context, instance, bdms, ...)# 3. 获取镜像元数据image_meta = self._get_image_metadata(context, instance.image_ref)# 4. 调用Driver创建虚拟机self.driver.spawn(context, instance, image_meta,injected_files=injected_files,admin_password=admin_password,network_info=network_info,block_device_info=block_device_info)# 5. 更新实例状态instance.vm_state = vm_states.ACTIVEinstance.task_state = Noneinstance.save()

2.5 Hypervisor交互

nova/virt/libvirt/driver.py

# nova/virt/libvirt/driver.py (Caracal版本)class LibvirtDriver(driver.ComputeDriver):def spawn(self, context, instance, image_meta, **kwargs):# 1. 准备磁盘(支持多种后端)disk_info = self._create_image(context, instance, image_meta)# 2. 生成安全启动配置secure_boot = self._get_secure_boot_config(instance)# 3. 生成Libvirt XML# /var/lib/nova/instances/<instance-uuid>/libvirt.xml xml = self._get_guest_xml(context, instance, disk_info,network_info=kwargs['network_info'],block_device_info=kwargs['block_device_info'],secure_boot=secure_boot)# 4. 定义并启动虚拟机guest = self._host.get_guest()guest.create(xml, flags=libvirt.VIR_DOMAIN_START_PAUSED)# 5. 注入元数据self._inject_data(instance, network_info=kwargs['network_info'])# 6. 恢复虚拟机运行guest.resume()

3、常见问题

3.1 查看实例错误状态

第一步永远是查看实例的详细状态

openstack server show b2c3d4e5-f6g7-8901-bcde-f12345678901 -c status -c fault
+--------+----------------------------------------------------------------------------------------------------+
| Field  | Value                                                                                              |
+--------+----------------------------------------------------------------------------------------------------+
| fault  | {                                                                                                  |
|        |   "message": "No valid host was found. There are not enough hosts available.",                     |
|        |   "code": 500,                                                                                     |
|        |   "details": "Exceeded maximum number of retries. Exception: No valid host was found. ...",        |
|        |   "created": "2025-09-15T10:23:12Z"                                                                |
|        | }                                                                                                  |
| status | ERROR                                                                                              |
+--------+----------------------------------------------------------------------------------------------------+

fault 字段通常会给出比较直接的错误原因。

3.2 根据状态定位问题阶段

  • 长时间处于 SCHEDULING 状态

    • 问题nova-scheduler 无法找到合适的主机。
    • 排查
      1. 资源不足:检查目标主机是否有足够的 CPU、内存、磁盘。使用 openstack hypervisor stats showopenstack hypervisor show <hypervisor-id>
      2. 过滤器导致:检查 nova-scheduler 日志,看主机是如何被过滤掉的。常见于强制策略(如 DifferentHostFilter 找不到另一个实例)。
      3. Placement 数据不同步:运行 nova-manage placement sync 同步数据。
  • 长时间处于 SPAWNING 状态或最终变为 ERROR

    • 问题nova-compute 在目标节点上构建失败。
    • 排查
      1. 查看计算节点日志:这是最重要的步骤!日志路径通常为 /var/log/nova/nova-compute.log
      2. 镜像下载失败:Glance 镜像 URL 不可达、镜像格式不支持(如 raw, qcow2)、磁盘空间不足(检查 /var/lib/nova/instances/_base)。
      3. 网络问题:Neutron 无法分配端口(如 IP 耗尽、安全组规则错误)。查看 Neutron 相关日志 (/var/log/neutron/*.log)。
      4. Hypervisor 问题:Libvirt 权限问题(检查 libvirtd 进程和 /var/lib/libvirt/ 权限)、QEMU 进程启动失败(检查 ps aux | grep qemu)、SElinux 或 AppArmor 策略限制。
      5. 卷挂载失败:Cinder Volume 状态不是 available 或连接器(connector)信息有误。
  • 立即变为 ERROR

    • 问题:通常发生在 API 或调度阶段,是前置检查失败。
    • 排查
      1. 查看 API 节点日志/var/log/nova/nova-api.log
      2. 配额不足:检查项目配额 openstack quota show <project>
      3. 参数无效:指定的 Flavor、Image、Network 不存在或不可见。
      4. Keystone 认证失败:Token 过期或权限不足。

3.3 核心排查工具与命令

  1. 日志!tail -f /var/log/nova/nova-*.log。使用 grep <instance-uuid> 过滤特定实例的日志,这是最强大的工具。
  2. 虚拟化层检查
    • 登录到计算节点,检查 Libvirt 域:virsh list --all(看实例是否存在)。
    • 如果存在但有问题,查看其定义:virsh dumpxml <instance-name>
    • 查看虚拟机控制台日志:virsh console <instance-name>(需在镜像内启用 console)。
  3. 网络命名空间:Neutron 使用 Linux Network Namespace。在计算节点上,使用 ip netns list 找到实例相关的命名空间(如 qrouter-qdhcp-),然后 ip netns exec <ns-name> bash 进入命名空间内部调试网络(ping, ip addr)。

相关文章:

OpenStack Nova 创建虚拟机

创建虚拟机的过程是一个经典的分布式、异步、状态驱动的工作流。其核心设计哲学是:API 接收请求 -> 调度决策 -> 资源分配 -> 虚拟化层执行。整个过程涉及多个 Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 1、基本流程 sequenceDiagramparticipan…...

AI革命2025:新一代人力资源管理系统十大标杆产品评测

导读:在数字化浪潮推动下,AI与移动技术正在重塑人力资源管理系统的行业格局。本文盘点了2025年中国市场十款主流智能人力资源管理系统,涵盖集团型、成长型及中小企业的核心需求。重点介绍红海eHR在AI智能体、移动端全流程和数据驱动决策上的创新优势,并通过多维度评分与场景…...

企业HR系统选型全指南:百人初创到万人集团的数字化方案与实施路径

导读:本篇文章围绕企业不同规模的人力资源管理需求,梳理了从百人初创到万人集团的HR系统选型逻辑。通过分层痛点分析、科学评估体系、信息密集对比表和真实案例,并系统推荐了包括i人事、北森、红海云在内的多款市场热门产品,助力企业高效推进HR数字化转型。本文属于深度内容…...

C++ auto关键字

C++ auto关键字的原理与使用auto关键字: 一、C++98标准auto关键字的作用和C语言的相同,表示自动变量,是关于变量存储位置的类型饰词,通常不写,因为局部变量的默认存储就是auto 1 void foo(void) 2 { 3 int a; //变量存储在栈区 4 auto int b; //…...

API 响应体加密场景下的调试实践:Postman 的局限与 Apipost 的优化

在日常开发和测试过程中,我们经常会遇到如下场景: 后端服务出于安全性或协议规范的考虑,对 API 的响应体进行了加密或编码处理,例如 Base64 编码、AES/RSA 加密等。这样做在生产环境中是合理且必要的,能够避免敏感数据被明文传输。但与此同时,也为开发和测试阶段的调试带…...

ARM主板:低功耗高性能的嵌入式计算核心

在当今数字化飞速发展的时代,计算机硬件领域不断创新变革,其中ARM主板凭借其独特的优势脱颖而出,成为众多应用场景的理想选择。无论是智能家居、工业自动化还是物联网设备等,都能看到它活跃的身影。下面将深入探讨ARM主板的相关特性、优势以及广泛的应用场景。 什么是ARM主…...

2025绩效管理必知

HR 往往是一个企业绩效管理的推动者,但是在推动的背后,实际有一个非常重要的目标,那就是提高个人和团队的绩效,从而提升企业整体的绩效。绩效管理就是要找到 “应该实现什么 “和 “如何实现 “这些问题的答案。它是关于寻找更有效的方法来提高业务绩效。 绩效管理关注什么…...

【刷题笔记】cf808f

CF803F 场上死磕无法战胜,原来是个绿题吗哈哈。 考虑到跟序列的顺序无关,直接在值域上做。我们设 \(f_i\) 表示 \(\gcd = i\) 的方案数。那么有 \[f_i = 2^{g_i} - 1 - \sum_{i | d \land i \ne d} f_d \]\(g_i\) 是原序列中是 \(i\) 倍数的个数。那么调和级数 \(O(V\log V)\…...

Laravel APP_DEBUG=true:存在账户信息泄露风险

Laravel APP_DEBUG=true:存在账户信息泄露风险 在 Laravel 开发过程中,APP_DEBUG=true 是一个高频使用的配置 —— 它能在代码报错时显示详细的堆栈跟踪、变量值和配置信息,极大提升调试效率。但鲜少有人意识到,若将开启调试模式的项目部署到生产环境,会直接沦为账户信息泄…...

将当前目录下的所有文件 / 目录完整复制到/tmp目录,且会保留文件的权限、所有者、时间戳等属性

tar cvf - * | (cd /tmp && tar xvfp -)...

C# 操作 DXF 文件指南

C# 操作 DXF 文件主要借助一些专业的库来解析其结构并处理其中的图形数据。 C# 操作 DXF 文件指南 摘要 通过 C# 操作 AutoCAD 导出的 DXF 文件,你可以实现图纸的读取、编辑、创建和转换。本指南将介绍两个主流的开源库 netDxf 和 DXF.NET (IxMilia.Dxf),并提供核心代码示例、…...

在Proxmox中部署Security Onion的安全配置实战

本文详细记录了在Proxmox虚拟化环境中部署Security Onion网络监控系统的完整过程,重点解决了官方文档未涉及的网桥配置问题,包括创建无IP嗅探接口、Linux网桥设置及虚拟机网络设备配置等关键技术环节。在Proxmox中部署Security Onion的安全配置实战 文档说明 Security Onion项…...

报表到 BI:企业数据从展示到决策的进阶之路

报表与BI分析:从数据展示到决策洞察的进化之路 企业数字化转型的浪潮里,“数据驱动决策” 早成共识,可不少企业仍在 “报表” 与 “BI 分析” 的迷雾里打转:是替代,还是互补?为何满墙报表难寻洞察?为何 BI 工具常被业务部门当作 “数据探索的钥匙”?本文从本质差异、能…...

抢先体验智能测试时代,QA必备AI测试工具

敏捷开发模式下的测试挑战 敏捷开发模式下,业务快速迭代,给测试团队带来了前所未有的压力。每一次功能升级或系统迁移,都意味着从功能测试、兼容性测试、性能测试到安全性的大规模回归验证。测试规模成倍增长,而团队人力却往往难以及时扩充。 再加上多设备、多系统环境下频…...

Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)

本文分享自天翼云开发者社区《Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)》,作者:l****n DataStreamApidataStreamApi是一切的基础,处于调度flink程序处理任务的起点。Flink 有非常灵活的分层 API 设计,其中的核心层就是 DataStream/DataSet API。由…...

内部排序-直接插入排序

内部排序-直接插入排序内部排序-直接插入排序 写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷 📋 算法概述 直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排号序的…...

玩转n8n测试自动化:核心节点详解与测试实战指南

掌握节点,掌握自动化测试的核心 在n8n中,节点(Node)是构建自动化工作流的基础单元。每一个节点都代表一个特定的操作或功能,通过将不同的节点连接起来,我们就能创造出强大的测试自动化流程。本章将深入讲解测试工程师必须掌握的几类核心节点,并通过实际测试场景展示如何…...

Linux:龙晰系统(Anolis)更新yum(dnf)仓库源

一、备份现有仓库源 1. 查看当前系统版本 cat /etc/os-release2. 备份现有仓库源 # 一共两个文件,都需要备份下:AnolisOS-BaseOS.repo AnolisOS-AppStream.repo cp /etc/yum.repos.d/AnolisOS-BaseOS.repo /etc/yum.repos.d/AnolisOS-BaseOS.repo.bak cp /etc/yum.repos.d/…...

(笔记)多项式基础 FFT

多项式 \[F(x)=\sum_{i=0}^{i-1}a_ix^i \]对多项式进行乘法,就是对两个多项式进行加法卷积。其中卷积结果 \(C(k)=\sum_{i=0}^kA(i)B(k-i)\)。 分治乘法 将 \(A(x)\) 左右拆半,不足则末尾(最高位)补上 \(0\),令 \(n=2^k\)。则 \[A(x)=A_0(x)+x^{n/2}A_1(x) \]\[A_0(x)=\su…...

MAC tomcat启动报错

MAC tomcat启动报错 org/apache/catalina/startup/Bootstrap has been compiled by a more recent前言 配置好tomcat启动报错 已连接到地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机 已与地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机断开连接 Exception in thread…...

研究生-必看-倒计时3天/武汉科技大学主办/稳定EI会议/高层次教授出席报告

武汉科技大学主办/EI稳定检索/大数据与智慧医学📢大数据与智慧医学国际学术会议(BDIMed 2025) 🔍武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 🔍征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像…...

LGP7113 [NOIP 2020] 排水系统 学习笔记

LGP7113 [NOIP 2020] 排水系统 学习笔记 Luogu Link 题意简述 给定一个 \(n\) 个点的 \(\texttt{DAG}\)。我们认为它是一个排水系统。 节点 \(u\) 有 \(d_u\) 条输出管道,污水会被平分成 \(d_u\) 份流向下家节点。特别的,\(d_u=0\) 时认为这个节点直通污水厂,是一个最终排水…...

MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1

问题:MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1 原因:在 MySQL 中遇到错误 MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... 通常是由于尝试将一个不兼容的字符编码插入到数据库中导致的。…...

Burp Suite Professional 2025.9 发布 - Web 应用安全、测试和扫描

Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities 请访问原文链接:https://sysi…...

SQL Server 2022 RTM 累积更新 #21 发布

SQL Server 2022 RTM 累积更新 #21 发布SQL Server 2022 RTM 累积更新 #21 发布 Microsoft SQL Server 2022 RTM GDR & CU21 (2025 年 9 月更新) relational database management system (RDBMS) & Transact-SQL (T-SQL) 请访问原文链接:https://sysin.org/blog/sql-s…...

针对WPF的功耗优化(节能编程)

一、UI渲染优化 1. 减少不必要的视觉元素<!-- 避免过度使用复杂效果 --> <Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><!-- 使用简单样式代替复杂模板 --> </Border><!-- 而…...

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

微算法科技(NASDAQ: MLGO)开发Rollup技术,探索区块链扩展性解决方案

随着区块链技术的广泛应用,其扩展性问题逐渐成为制约行业发展的核心瓶颈。传统区块链架构在高频交易场景下,因链上资源有限,导致交易确认时间长、手续费高昂,难以满足商业级应用需求。为解决这一痛点,微算法科技(NASDAQ: MLGO)基于状态通道技术积累,进一步研发Rollup技…...

征稿倒计时3天/武汉科技大学主办/医学人工智能/现可享优惠

📢大数据与智慧医学国际学术会议(BDIMed 2025) 📮武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 📆征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像和信息学 等方向均可投递 🔥参会多元化:投稿…...

生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!

本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。作者:执少 对,这是一篇你明知道怎么回事儿,但还是会点进来看的文章! 本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构…...

NOI linux使用教程

一、配置NOI linux环境为中文 1. 桌面右键setting 2.下拉找到地区&语言,点击Manage Installed Languages 3. 选择安装其他语言包Install / Remove Languages 4. 勾选简体中文Chinese (simplified) 5. 输入密码后确认 6. 等待安装即可 7. 安装完后,选择语言下拉选项中的中…...

springboot 文件处理框架

-------------------------------------------------------------------------------------------Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:EasyExcel:是阿里巴巴开源…...

Docker:龙晰系统(Anolis)更新yum源下载docker

一、配置Docker的yum库 1. 查看系统版本 # 查看系统版本 cat /etc/os-release2. 配置系统yum源 这里可以看我的另一篇文章: 3. 卸载旧版docker与podman 重点:podman与docker冲突!!龙蜥Anolis Linux默认安装Podman作为容器管理工具,这是由于Podman是Red Hat(龙蜥的开发者之…...

针对单输入单输出、多输入多输出及三阶系统带约束的模型预测控制的实现

针对单输入单输出(SISO)、多输入多输出(MIMO)及三阶系统带约束的模型预测控制(MPC)的实现 一、SISO系统MPC实现 1. 系统建模与离散化 % 传递函数定义(二阶惯性环节) s = tf(s); G = 1/(s^2 + 2*s + 1); Ts = 0.1; % 采样时间 Gd = c2d(G, Ts, zoh); % 离散化关键参数:…...

vue3中父子组件数据同步的默认方式update:xxx

update:xxx 是Vue 3中实现自定义v-model的约定。它的工作原理是: 子组件通过emit(update:propName, newValue)通知父组件需要更新某个属性父组件可以通过v-model:propName="data"或@update:propName="data = $event"来接收这个更新 父组件:<template&…...

解决 C# 当另一个read操作挂起时不能调用read方法的问题

life runs on code作者: zhaotianff转载请注明出处...

AI辅助编程_工具和方式

AI编程AI 编程 这个时代的方式定义问题、建构系统、引导协作 方式 1. Copilot 模式:你写头它写尾 2. Agent 模式:你说话,它写程序 “氛围感编程” 产品形态插件和IDE两种 模式 :问答模式(Ask)、文件编辑模式(Edit)、智能体模式(Agent) 国内百度 腾讯: https://c…...

[完结10章]Java大模型工程能力必修课,LangChain4j 入门到实践

在人工智能技术飞速发展的今天,大型语言模型(LLM)已成为推动创新的核心驱动力。对于Java开发者而言,掌握大模型工程能力不再是一种选择,而是一种必需。LangChain4j作为专为Java开发者设计的工具库,正在成为连接传统Java工程与大模型应用的重要桥梁。参考资料:/s/1kSb5z5…...

k8s源码分析——kubectl命令行交互

Cobra库 k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:go get -u github.com/spf13/cobra@latestcobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:Use: 命令名称。Aliases: 命令的别名。Suggest…...

将 seata 2.5 发布到私服

将 seata 2.5 发布到私服1.概述 我们在使用seata 做分布式事务的时候,有时需要将 seata 发布到私服中,方便 修改和调整。 2.实现过程 2.1 在根目录下的pom.xml 中 增加发布配置 <distributionManagement><repository><id>jpaas-release</id><url&…...

一些感悟

1. 突破分型 50分 2. 驱动浪 30分 3. 驱动浪突破分型 80分 4. 驱动浪突破分型 回调61.8% 或 80% 做单 100分 其中突破分型是做单前提 重中之重!...

五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?

在当今数字化转型的浪潮中,低代码开发平台以其可视化、拖拽式的开发模式,极大地降低了企业应用开发的门槛和成本,成为企业提升效率、快速响应市场变化的重要工具。对于预算有限的中小企业、初创团队或业务部门而言,免费的低代码平台是绝佳的入门选择。本文将为您客观评析五…...

ubuntu历史版本下载

https://old-releases.ubuntu.com/releases/LTS版本:...

读书笔记:数据库索引的智能优化:反向键与降序索引

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈 代码实现:点击查看代码def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_o…...

零成本搭建企业系统:五款免费低代码平台推荐

概述 在数字化转型的背景下,低代码平台正成为企业快速构建信息系统的重要工具。它们通过可视化、组件化的方式,大幅降低了开发门槛和时间成本,即使没有编程背景的业务人员也能参与系统搭建。本文将为大家推荐五款值得尝试的免费低代码平台,帮助中小团队或个人实现零成本高效…...

故障处理:access$表在数据库丢失的恢复

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。故障处理:access$表在数据库丢失的恢复 下面是测试一把access$基表丢失…...

从需求出发:教你判断选斑斑还是织信

斑斑低代码以免费、私有化部署优势,适合中小企业;织信则提供高端解决方案,适合中大型企业,两者各有特色。​在数字化转型的浪潮中,低代码开发平台正成为企业降本增效的利器。在众多国产平台中,斑斑低代码和织信无疑是受关注的两个选择。本文将从多个维度深入分析这两款平…...

PLC结构化文本设计模式——建造者模式(Builder Pattern)

PLC Structured Text Design Patterns PLC结构化文本设计模式——建造者模式(Builder Pattern) 介绍 建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。 建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离…...

C++ - STL - 迭代器

什么是迭代器?🤔 想象一下,你有一排整齐的书架,上面放着很多书。你现在想从第一本开始,一本一本地看书名。你怎么做呢? 你会用手指指着第一本书,看完书名后,手指移动到下一本书,再看书名,这样一直指到最后一本书。 在C++的STL中,迭代器就是你的"手指"!它…...