Docker:Docker网络
Docker Network 是 Docker 平台中的一项功能,允许容器相互通信以及与外界通信。它提供了一种在 Docker 环境中创建和管理虚拟网络的方法。Docker 网络使容器能够连接到一个或多个网络,从而使它们能够安全地共享信息和资源。
预备知识
推荐先看视频先有个大概的了解,再对比视频或文章进行动手操作
【入门篇】Docker网络模式Linux - Bridge | Host | None_哔哩哔哩_bilibili
什么是 Network Namespace?
网络命名空间 (Network Namespace): 网络命名空间是 Linux 内核提供的一种网络隔离机制。它就像是为每个容器创建了一个独立的网络环境。
- 每个容器都有自己的网络命名空间。主机也有一个默认的网络命名空间。
- 隔离性: 每个网络命名空间有自己的网络设备、IP 地址、路由表、防火墙规则等。
- 独立性: 在一个命名空间中的变更不会影响其他命名空间。
- 灵活性: 允许在同一台主机上运行多个相互隔离的网络环境。
什么是 veth-pair?
veth-pair (Virtual Ethernet Device Pairs): veth 是 "虚拟以太网设备" 的缩写。它总是成对出现,像是一根虚拟的网线,连接不同的网络命名空间。
- 工作原理: veth 对的两端分别位于不同的网络命名空间。从一端发送的数据包会立即出现在另一端。
- 用途: 主要用于连接不同的网络命名空间,使它们能够通信。
- 在 Docker 中的应用:
- 一端连接到容器的网络命名空间。
- 另一端连接到主机的默认命名空间(通常通过 docker0 网桥)。
namespace 和 veth 如何协同工作
将 VETH 想象成一根网线。一端连接到主机网络,另一端连接到创建的网络命名空间。让我们连接电缆,并打开这些接口。通过接下来的步骤,我们将会理解容器都在自己的网络环境中运行,为什么可以方便地与其他容器和外部网络进行通信。
a. 容器创建: b. veth 对创建: c. 网络连接: d. 通信过程:
- Docker 为新容器创建一个新的网络命名空间。
- 在这个命名空间中创建一个虚拟网络接口(如 eth0)。
- Docker 创建一对 veth 设备。
- 一端(如 veth1)被移动到容器的命名空间,并可能被重命名为 eth0。
- 另一端(如 veth0)保留在主机的默认命名空间,并连接到 docker0 网桥。
- 容器内的 eth0 通过 veth 对连接到主机上的 docker0 网桥。
- docker0 网桥充当虚拟交换机,连接所有容器。
- 容器间通信: 数据从一个容器的 eth0 经过 veth 对到达 docker0,再通过另一个 veth 对到达目标容器。
- 容器与外部通信: 数据经过 veth 对到达 docker0,然后通过主机的网络接口(如 eth0)发送到外部网络。
通过这种方式,Docker 能够在提供强大网络功能的同时,实现了容器网络的隔离性和互联性。这为微服务架构和复杂的分布式系统提供了坚实的网络基础。
demo:在容器启动默认网络驱动
图中显示了lo(回环接口)和eth0(是我ES2的主网卡)的信息,其中docker0接口是允许不同容器之间以及容器与宿主机之间的网络通信,注意state DOWN,
Docker 引擎的每次安装都会自动包含三个默认网络。bridge,host,none
此时检查网络驱动bridge信息
docker network inspect bridge
运行容器示例,观察不同之处
docker run -itd --name=networktest ubuntu
Docker网络驱动
让我们把Docker网络驱动想象成不同类型的道路系统,这样可能更容易理解。
Bridge网络(默认模式)
小方框代表不同的容器。底部的线代表Docker0网桥,连接所有容器。
想象这是一个小区内部的道路系统。每个容器就像小区里的一栋房子,它们通过这个内部道路系统相互连接。对于大多数单机应用,Bridge网络就足够了。它提供了良好的隔离性和易用性。
Host网络
大方框表示直接使用主机的网络栈。 这就像直接把房子建在主干道上。容器直接使用宿主机的网络,没有任何隔离。这种模式性能最好,但安全性较低。
Overlay网络
两个椭圆形代表不同主机上的网络。连接线表示跨主机通信。 这就像不同城市之间的高速公路,允许不同物理机器上的容器通信。
把这个想象成不同城市之间的高速公路网络。它允许不同物理机器上的Docker容器进行通信,就像它们在同一个网络中一样。这对于构建跨多台服务器的分布式系统非常有用。
Macvlan网络
小方框代表拥有独立MAC地址的容器。底部的线代表物理网络。
这就像给每个房间都分配了一个独立的门牌号(MAC地址)。每个容器都可以直接连接到物理网络,就像是网络上的一个独立设备。这在某些需要直接访问物理网络的特殊场景中很有用。
None网络
这相当于一个没有任何道路连接的孤岛。容器完全与网络隔离,不能进行任何网络通信。这在一些特殊的安全要求下可能会用到。
使用场景
选择合适的网络驱动时,需要考虑以下因素:
- 应用的架构和通信需求
- 性能要求
- 安全性和隔离级别
- 部署环境(单主机vs多主机)
- 可扩展性需求
- 特定的网络功能需求(如负载均衡、服务发现等)
- Bridge 网络:
- 最常用的网络驱动,适合大多数单主机部署场景。
- 理想用于开发和测试环境,因为它提供了良好的隔离性和易用性。
- 适合部署独立的Web应用、数据库服务或微服务组件。
- 当需要在同一主机上运行多个相互隔离的应用时,Bridge网络是最佳选择。
- Host 网络:
- 当网络性能是首要考虑因素时使用,如高性能计算或网络密集型应用。
- 适用于需要访问主机网络栈的特权容器,如网络监控工具或安全扫描器。
- 在需要直接访问主机网络接口的场景中非常有用,如某些网络管理工具。
- 但要注意,由于缺乏网络隔离,使用Host网络时需要格外小心安全性。
- Overlay 网络:
- 在构建跨多个Docker主机的分布式应用时是理想选择。
- 非常适合微服务架构,允许服务在不同主机间无缝通信。
- 在Docker Swarm集群环境中广泛使用,提供了内置的服务发现和负载均衡。
- 适用于需要高可用性和水平扩展的大规模应用部署。
- Macvlan 网络:
- 当容器需要在物理网络上表现为独立设备时使用。
- 适用于网络设备模拟或虚拟化网络功能(NFV)场景。
- 在需要直接暴露容器到外部网络的情况下很有用,如特定的网络安全要求。
- 对于需要绕过Docker网络栈以获得最佳性能的场景也很适合。
- None 网络:
- 用于需要完全网络隔离的特殊安全场景。
- 适合需要自定义网络栈的高级用户。
- 在某些特定的沙箱环境或安全敏感的应用中可能会用到。
- 也可用于创建不需要网络连接的数据处理或计算密集型容器。
Docker Bridge 工作原理
a. 网桥(Bridge): Docker在安装时会创建一个名为docker0的网桥。这个网桥充当虚拟交换机,
所有容器都连接到这个交换机上,实现容器间的网络通信。
b. veth-pair: 当创建容器时,Docker会创建一对虚拟接口(veth pair)。一端连接到容器内部,
另一端连接到docker0网桥。这就像用一根虚拟网线将容器和网桥连接起来。
c. IP地址分配: Docker会从预定义的网段中为每个容器分配一个IP地址。这相当于给每个
"房间"(容器)分配一个独特的门牌号,便于识别和通信。
d. 端口映射: 如果需要从外部访问容器内的服务,需要进行端口映射。这类似于在大楼的总机上
设置分机,让外部可以直接与特定的"房间"(容器)通信。
e. NAT(网络地址转换): Docker使用NAT机制允许容器访问外部网络。当容器发起对外连接时,
Docker会将容器的私有IP地址转换为主机的IP地址。
f. DNS服务: Docker提供内置的DNS服务,允许容器通过名称相互发现和通信。这在使用自定义
网络或部署多容器应用时特别有用。
g. iptables规则: Docker自动管理iptables规则,用于处理NAT、端口映射和网络隔离。这些
规则确保了容器网络的安全性和正确路由。
Overlay网络的工作原理
- VXLAN封装: Overlay网络主要使用VXLAN(Virtual Extensible LAN)技术。VXLAN在原始的以太网帧外部添加一个VXLAN头,然后封装在UDP包中。
- 网络标识: 每个Overlay网络都有一个唯一的网络ID(VXLAN Network Identifier, VNI),用于区分不同的虚拟网络。
- VTEP(VXLAN Tunnel Endpoint): 每个Docker主机上运行一个VTEP。它负责封装和解封装VXLAN数据包。
- 分布式控制平面: Docker Swarm使用一个分布式数据库(通常是etcd或Consul)来存储网络拓扑信息。
- 数据包传输流程: a. 源容器发送数据包 b. 本地VTEP封装数据包(添加VXLAN头) c. 封装后的包通过物理网络传输 d. 目标主机的VTEP接收并解封装数据包 e. 数据包传递给目标容器
现在让我详细解释Overlay网络的跨主机通信原理:
- 网络设置:
- 每个Docker主机上都运行一个Overlay网络(图中橙色区域)。
- 每个主机上都有一个VTEP(VXLAN Tunnel Endpoint,图中紫色方框)。
- 容器通信过程: a. 源容器(容器1)发送数据包到目标容器(容器2)。 b. 数据包首先到达本地Overlay网络。 c. VTEP接收到数据包,并进行VXLAN封装:
- 添加VXLAN头,包含VNI(VXLAN Network Identifier)。
- 将整个包封装在UDP数据包中。 d. 封装后的数据包通过物理网络传输(图中红色底部区域)。 e. 目标主机的VTEP接收到数据包,进行解封装。 f. 解封装后的原始数据包通过目标主机的Overlay网络传递给目标容器。
- VXLAN封装:
- 图中间的方框显示了VXLAN封装的结构。
- VXLAN头包含VNI,用于标识特定的Overlay网络。
- 原始以太网帧被封装在VXLAN包内。
- 网络发现和路由:
- Docker Swarm使用分布式数据存储(如etcd)来维护网络拓扑信息。
- 每个VTEP知道如何将数据包路由到其他主机上的容器。
- 优势:
- 隔离性:不同Overlay网络之间完全隔离。
- 可扩展性:可以支持大量的网络和容器。
- 跨数据中心:可以在不同物理位置的主机之间创建Overlay网络。
- 性能考虑:
- VXLAN封装会带来一些性能开销。
- 在高性能要求的场景中,可能需要考虑网络优化。
Overlay网络的这种机制使得Docker容器能够在不同的物理主机之间进行透明通信,就像它们在同一个本地网络中一样。这为构建大规模、分布式的容器应用提供了强大的基础。
实际应用中,Overlay网络常用于:
- 微服务架构中服务之间的通信
- 跨数据中心的应用部署
- 大规模容器编排(如使用Kubernetes或Docker Swarm)
Docker自定义网络
注意:前面的内容是原理理解就行,这里可能是最常用的了。
Docker自定义网络就像是在一个大型办公楼里创建专属的部门局域网。每个网络就像一个独立的楼层或区域,有自己的规则和特点。
网络驱动类型: 想象不同类型的办公区域布局
a) Bridge(桥接): 最常用,就像标准的办公楼层。
b) Overlay(覆盖): 类似于跨多个办公楼的虚拟专用网络。
c) Host(主机): 直接使用主机网络,像是直接在大楼的主网络上工作。
d) Macvlan: 给容器自己的MAC地址,就像给每个员工独立的网络设备。
e) None: 没有网络,类似于隔离的私密办公室。
创建自定义网络: 就像规划和设置新的办公区域。
docker network create --driver bridge my_network
网络隔离: 每个自定义网络就像一个独立的楼层,默认情况下彼此隔离。 不同网络的容器就像在不同楼层工作的员工,需要特殊通道才能互相通信。
自动DNS解析: 在自定义网络中,容器可以通过名称相互访问,就像在办公室里直接叫同事名字。 例如:ping container_name
就能工作,不需要知道IP地址。
IP地址管理: Docker会为每个加入网络的容器分配IP,就像给新员工分配工位。 可以指定IP范围:--subnet 192.168.1.0/24
连接容器到网络:
a) 创建时连接:docker run --network my_network ...
b) 已存在的容器连接: 这就像是把员工分配到特定的办公区或让他们进入新的项目组。
docker network connect my_network container_name
断开网络连接: 类似于临时将员工调离某个项目组。
docker network disconnect my_network container_name
网络别名: 可以给容器在特定网络中指定别名,就像给员工在不同项目中使用不同的代号。
docker network connect --alias db my_network container_name
自定义网络的优势:
a) 更好的隔离性:不同项目组之间不互相干扰。
b) 自动服务发现:容器可以通过名字互相找到,不需要记忆复杂的IP。
c) 更安全:可以控制哪些容器可以相互通信。
d) 动态管理:可以随时添加或移除容器,就像员工加入或离开项目组。
跨主机网络: 使用Overlay网络,可以让不同物理机器上的容器通信,就像不同办公楼之间建立专用通道。
网络配置: 可以设置网络的各种参数,例如MTU(最大传输单元)、网关等,就像调整办公网络的各种设置。
查看网络信息: 这就像查看办公区域的详细平面图和人员分布。
docker network inspect my_network
实际应用例子:
- 多层应用:前端容器在一个网络,后端容器在另一个网络,数据库容器在第三个网络。
- 微服务:每个微服务可以有自己的网络,只有需要通信的服务之间建立连接。
- 开发环境:可以为不同的开发项目创建隔离的网络环境
docker网络联通
思考:为了连接到网络,计算机必须至少具有一个网络接口。每个网络接口必须有自己唯一的 IP 地址。提供给主机的 IP 地址将分配给其网络接口。但是每个网络接口都需要一个 IP 地址吗?
当我们将一个容器连接到多个网络时,它会获得多个IP地址。为什么呢?
解释:
- 默认网络: 当一个容器被创建时,除非另有指定,它会自动连接到默认的"bridge"网络,并获得一个IP地址。
- 自定义网络: 当我们将容器连接到一个自定义网络时,它会在这个新网络中获得另一个IP地址。
- 多网络连接: 一个容器可以同时连接到多个网络,每个网络中都会有一个唯一的IP地址。
- 网络隔离: 每个网络都是相互隔离的。容器在一个网络中的IP地址对其他网络是不可见的。
- 路由: 容器内部会有多个网络接口,每个对应一个连接的网络。
工作原理:
- 默认连接:容器创建时自动连接到默认bridge网络,获得172.17.0.2 IP地址。
- 自定义网络连接:使用
docker network connect
命令将容器连接到自定义网络。容器在新网络中获得另一个IP地址(172.18.0.2)。 - 多网络接口:容器内部创建新的网络接口(eth1)来处理新网络连接。
- 路由:容器操作系统负责管理这些网络接口和路由决策。
- 网络隔离:每个网络都是独立的,容器在一个网络中的通信不会影响其在另一个网络中的通信。
- 灵活性:这种设计允许容器同时参与多个网络环境,增加了网络配置的灵活性。
优势:
- 网络隔离:可以将容器连接到多个隔离的网络环境。
- 微服务架构:支持复杂的微服务部署,允许服务在不同网络中扮演不同角色。
- 安全性:可以通过网络分离来增强安全性,例如将数据库容器连接到后端网络,而不暴露给前端网络。
- 灵活配置:允许在不中断服务的情况下动态调整容器的网络连接。
这种多网络连接的能力使Docker容器能够适应复杂的网络拓扑需求,为现代分布式系统的部署提供了强大的支持。
参考
https://docs.docker.com/network/
https://docs.docker.com/engine/tutorials/networkingcontainers/
https://medium.com/techlog/diving-into-linux-networking-and-docker-bridge-veth-and-iptables-a05eb27b1e72
37、网络连通_哔哩哔哩_bilibili
https://mostafizur99.medium.com/connecting-containers-with-vxlan-overlay-networks-mastering-multi-container-host-networking-a72cc561c098
相关文章:

Docker:Docker网络
Docker Network 是 Docker 平台中的一项功能,允许容器相互通信以及与外界通信。它提供了一种在 Docker 环境中创建和管理虚拟网络的方法。Docker 网络使容器能够连接到一个或多个网络,从而使它们能够安全地共享信息和资源。 预备知识 推荐先看视频先有…...

Ubuntu 24.04-自动安装-Nvidia驱动
教程 但在安全启动模式下可能会报错。 先在Nvidia官网找到GPU对应的驱动版, 1. 在软件与更新中选择合适的驱动 2. ubuntu自动安装驱动 sudo ubuntu-drivers autoinstall显示驱动 ubuntu-drivers devices3. 安装你想要的驱动 sudo apt install nvidia-driver-ve…...

【CSAPP】-attacklab实验
目录 实验目的与要求 实验原理与内容 实验设备与软件环境 实验过程与结果(可贴图) 实验总结 实验目的与要求 1. 强化机器级表示、汇编语言、调试器和逆向工程等方面基础知识,并结合栈帧工作原理实现简单的栈溢出攻击,掌握其基…...

docker部署onlyoffice,开启JWT权限校验Token
原来的部署方式 之前的方式是禁用了JWT: docker run -itd -p 8080:80 --name docserver --network host -e JWT_ENABLEDfalse --restartalways onlyoffice/documentserver:8 新的部署方式 参考文档:https://helpcenter.onlyoffice.com/installation/…...
Hive排序字段解析
Hive排序字段解析 在Hive中,CLUSTER BY、DISTRIBUTE BY、SORT BY和ORDER BY是用于数据分发和排序的关键子句,它们各自有不同的用途和性能特点。让我们逐一解析这些子句: 1. DISTRIBUTE BY 用途: 主要用于控制如何将数据分发到Reducer。它可…...

3101.力扣每日一题7/6 Java(接近100%解法)
博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 主要是基于对…...

virtualbox窗口和win10窗口的切换
1、问题: 从windows切换到虚拟机可以用快捷键 ALTTAB,但是从虚拟机到windows使用 ALTTAB 无法成功切换 2、解决方法: 按下图操作 按上面步骤设置之后,每次要从虚拟机窗口切换到windows窗口 只需要先按 CtrlAlt 跳出虚拟机窗口&…...

卫星轨道平面简单认识
目录 一、轨道平面 1.1 轨道根数 1.2 应用考虑 二、分类 2.1 根据运行高度 2.2 根据运行轨迹偏心率 2.3 根据倾角大小 三、卫星星座中的轨道平面 四、设计轨道平面的考虑因素 一、轨道平面 1.1 轨道根数 轨道平面是定义卫星或其他天体绕行另一天体运动的平面。这个平…...
IP-Guard定制函数配置说明
设置客户端配置屏蔽: 关键字:disfunc_austascrtrd 内容:1 策略效果:屏幕整个屏幕监控模块。会导致屏幕历史查询这个功能也不能使用。 security_proxy1 安全代理参数 safe_enforce_authproc进程 强制软件上 安全代理网关…...
C++常用类
C常用类 1. std::string类2. std::vector 类2.1 特性2.2 用法 1. std::string类 std::string 是 C 标准库中的一个类,用于处理字符串。它提供了许多方法来创建、操作和管理字符串,如连接、查找、比较、替换和分割等操作。std::string 类定义在 头文件中…...
React Hooks --- 分享自己开发中常用的自定义的Hooks (1)
为什么要使用自定义 Hooks 自定义 Hooks 是 React 中一种复用逻辑的机制,通过它们可以抽离组件中的逻辑,使代码更加简洁、易读、易维护。它们可以在多个组件中复用相同的逻辑,减少重复代码。 1、useThrottle 代码 import React,{ useRef,…...

uniapp H5页面设置跨域请求
记录一下本地服务在uniapp H5页面访问请求报跨域的错误 这是我在本地起的服务端口号为8088 ip大家可打开cmd 输入ipconfig 查看 第一种方法 在源码视图中配置 "devServer": {"https": false, // 是否启用 https 协议,默认false"port&q…...

使用myCobot280和OAK-D OpenCV DepthAI摄像头制作一个实时脸部跟踪的手机支架!
引言 由于YouTube和Netflix的出现,我们开始躺着看手机。然而,长时间用手拿着手机会让人感到疲劳。这次我们制作了一个可以在你眼前保持适当距离并调整位置的自动移动手机支架,让你无需用手拿着手机。请务必试试! 准备工作 这次我们…...

Xilinx FPGA:vivado关于单端ROM的一个只读小实验
一、实验要求 将生成好的voe文件里的数据使用rom读取出来,采用串口工具发送给电脑(当按键来临时)。 二、程序设计 按键消抖模块: timescale 1ns / 1ps module key_debounce(input sys_clk ,input rst_n…...

集成学习(一)Bagging
前边学习了:十大集成学习模型(简单版)-CSDN博客 Bagging又称为“装袋法”,它是所有集成学习方法当中最为著名、最为简单、也最为有效的操作之一。 在Bagging集成当中,我们并行建立多个弱评估器(通常是决策…...
Docker 中查看及修改 Redis 容器密码的实用指南
在使用 Docker 部署 Redis 容器时,有时我们需要查看或修改 Redis 的密码。本文将详细介绍如何在 Docker 中查看和修改 Redis 容器的密码,帮助你更好地管理和维护你的 Redis 实例。 一、查看 Redis 容器密码 通常在启动 Redis 容器时,我们会…...

CH09_JS的循环控制语句
第9章:Javascript循环控制语句 本章目标 掌握break关键字的使用掌握continue关键字的使用 课程回顾 for循环的特点和语法while循环的特点和语法do-while循环的特点和语法三个循环的区别 讲解内容 1. break关键字 为什么要使用break关键字 生活中,描…...
Python实现Mybatis Plus
Python实现Mybatis Plus from flask import g from sqlalchemy import asc, descclass QueryWrapperBuilder:conditions {}order_by_info {}def __new__(cls, *args, **kwargs):obj super(QueryWrapperBuilder, cls).__new__(cls)return objdef __init__(self, obj):self.o…...
卷积神经网络和Vision Transformer的对比之归纳偏置
卷积神经网络(CNN)和视觉变换器(Vision Transformer,ViT)是两种常用于图像处理的深度学习模型。它们各有优缺点,其中一个重要的区别在于它们对图像数据的“归纳偏置”(inductive bias࿰…...

Java之网络面试经典题(一)
目录 编辑 一.Session和cookie Cookie Session 二.HTTP和HTTPS的区别 三.浅谈HTTPS为什么是安全的? 四.TCP和UDP 五.GET和Post的区别 六.forward 和 redirect 的区别? 本专栏全是博主自己收集的面试题,仅可参考,不能相…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...