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

详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 所遇问题
    • 问题 1:Docker 容器启动的 Windows 实例调用了 KVM 驱动,但为什么用 `virsh list` 命令查不到虚拟机?这意味着它不是一个完整的虚拟机吗?
    • 问题 2:为什么通过 docker stats 查看时显示的是容器占用内存,而不是虚拟机的内存占用?
    • 问题 3:Linux 上使用 KVM 启动一个 Windows 虚拟机和通过容器启动一个虚拟机的区别(调用 KVM 驱动)
    • 问题 4:为什么在Linux上通过容器启动Windows(KVM)和Linux后,容器内部的网络表现不同?
  • 未来方向探讨
    • 1. 简化虚拟化管理:砍掉OpenStack和VMware
    • 2. Windows服务容器化部署
    • 3. Windows 容器结合 AD 实现私有云弹性使用
    • 4. 优化审计工具成本
    • 5. 网络管控统一化
    • 6. 简化高可用架构
  • 总结


前言

在通过 Docker 启动 Windows 容器的过程中,我对其调用 KVM 驱动的工作原理还不够了解。尤其是与传统虚拟化技术(如 libvirt)相比,这种方法的特殊性让我产生了许多疑问。在查阅了大量资料后,我整理出了一些问题及其解答,希望能帮助对这个话题感兴趣的朋友更好地理解 Docker 容器与虚拟化技术结合的独特之处。

所遇问题

问题 1:Docker 容器启动的 Windows 实例调用了 KVM 驱动,但为什么用 virsh list 命令查不到虚拟机?这意味着它不是一个完整的虚拟机吗?

解答:

  1. 为什么 virsh list 查不到虚拟机?
  • virsh list 的工作机制:
    virsh list 是用来管理和查看由 libvirt 管理的虚拟机的工具。如果虚拟机不是通过 libvirt 创建和管理的,virsh 是无法检测到它的。

  • - 
    

    在 Docker 容器中启动 Windows 实例时,通过挂载 /dev/kvm 与宿主机的 KVM 模块直接交互。这个过程绕过了 libvirt,而是可能通过 QEMU + KVM 的方式直接实现硬件虚拟化支持。

因此,virsh 无法列出这些由 Docker 启动的虚拟机实例,因为它们并未被 libvirt 管理。

  1. 这是不是一个完整的虚拟机?
    从严格意义上来说,它并不是传统的「完整虚拟机」,而是介于虚拟机和容器之间的一种轻量化虚拟化实现。
  • 容器化特性:

    • 使用 Docker 技术进行管理,具备容器的轻量化特性。
    • 配置文件中使用了 Docker 的 portscap_add 等功能,属于典型的容器管理方式。
  • 虚拟化特性:

    • 通过 /dev/kvm 使用硬件虚拟化技术,运行了一个独立的 Windows 操作系统实例。
    • 使用了 KVM 提供的虚拟化支持,底层依赖 QEMU 等虚拟化工具。
  • 综合判断:

    • 这类 Windows 容器可以视为一个「通过容器运行的轻量化虚拟机」,但它并没有完整的虚拟机管理功能(如快照、热迁移等)。
  1. 这种实现的工作原理是什么?

    QEMU + KVM 支持:

    • 容器内部可能使用了 QEMU,KVM 提供了硬件虚拟化的加速支持。QEMU 作为用户态应用,借助 /dev/kvm 完成高效的虚拟机运行。

    Docker 容器管理:

    • Docker 负责通过容器技术挂载宿主机的 /dev/kvm,使容器能够访问硬件虚拟化能力。
    • 容器的网络、端口映射、设备挂载等由 Docker 提供支持。
  2. 这种方式的优缺点是什么?

  • 优点:

    • 部署简单: 利用 Docker,能够快速启动和管理虚拟化实例。
    • 轻量化: 不需要额外安装 libvirt 或其他传统虚拟化管理工具。
    • 灵活性高: 可以结合 Docker 的生态系统,如镜像管理、自动化部署等功能。
  • 缺点:

    • 管理不便: 传统虚拟机管理工具(如 virsh 或 vSphere)无法直接管理这些实例。
    • 功能限制: 无法支持复杂的虚拟化场景,例如快照、热迁移等功能。
    • 性能可能受限: 与直接使用 KVM 或 libvirt 的传统虚拟机相比,可能会有一些性能开销。

Docker 容器中运行的 Windows 实例并非传统意义上的虚拟机,而是通过容器技术实现的轻量化虚拟化。它通过 KVM 提供硬件支持,同时利用 Docker 的容器生态完成管理和部署。

这种方式适用于轻量级需求,例如快速启动虚拟化实例或实验环境。但如果需要更强大的功能(如快照、热迁移或集中管理),建议使用 libvirt、vSphere 或 OpenStack 等专业虚拟化平台。

对于开发者来说,理解这种轻量化虚拟化技术的工作原理,可以更好地权衡性能与功能需求,在适合的场景中高效利用 Docker 与虚拟化技术结合的优势。

问题 2:为什么通过 docker stats 查看时显示的是容器占用内存,而不是虚拟机的内存占用?

docker stats 报告的是容器的内存占用,而非虚拟机(通过 KVM 驱动运行的 Windows 系统)的内存。这其中的关键就在于 Docker 的资源管理方式和虚拟化的底层原理。

  1. 为什么 docker stats 显示的是容器占用内存?
    Docker 通过 CGroup(控制组) 对容器的资源进行限制和统计管理。无论容器内部运行的是普通进程,还是像虚拟机这样的特殊应用,其资源消耗都会被归类到该容器中。更具体地说:
  • 容器中的 QEMU 进程: 用于运行虚拟机的 QEMU 本质上是一个普通的用户态进程,运行在 Docker 容器中。

  • 容器进程封装性: Docker 容器将 QEMU 等进程打包运行,而 docker stats 监控的正是这些容器中进程的资源消耗。

  • Docker 的监控逻辑: 容器并不知道它运行的是虚拟机,因此 docker stats 中显示的内存占用,实际上是:

    QEMU 分配的内存 + 容器内其他进程占用的内存

  1. 为什么虚拟机的内存消耗归类到容器中?
    虚拟机的运行依赖于 QEMU + KVM。其中:
  • KVM 的角色:

    • KVM 是一个 Linux 内核模块,用于提供硬件虚拟化支持。它本身不会主动分配内存,而是通过宿主机硬件支持 QEMU 来完成虚拟化任务。
    • 因此,KVM 的工作更多是“桥梁”,并不直接产生显性内存开销。
  • QEMU 的角色:

    • QEMU 是虚拟机运行的核心进程,负责实际分配内存和处理虚拟化指令。
    • QEMU 的内存分配会被 CGroup 统计为容器资源开销的一部分,所以我们在 docker stats 中看到的是容器的总内存占用。
  1. 内存占用的分配和流向

假设你为虚拟机分配了 2GB 内存,并通过 Docker 启动:

  • 容器进程的内存分配:

    • QEMU 进程分配了虚拟机的 2GB 内存;
    • 其他容器中运行的进程(如网络工具)也会消耗部分内存。
  • docker stats 的内存显示:

    • 显示的是容器中所有进程的内存消耗总和(包括 QEMU 和其他进程)。
  1. 如何验证虚拟机的实际内存占用?

如果你想具体查看虚拟机的内存使用情况,可以尝试以下方法:
方法 1:宿主机查看容器内进程的内存

在宿主机上,找到容器中的 QEMU 进程,并检查其内存消耗:

ps aux | grep qemu

然后使用 tophtop 工具,观察 QEMU 进程的实际内存占用。

方法 2:容器内部查看 QEMU 的内存

进入容器内部,使用类似 tophtop 的工具查看 QEMU 占用的内存:

docker exec -it <容器ID> bash
top

方法 3:虚拟机内部查看

登录虚拟机(例如通过 RDP),在虚拟机内查看内存使用情况:

  • Windows 虚拟机: 通过任务管理器查看分配的物理内存。
  • Linux 虚拟机: 使用 free -mtop 等工具查看内存分配。
  1. 优缺点分析
优点缺点
部署简单:通过 Docker 管理虚拟机,快速启动和停止管理复杂:虚拟机内存统计需要跨层查看
资源整合:使用 Docker 的 CGroup 统一统计资源难以实现传统虚拟机功能(如快照、热迁移等)
部署简单:通过 Docker 管理虚拟机,快速启动和停止管理复杂:虚拟机内存统计需要跨层查看

总的来说:

  • docker stats 显示的内存占用,是 容器内所有进程的总和,包括 QEMU 等虚拟机相关进程的资源消耗。
  • KVM 本身不会直接占用内存,它只是虚拟机运行的硬件支持模块。
  • 如果需要精确统计虚拟机内存,可以通过容器或虚拟机内的工具进行具体分析。

这种 Docker 和虚拟化结合的方式,虽然不是传统意义上的完整虚拟机,但它在轻量化部署和资源管理上提供了很高的灵活性,非常适合场景化需求。

问题 3:Linux 上使用 KVM 启动一个 Windows 虚拟机和通过容器启动一个虚拟机的区别(调用 KVM 驱动)

它涉及两种不同虚拟化方式的架构、功能、性能和使用场景上的区别。以下从多个角度对比两种方式:直接使用 KVM 启动虚拟机通过容器启动虚拟机

  1. 架构区别
    直接使用 KVM 启动虚拟机
  • 架构

    • 利用 Linux 内核中的 KVM 模块和用户态的 QEMU 模拟器,在宿主机上直接运行虚拟机。
    • KVM 提供硬件加速,QEMU 负责虚拟机管理和硬件模拟。
  • 管理工具

    • 常用 virsh、virt-manager 等工具管理虚拟机,依赖 libvirt 提供标准化 API,支持快照、热迁移等高级功能。
  • 资源隔离

    • 资源由 KVM 和 QEMU 完全管理,宿主机的 CGroup 通常不直接作用于虚拟机。

通过容器启动虚拟机

  • 架构

    • 使用 Docker 容器运行虚拟化环境,容器内部运行 QEMU,利用 KVM 驱动启动虚拟机。
    • 容器本身提供资源隔离和运行环境封装,虚拟机运行在容器之内。
  • 管理工具

    • 使用 Docker 命令(如 docker-compose 或 docker run)管理虚拟机的生命周期,轻量级且无需 libvirt。
  • 资源隔离

    • 容器利用 CGroup 实现资源限制(如内存、CPU 等),虚拟机的资源分配受到容器的约束。
  1. 功能和性能对比
    功能对比
功能直接使用 KVM 启动虚拟机容器启动虚拟机
管理方式通过 virshvirt-manager 提供完整虚拟化功能(如快照、热迁移等)。使用 Docker 命令,管理简单但功能有限。
隔离性虚拟机拥有完整的硬件资源隔离,隔离性强。容器和虚拟机共享部分资源,隔离性稍弱。
扩展性可扩展性强,可与 OpenStack 等云平台集成。适合轻量级部署,扩展性依赖 Docker。
便捷性部署复杂,需要配置 libvirt 和 KVM 依赖。部署简单,快速与容器化应用整合。
网络配置支持复杂的网络配置(如多网卡、VLAN 隔离)。受限于 Docker 网络模式,网络功能稍弱。

性能对比

性能指标直接使用 KVM 启动虚拟机容器启动虚拟机
CPU 性能依赖 KVM 和 QEMU,性能接近裸机。性能相当,容器增加的开销很小。
内存管理内存直接由 KVM 和 QEMU 管理,效率更高。内存由容器分配,增加了一层抽象,但影响微小。
I/O 性能I/O 性能接近裸机,硬件直通能力强。略有性能损耗,受限于容器文件系统(如 overlayfs)。
启动速度启动稍慢,需要加载完整虚拟机环境。启动更快,受益于 Docker 的轻量化特性。
  1. 使用场景对比
    直接使用 KVM 启动虚拟机的适用场景
  • 传统虚拟化需求
    • 云平台(如 OpenStack)、生产环境中的高性能虚拟化部署。
    • 需要支持快照、热迁移、硬件直通等功能。
  • 性能优先场景
    • I/O 密集型任务(如数据库、大数据分析)需要接近裸机性能。
  • 复杂网络需求
    • 支持自定义网络配置(如多网卡、VLAN、桥接网络)。

容器启动虚拟机的适用场景

  • 轻量化需求
    • 运行特定版本的 Windows 系统以完成简单测试任务。
    • 快速部署和销毁虚拟机实例。
  • 容器化生态
    • 集成到现有容器化应用中,享受容器生态的便利性(如镜像管理、快速部署)。
  • 开发与测试环境
    • 通过 Docker Compose 等工具快速管理虚拟机的生命周期。
  1. 优缺点总结
优缺点直接使用 KVM 启动虚拟机容器启动虚拟机
优点高性能,功能全面,支持复杂场景。部署轻量、管理简单,符合容器生态。
缺点部署复杂,依赖更多工具(如 libvirt)。功能有限,不适合复杂需求场景。

总的来说:

  • 直接使用 KVM 启动虚拟机: 适合需要完整虚拟化功能、高性能和复杂场景的应用,如企业级云平台部署、I/O 密集型任务和复杂网络配置。
  • 容器启动虚拟机: 适合轻量化需求、快速部署和测试环境,尤其是在容器生态中集成虚拟机的场景。

选择的关键在于场景需求。如果需要快速实验或轻量管理,容器启动虚拟机更方便;而对于复杂功能和高性能要求,直接使用 KVM 是更优选择。

问题 4:为什么在Linux上通过容器启动Windows(KVM)和Linux后,容器内部的网络表现不同?

在容器中启动 Windows,使用 docker inspect 命令显示 Windows 容器获取的 IP 地址是127.19.0.2,Web 或 远程方式访问 Windows 容器显示 IP 地址却是 20.20.20.21,网关是20.20.20.1
用同样的方式容器中启动 Linux,使用 docker inspect 命令显示 IP 地址是127.19.0.3,进入 Linux 容器显示的 IP 地址也是 127.19.0.3

两容器内部均能 ping 通宿主机 IP,但是宿主机不能 ping 通 20.20.20.21 和 20.20.20.1 ,可以ping通 127.19.0.3(Linux) 和 127.19.0.2(Windows)

  1. 网络结构差异
  • Linux 容器: 使用的是 Docker 的网络模式(例如 bridge 模式),容器的虚拟网络接口直接桥接到 Docker 的虚拟网桥(docker0)上,默认情况下与宿主机连通。
  • Windows 容器(虚拟机): 由 KVM 使用 QEMU 创建虚拟机,虚拟机内部的网卡由 QEMU 模拟,虚拟机网络默认是隔离的,宿主机与虚拟机之间需要额外配置转发或桥接才能通信。
  1. 容器和宿主机的通信情况
行为Windows 容器Linux 容器
宿主机能否 ping 通容器否(需要手动配置桥接或 NAT)是(默认连通)
容器能否 ping 通宿主机是(QEMU 提供 NAT 转发)是(默认连通)
  • 宿主机无法 ping 通虚拟机(Windows 容器):

    • 原因在于虚拟机使用的是独立的虚拟网络(QEMU 提供),默认没有配置从宿主机到虚拟机的流量转发。
    • 而 Linux 容器的网络则直接使用 Docker 分配的网络,因此宿主机可以直接与容器通信。
  • 容器都能 ping 通宿主机:

    • Windows 容器 通过 QEMU 的 NAT 转发机制,将虚拟机内流量映射到宿主机网络上。
    • Linux 容器 通过 Docker 网桥直接与宿主机网络相连,因此可以通信。
  1. 为什么进入 Windows 容器看到的 IP 是不同的?
  • Windows 容器(虚拟机)由 QEMU 创建的独立虚拟网络提供 IP 地址(例如 20.20.20.21),与 Docker 的网络配置无关。
  • 而 Linux 容器使用 Docker 管理网络,因此看到的 IP 地址与 Docker 分配的地址一致。
  1. 让宿主机可以 ping 通 Windows 容器

以下是几种可行的调整方式:
方案 1:配置桥接模式

将虚拟机的网络直接桥接到宿主机的物理网卡,使虚拟机与宿主机使用相同的物理网络。

示例命令(调整为你的网络环境):

qemu-system-x86_64 \-net nic \-net bridge,br=br0 \...

注意:需要确保宿主机上已创建桥接接口(例如 br0),并正确配置物理网卡桥接到该接口。

方案 2:配置 NAT 转发规则

使用 iptables 将宿主机流量转发到虚拟机的 IP 地址:

# 假设 tap 设备为 tap0,虚拟机 IP 为 20.20.20.21
iptables -t nat -A PREROUTING -d 20.20.20.21 -j DNAT --to-destination tap0

注意:需要确认虚拟机的网络接口(tap 设备)名称。

方案 3:使用 QEMU 用户网络

启用 QEMU 提供的 -net user 模式,QEMU 会自动配置 NAT,使宿主机可以访问虚拟机。 示例命令:

qemu-system-x86_64 \-net nic \-net user,hostfwd=tcp::2222-:22 \...

解释:hostfwd=tcp::2222-:22 将宿主机 2222 端口的 SSH 流量转发到虚拟机的 22 端口。

  1. 补充说明
  • 为什么设计成这样?

    • 虚拟机 的网络隔离性更强,适合需要独立网络环境的场景,例如模拟独立主机环境或隔离安全风险。
    • 容器 的网络更贴近宿主机,便于轻量化通信和快速部署。
  • 如何选择配置方案?

    • 如果需要让宿主机与虚拟机频繁通信,推荐使用 桥接模式。
    • 如果仅需要简单访问,可以使用 NAT 转发 或 用户网络模式。
  • 性能与安全性权衡

    • 桥接模式 性能较高,但需要确保宿主机网络配置安全。
    • NAT 模式 或 用户网络模式 更安全,但可能会有一定的性能损耗。

未来方向探讨

1. 简化虚拟化管理:砍掉OpenStack和VMware

除非有快照等特殊需求必须要使用到虚拟机,否则可以直接采用 Ceph + Kubernetes + Windows容器 的组合方案。Windows容器中的数据可以通过持久化存储(Ceph)来管理,减少对复杂虚拟化平台的依赖。

2. Windows服务容器化部署

对于必须部署在 Windows 上的服务(如 SQL Server、IIS 等),可以通过 Windows 容器进行部署。这样只需维护 Windows 容器的持久化数据即可,服务可以实现一键式部署和启动,降低运维复杂度。

3. Windows 容器结合 AD 实现私有云弹性使用

  • Windows 容器接入 Windows AD 后,可以将容器直接分配给用户使用,实现私有云办公环境。
  • 在需要时,通过启动新的 Windows 容器为用户分配资源,支持弹性升级配置,用户数据通过持久化存储保证安全可靠。
  • 不需要时,可以关闭容器以减少资源消耗,提高系统效率。

4. 优化审计工具成本

如果公司引入了审计工具(如 IPG),该方案可以在一定程度上减少 IPG License 的数量需求。原因是部分用户处于等待状态时无需立即分配 Windows 容器,只需在使用时动态启动。

5. 网络管控统一化

通过 Kubernetes 接管 Windows 容器的网络管理,消除 VLAN 的概念,网络管理更加高效和简洁。

6. 简化高可用架构

最终的高可用架构只需重点管理 Ceph 和 Kubernetes 两个核心系统即可,极大地减少了管理的复杂度和运维工作量。

目前尚未进行实际环境搭建测试,但根据上述方案,构建一套全新的 HCI 高可用架构,在网络、性能和稳定性方面应该是可行的。

总结

这篇博文我们讨论了如何通过 Ceph + Kubernetes + Windows 容器 来优化现有的虚拟化和容器化架构。相比传统的 OpenStack 和 VMware,使用 Kubernetes 管理 Windows 容器不仅能减少不必要的资源浪费,还能简化整个系统的运维。

通过这种方式,我们可以轻松地将 SQL Server、IIS 等 Windows 服务容器化,并实现一键式部署和启动,确保数据持久化。对于需要接入 Windows AD 的企业环境,还能方便地进行用户管理,并按需启动、关闭容器,节省资源。

此外,使用 Kubernetes 来管理容器网络,也不再需要复杂的 VLAN 配置,让网络管理更加简单高效。而且,随着 Ceph 和 Kubernetes 提供的高可用解决方案,未来我们只需要管理这两个系统,就能实现更高的可靠性和扩展性。

总体来说,这个方案不仅提高了效率,还能有效降低企业的运维成本,是未来 IT 基础设施发展的一个不错方向。

相关文章:

详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言所遇问题问题 1&#xff1a;Docker 容器启动的 Windows 实例调用了 KVM 驱动&#xff0c;但为什么用 virsh list 命令查不到虚拟机&#xff1f;这意味着它不是一…...

HC32L136K8TA单片机输出互为反相双路PWM

可这里可以参考stm32的代码看看 HC32L136K8TA的机制跟32差不多 以使用一个通用定时器输出两路互为反相的 PWM 波&#xff0c;但需要通过一定的配置技巧实现。与高级定时器&#xff08;如 STM32 的 TIM1、TIM8 等&#xff09;不同&#xff0c;通用定时器通常没有直接的互补输出…...

数据分析-55-时间序列分析之获取时间序列的自然周期时间区间

文章目录 1 获取某年的总天数1.1 get_year_days()1.2 应用函数2 获取某年的总周数2.1 get_year_weeks()2.2 应用函数3 获取某日期属于某年的周数3.1 get_time_yearweek()3.2 应用函数4 获取某年某周的开始时间和结束时间4.1 get_week_start_end()4.2 应用函数5 获取往前num周期…...

Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践

在Java 8及更高版本中&#xff0c;Stream API为集合处理带来了革命性的改变。本文将深入解析如何运用Stream对List进行高效的操作&#xff0c;包括筛选&#xff08;Filter&#xff09;、排序&#xff08;Sort&#xff09;、分组&#xff08;GroupBy&#xff09;、求平均值&…...

Sentaurus TCAD学习笔记:transform指令

目录 一、transform指令简介二、transform指令的实现1.cut指令2.flip指令3.rotate指令4.stretch指令5.translate指令6.reflect指令 三、transform指令示例 一、transform指令简介 在Sentaurus中&#xff0c;如果需要对器件进行翻转、平移等操作&#xff0c;可以通过transform指…...

vscode支持ssh远程开发

文章目录 一、生成ssh使用的公钥/密钥对二、使用vscode通过ssh连接服务器1.安装插件2.配置文件3.连接服务器4.新建文件夹&#xff0c;存放不同的任务5.为不同的项目选择不同的conda环境 三、使用scp命令与服务器互传文件、文件夹1.检查Windows 系统是否支持scp命令2.在Windows系…...

Java线程详解

一、线程的基本概念 1. 什么是线程&#xff1f; 线程是程序执行的一个单元&#xff0c;它是进程中的一个实体&#xff0c;是被系统独立调度和分派的基本单位。一个进程可以包含多个线程&#xff0c;这些线程共享进程的资源&#xff0c;如内存空间和文件句柄&#xff0c;但每个…...

java -jar启动项目报错:XXX.jar中没有主清单属性

XXX.jar中没有主清单属性 1、错误复现2、错误原因3、解决方案 java -jar启动项目报错&#xff1a;XXX.jar中没有主清单属性 1、错误复现 今天使用springboot给项目打了jar包&#xff0c;使用命令启动时报错&#xff0c;截图如下&#xff1a; 2、错误原因 项目的pom文件配置如…...

【Vue - Element 】实现表单输入框的远程搜索功能

需求 表单是一个常见的元素&#xff0c;而在表单中&#xff0c;常常需要用户从大量的数据中选择一个或多个选项。 为了提高用户体验&#xff0c;提供远程搜索功能可以帮助用户快速找到所需的选项&#xff0c;而不是从冗长的下拉列表中手动查找。 以该需求为例&#xff0c;我…...

Linux(Centos 7.6)命令详解:split

1.命令作用 Linux系统中的一个用于拆分文件的命令。它可以将一个大文件拆分成多个小文件&#xff0c;以便于传输、存储或处理 2.命令语法 Usage: split [OPTION]... [INPUT [PREFIX]] Usage: split [选项]... [输入文件] [输出文件前缀] 3.参数详解 OPTION: -a, --suffi…...

八股学习 Redis

八股学习 Redis 使用场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7示例场景惰性删除定期删除 使用场景…...

如何通过高防服务隐藏服务器源IP

在网络安全领域&#xff0c;隐藏服务器的真实源IP地址是保护服务器免受直接攻击的重要手段之一。暴露的源IP地址容易成为黑客攻击的目标&#xff0c;尤其是DDoS攻击、端口扫描和暴力破解等威胁。高防服务&#xff08;如阿里云盾、AWS Shield等&#xff09;不仅提供强大的流量清…...

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…...

借助Claude实现Playwright的自动化(MCP Server)

借助Claude实现Playwright的自动化(MCP Server) MCP Server自己开发也是可以的,现在也有很多开箱即用的MCP Server,可以在https://github.com/modelcontextprotocol/servers中查找 Playwright的MCP Server Playwright的MCP Server是社区开发的,它能够为LLM提供操作浏览器的…...

【区间DP】【hard】力扣730. 统计不同回文子序列

给你一个字符串 s &#xff0c;返回 s 中不同的非空回文子序列个数 。由于答案可能很大&#xff0c;请返回对 109 7 取余 的结果。 字符串的子序列可以经由字符串删除 0 个或多个字符获得。 如果一个序列与它反转后的序列一致&#xff0c;那么它是回文序列。 如果存在某个 …...

【Vim Masterclass 笔记11】S06L24 + L25:Vim 文本的插入、变更、替换与连接操作同步练习(含点评课)

文章目录 S06L24 Exercise 06 - Inserting, Changing, Replacing, and Joining1 训练目标2 操作指令2.1. 打开 insert-practice.txt 文件2.2. 练习 i 命令2.3. 练习 I 命令2.4. 练习 a 命令2.5. 练习 A 命令2.6. 练习 o 命令2.7. 练习 O 命令2.8. 练习 j 命令2.9. 练习 R 命令2…...

分布式组件底层逻辑是什么?

分布式组件是指在分布式系统中执行特定功能的模块&#xff0c;通常分布在多个物理节点上&#xff0c;共同协作完成任务。其底层逻辑包括多个方面&#xff0c;从通信和数据管理到一致性和容错设计&#xff0c;具体如下&#xff1a; 1.分布式组件的核心特点 分布性&#xff1a;功…...

Spring Boot中的扫描注解如何使用

在 Spring Boot 中&#xff0c;扫描注解是指通过注解来告诉 Spring 框架应该扫描哪些包、哪些类或哪些特定的组件&#xff0c;并将其作为 Spring 容器中的 bean 进行管理。Spring Boot 主要通过以下几种注解来实现自动扫描&#xff1a; ComponentScanSpringBootApplicationCom…...

初识JVM HotSopt 的发展历程

目录 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 各大 JVM look 看一下虚拟机 HotSopt 的发展历程 总结 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 即时编译 主要是…...

基于springboot果蔬供应链信息管理平台

基于Spring Boot的果蔬供应链信息管理平台是一种集成了先进信息技术和果蔬供应链管理理念的综合性系统。 一、背景与意义 随着人们生活水平的提高和对健康饮食的重视&#xff0c;果蔬市场需求不断增长。然而&#xff0c;果蔬供应链涉及多个环节&#xff0c;包括种植、采摘、加…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...