全景剖析阿里云容器网络数据链路(一):Flannel

news2024/11/15 16:01:34

作者:余凯

本系列文章由余凯执笔创作,联合作者:阿里云云原生应用平台 谢石 对本文亦有贡献

前言

近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的 IaaS 化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演进中,这必然对客户对云原生网络的可观测性带来了极高的门槛和挑战。为了提高云原生网络的可观测性,同时便于客户和前后线同学增加对业务链路的可读性,ACK 产研和 AES 联合共建,合作开发 ack net-exporter 和云原生网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构体系,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难问题的体验 ,提高云原生网络的链路的稳定性。

鸟瞰容器网络,整个容器网络可以分为三个部分:Pod 网段,Service 网段和 Node 网段。这三个网络要实现互联互通和访问控制,那么实现的技术原理是什么?整个链路又是什么,限制又是什么呢?Flannel, Terway 有啥区别?不同模式下网络性能如何?这些,需要客户在下搭建容器之前,就要依据自己的业务场景进行选择,而搭建完毕后,相关的架构又是无法转变,所以客户需要对每种架构特点要有充分了解。比如下图是个简图,Pod 网络既要实现同一个ECS的Pod间的网络互通和控制,又要实现不同 ECS Pod 间的访问, Pod 访问 SVC 的后端可能在同一个 ECS 也可能是其他 ECS,这些在不同模式下,数据链转发模式是不同的,从业务侧表现结果也是不一样的。

在这里插入图片描述

本文是[全景剖析容器网络数据链路]第一部分,主要介绍 Kubernetes Flannel 模式下,数据面链路的转转发链路,一是通过了解不同场景下的数据面转发链路,从而探知客户在不同的场景下访问结果表现的原因,帮助客户进一步优化业务架构;另一方面,通过深入了解转发链路,从而在遇到容器网络抖动时候,客户运维以及阿里云同学可以知道在哪些链路点进行部署观测手动,从而进一步定界问题方向和原因。

系列二:

全景剖析阿里云容器网络数据链路(二):Terway ENI

系列三:

全景剖析阿里云容器网络数据链路(三):Terway ENIIP

系列四:

全景剖析阿里云容器网络数据链路(四):Terway IPVLAN+EBPF

系列五:

全景剖析阿里云容器网络数据链路(五):Terway ENI-Trunking

系列六:

全景剖析阿里云容器网络数据链路(六):ASM Istio

Flannel 模式架构设计

Flannel 模式下,ECS 只有一个主网卡 ENI,无其他附属网卡,ECS 和节点上的 Pod 与外部通信都需要通过主网卡进行。ACK Flannel 会在每个节点创建 cni0 虚拟网卡作为 Pod 网络和 ECS 的主网卡 eth0 之间的桥梁。

在这里插入图片描述

在这里插入图片描述

集群的每个节点会起一个 flannel agent,并且会给每个节点预分配一个 Pod CIDR,这个 Pod CIDR 是ACK集群的 Pod CIDR 的子集。

在这里插入图片描述

容器的网络命名空间内会有一个 eth0 的虚拟网卡,同时存在下一跳指向该网卡的路由,该网卡会作为容器和宿主内核进行数据交换的出入口。容器和宿主机之间的数据链路是通过 veth pair 进行交换的,现在我们已经找到 veth pair 其中一个,如何去找另一个 veth 呢?

在这里插入图片描述

在这里插入图片描述

如上图所示,我们可以容器的网络命名空间中通过 p addr 看到一个 eth0@if81 的标志位,其中 ‘81’ 这个将会协助我们在 ECS 的 OS 内找到找到和容器网络命名空间中的 veth pair 相对一个。在 ECS OS 内我们通过 ip addr | grep 81: 可以找到 vethd7e7c6fd 这个虚拟网卡,这个就是 veth pair 在 ECS OS 侧相对的那一个。

在这里插入图片描述

到目前为止容器内和 OS 数据链路已经建立链接了,那么 ECS OS 内对于数据流量是怎么判断去哪个容器呢?通过 OS Linux Routing 我们可以看到,所有目的是 Pod CIDR 网段的流量都会被转发到 cni0 这张虚拟网卡,那么 cni0 是通过 bridge 方式将不同目的的数据链路指向到不同的 vethxxx。到这里为止,ECS OS 和 Pod 的网络命名空间已经建立好完整的出入链路配置了。

在这里插入图片描述

Flannel 模式容器网络数据链路剖析

针对容器网络特点,我们可以将 Flannel 模式下的网络链路大体分为以 Pod IP 对外提供服务和以 SVC 对外提供服务两个大的 SOP 场景,进一步细分可以拆分到 10 个不同的小的 SOP 场景。

在这里插入图片描述

对这 10 个场景的数据链路梳理合并,这些场景可以归纳为下面 5 类典型的场景:

  • Client 和服务端 Pod 部署于同一个 ECS
  • Client 和服务端 Pod 部署于不同 ECS
  • 访问 SVC External IP, ExternalTrafficPolicy 为 Cluster 时,Client 和服务端 Pod 部署于不同ECS,其中client为集群外
  • 访问 SVC External IP, ExternalTrafficPolicy 为 Local 时, Client 和服务端 Pod 部署于不同 ECS,其中client为集群内
  • 访问 SVC External IP, ExternalTrafficPolicy 为 Local 时, Client 和服务端 Pod 部署于不同 ECS,其中 client 为集群外

场景一:Client和服务端Pod部署于同一个ECS

此场景包含下面几个子场景,数据链路可以归纳为一种:

  1. 以 Pod IP 对外提供服务,Client 和 Pod 部署于同一个节点;
  2. 以 SVC ClusterIP 对外提供服务,Client 和 SVC 后端 Pod 部署于同一节点;
  3. 以 SVC ExternalIP 对外提供服务,ExternalTrafficPolicy 为 Cluster/Local 情况下,Client 和 SVC 后端 Pod 部署于同一节点

环境

在这里插入图片描述

ap-southeast-1.10.0.0.180 节点上存在两个pod:centos-67756b6dc8-rmmxt IP地址172.23.96.23 和 nginx-7d6877d777-6jkfg 和172.23.96.24

内核路由

centos-67756b6dc8-rmmxt IP地址172.23.96.23,该容器在宿主机表现的 PID 是503478,该容器网络命名空间有指向容器 eth0 的默认路由

在这里插入图片描述

在这里插入图片描述

该容器 eth0 在 ECS OS 内对应 veth pair 是 vethd7e7c6fd

在这里插入图片描述

在这里插入图片描述

通过上述类似的办法,可以找到nginx-7d6877d777-6jkfg IP地址172.23.96.24,该容器在宿主机表现的 PID 是2981608,该容器 eth0 在 ECS OS 内对应veth pair是vethd3fc7ff4

在这里插入图片描述

在 ECS OS 内,有指向 Pod CIDR,下一跳为 cni0 的路由,以及 cni0 中有两个容器的vethxxx 网桥信息

在这里插入图片描述

在这里插入图片描述

小结:可以访问到目的端

在这里插入图片描述

▲数据链路转发示意图

在这里插入图片描述

▲内核协议栈示意图

  • 数据链路:ECS1 Pod1 eth0 -> vethxxx1 -> cni0 -> vethxxxx2 -> ECS1 Pod2 eth0
  • 数据链路要经过三次内核协议栈,分别是 Pod1 协议栈, ECS OS 协议栈 和 Pod2 协议栈

场景二:Client 和服务端 Pod 部署于不同 ECS

此场景包含下面几个子场景,数据链路可以归纳为一种:

  1. 以 Pod IP 对外提供服务,Client 和 Pod 部署于不同节点;
  2. 以 SVC ClusterIP 对外提供服务,Client和SVC 后端Pod部署于不同节点;
  3. 以 SVC ExternalIP 对外提供服务,ExternalTrafficPolicy 为 Cluster 情况下,集群内 Client 和 SVC 后端 Pod 部署于不同节点;

环境

在这里插入图片描述

ap-southeast-1.10.0.0.180 节点上存在两个 pod:centos-67756b6dc8-rmmxt IP地址172.23.96.23 和 nginx1-76c99b49df-7plsr IP 地址172.23.96.163

Service nginx1 的 ExternalTrafficPlicy 为 Cluster

在这里插入图片描述

内核路由

Pod 网络空间和 ECS OS 网络空间的数据交换在 2.1 场景一中已经做了详细描述,此处不再果断篇幅描述。

源端 Pod 所在 ECS 的 IPVS 规则

可以看到,源端数据链路访问 svc 的clusterip 192.168.13.23 时,如果链路到达 ECS 的OS 内,会命中 ipvs 规则,被解析到 svc 的后端 endpoint 之一(本实例中只有一个 pod,所以 endpoint 只有一个)

在这里插入图片描述

小结:可以成功访问到目的端

在这里插入图片描述

▲数据链路转发示意图

VPC 路由表会自动配置目的地址是 pod CIDR, 下一跳为 POD 网段所归属的 ECS 的自定义路由条目,该规则由 ACK 管控测通过 openapi 调用 VPC 去配置,无需手动配置和删除

在这里插入图片描述
在这里插入图片描述

▲内核协议栈示意图

Conntack 表信息(访问 SVC 情况)

Node1:

src是源pod IP,dst是svc的ClusterIP,并且期望是由svc的其中一个endpoint 172.23.96.163 来回消息给源端 pod

在这里插入图片描述

Node2:

目的 pod 所在 ECS 上 conntrack 表记录是由源端 pod 访问目的 pod,不会记录 svc 的clusterip 地址

在这里插入图片描述

  • 数据链路:ECS1 Pod1 eth0 -> vethxxx1 -> cni0 -> ECS 1 eth0 -> VPC -> ECS2 eth0 -> cni0 -> vethxxxx2 -> ECS2 Pod2 eth0
  • 数据链路要经过四次内核协议栈,分别是 Pod1 协议栈, ECS1 OS 协议栈 , ECS2 OS 协议栈和 Pod2 协议栈
  • VPC 路由表会自动配置目的地址是 pod CIDR, 下一跳为 POD 网段所归属的 ECS 的自定义路由条目,该规则由 ACK 管控测通过 openapi 调用 VPC 去配置,无需手动配置和删除
  • 如果访问的 SVC 的 cluster IP,或者是 Cluster 模式下,访问 SVC 的 externalIP,数据链路通过veth pair进到 ECS OS 内后,会命中相应的 IPVS 规则,并根据负载规则,选择IPVS的某一个后端,进而打到其中的一个 SVC 的后端 endpoint,SVC 的 IP 只会再 PoD 的 eth0 , veth pair vethxxx 被捕捉到,其他链路环节不会捕捉到 svc 的 IP

场景三:ExternalTrafficPolicy 为 Local时,Client 和服务端 Pod 部署于集群内不同 ECS

此场景包含下面几个子场景,数据链路可以归纳为一种:

1.以SVC ExternalIP对外提供服务,ExternalTrafficPolicy 为 Local情况下,集群内 Client 和 SVC 后端 Pod 部署于不同节点;

环境

在这里插入图片描述

ap-southeast-1.10.0.0.180 节点上存在两个pod:centos-67756b6dc8-rmmxt IP地址172.23.96.23 和 nginx1-76c99b49df-7plsr IP 地址172.23.96.163

Service nginx1 ExternalTrafficPolicy 为 Local

在这里插入图片描述

内核路由

Pod 网络空间和 ECS OS 网络空间的数据交换在 2.1 场景一中已经做了详细描述,此处不再果断篇幅描述。

源端 Pod 所在 ECS 的 IPVS 规则

可以看到,源端数据链路访问 svc 的 externalip 8.219.164.113 时,如果链路到达 ECS 的OS内,会命中ipvs规则,但是我们可以看到EcternalIP 并没有相关的后端 endpoint,链路达到 OS 后,会命中 IPVS 规则,但是没有后端 pod,所以会出现 connection refused

在这里插入图片描述

小结:不可以访问到目的端,此时会访问失败,Connection refused

在这里插入图片描述

▲数据链路转发示意图

在这里插入图片描述

▲内核协议栈示意图

  • 数据链路:ECS1 Pod1 eth0 -> vethxxx1 ->
  • 数据链路要经过一次半内核协议栈,分别是 Pod1 协议栈,半个 ECS1 OS 协议栈
  • 如果访问的 SVC 的 External IP,或者是 Local 模式下,访问 SVC 的 externalIP,数据链路通过 veth pair 进到 ECS OS内后,会命中相应的 IPVS 规则,但是由于 Local 模式,External IP的 IPVS 为空,所以命中规则但是无转发后端,整个链路会在 ipvs 终止,访问失败。所以建议集群内采用 clusterip 访问,这也是 k8s 官方推荐的最佳实践。

场景四:ExternalTrafficPolicy 为 Local 时,Client 来自于集群外

此场景包含下面几个子场景,数据链路可以归纳为一种:A.访问SVC External IP, ExternalTrafficPolicy 为 Local时, Client 和服务端 Pod 部署于不同 ECS,其中 client 为集群外

环境

在这里插入图片描述

Deployment为nginx1, 分别为三个pod nginx1-76c99b49df-4zsdj和nginx1-76c99b49df-7plsr 部署在 ap-southeast-1.10.0.1.206 ECS上,最后一个pod nginx1-76c99b49df-s6z79 部署在其他节点 ap-southeast-1.10.0.1.216 上

Service nginx1 的ExternalTrafficPlicy 为 Local

在这里插入图片描述

内核路由

Pod 网络空间和 ECS OS 网络空间的数据交换在 2.1 场景一中已经做了详细描述,此处不再果断篇幅描述。

SLB 相关配置

从 SLB 控制台,可以看到 SLB 后端的虚拟服务器组中只有两个 ECS 节点ap-southeast-1.10.0.1.216 和 ap-southeast-1.10.0.1.206。集群内的其他节点 ,比如 ap-southeast-1.10.0.0.180 并未被加到 SLB 的后端虚拟服务器组中。虚拟服务器组的 IP 为 ECS 的 IP,端口为 service 里面的 nodeport 端口 32580.

在这里插入图片描述

故 ExternalTrafficPolicy 为 Local 模式下,只有有 Service 后端 pod 所在的 ECS 节点才会被加入到 SLB 的后端虚拟服务器组中,参与 SLB 的流量转发,集群内的其他节点不参与 SLB 的转发

SLB 虚拟服务器组 ECS 的 IPVS 规则

从SLB的虚拟服务器组中的两个 ECS 可以看到,对于 nodeip+nodeport 的 ipvs转发规则是不同。ExternalTrafficPolicy 为 Local 模式下,只有该节点上的护短 pod 才会被加到该节点的 ipvs 转发规则中,其他节点上的后端 pod 不会加进来,这样保证了被 SLB 转发的链路,只会被转到该节点上的 pod,不会转发到其他节点上。

node1:ap-southeast-1.10.0.1.206

在这里插入图片描述

node1:ap-southeast-1.10.0.1.216

在这里插入图片描述

小结:可以访问到目的端

在这里插入图片描述

▲数据链路转发示意图

该图示意了只有后端 pod 所在 ECS 才会加到 SLB 后端中,从集群外部访问 SVC 的externalIP(SLB IP)的情况,可见数据链路只会被转发到虚拟服务器组中的 ECS,不会再被转发到集群内其他节点上。

在这里插入图片描述

▲内核协议栈示意图

Conntack 表信息

Node:

src 是集群外部客户端IP,dst 是节点 IP,dport 是 SVC 中的 nodeport。并且期望是由该 ECS 上的 pod 172.23.96.82 来回包给源端

在这里插入图片描述

  • 数据链路:client -> SLB -> ECS eth0 + ECS nodeport -> cni0 -> vethxxxxx -> ECS1 Pod1 eth0
  • 数据链路要经过两次内核协议栈,分别是 Pod1 协议栈, ECS1 OS 协议栈
  • ExternalTrafficPolicy 为 Local 模式下,只有有 Service 后端 pod 所在的 ECS 节点才会被加入到SLB的后端虚拟服务器组中,参与 SLB 的流量转发,集群内的其他节点不参与 SLB 的转发

场景五:ExternalTrafficPolicy 为 Cluster 时,Client 来自于集群外

此场景包含下面几个子场景,数据链路可以归纳为一种:

1.访问 SVCExternal IP, ExternalTrafficPolicy 为 Cluster 时, Client 和服务端 Pod部署于不同 ECS,其中 client 为集群外

环境

在这里插入图片描述

Deployment为nginx1, 分别为三个pod nginx1-76c99b49df-4zsdj和nginx1-76c99b49df-7plsr 部署在 ap-southeast-1.10.0.1.206 ECS上,最后一个pod nginx1-76c99b49df-s6z79 部署在其他节点 ap-southeast-1.10.0.1.216 上

Service nginx2 的 ExternalTrafficPlicy 为 Cluster

在这里插入图片描述

内核路由

Pod 网络空间和 ECS OS 网络空间的数据交换在 2.1 场景一中已经做了详细描述,此处不再果断篇幅描述。

SLB 相关配置

从SLB 控制台,集群内所有节点ap-southeast-1.10.0.0.180、ap-southeast-1.10.0.1.216 和 ap-southeast-1.10.0.1.206 都被加到SLB的虚拟服务器组中。其中 虚拟服务器组的 IP 为 ECS 的 IP,端口为 service 里面的 nodeport 端口 30875.

在这里插入图片描述

故 ExternalTrafficPolicy 为 CLuster 模式下,集群内所有的 ECS 节点都会被加入到 SLB 的后端虚拟服务器组中,参与 SLB 的流量转发。

SLB 虚拟服务器组 ECS 的 IPVS 规则

从SLB的虚拟服务器组中的可以看到,对于 nodeip+nodeport 的 ipvs 转发规则是一致的。ExternalTrafficPolicy为 CLuster 模式下,所有的 service 后端 pod 都会被加到所有节点的 ipvs 的转发规则中,即使是该节点有后端 pod,流量也不一定会被转发到该节点上 pod,可能会被转发到其他节点上的后端 pod。

node1:ap-southeast-1.10.0.1.206 (该节点有后端pod)

在这里插入图片描述

node1:ap-southeast-1.10.0.1.216 (该节点有后端pod)

在这里插入图片描述

node3: ap-southeast-1.10.0.0.180 (该节无后端pod)

在这里插入图片描述

小结:可以访问到目的端

在这里插入图片描述

▲数据链路转发示意图

该图示意了集群内所有 ECS 都会被加到 SLB 后端中,从集群外部访问 SVC 的externalIP(SLB IP)的情况,数据流量可能会被转发到其他节点上

内核协议栈示意图:

内核协议栈示意图已经在 2.4 场景一中已经做了详细描述,此处不再果断篇幅描述。

Conntack 表信息

链路1:

ap-southeast-1.10.0.0.180:

此时数据链路对应示意图中的链路1,可以看到数据链路被转到 ap-southeast-1.10.0.0.180 节点,该节点上并没有 service 的后端 pod,通过 conntrack 信息,可以看到

src 是集群外部客户端 IP,dst 是节点 IP,dport 是 SVC 中的 nodeport。并且期望是172.23.96.163 来回包给 10.0.0.180 。通过前述信息,可以得知172.23.96.163 是nginx1-76c99b49df-7plsr pod,部署在 ap-southeast-1.10.0.1.206

在这里插入图片描述

ap-southeast-1.10.0.1.206:

通过此节点conntrack 表,可以看到src是 node ap-southeast-1.10.0.0.180,dst 是 172.23.96.163的80 端口,回包也是直接回给 node ap-southeast-1.10.0.0.180.

在这里插入图片描述

综上可以看到 src 变换了多次,故在 CLuster 模式下,会存在丢失真实客户端 IP 的情况

链路2:

src 是集群外部客户端 IP,dst 是节点IP,dport 是 SVC 中的 nodeport。并且期望是由该 ECS 上的 pod 172.23.96.82 来回包给 172.23.96.65,此地址是 SLB 集群中的一个地址

在这里插入图片描述

  • 数据链路:情景一:client -> SLB -> ECS eth0 + ECS nodeport -> cni0 -> vethxxxxx -> ECS1 Pod1 eth0情景二:client -> SLB -> ECS1 eth0 + ECS1 nodeport -> VPC Routing -> ECS2 eth0 + pod port -> cni0 -> vethxxxxx -> ECS2 Pod1 eth0
  • 数据链路要经过三次内核协议栈,分别是 ECS1 OS、 ECS2 OS 协议栈 和 Pod 协议栈
  • ExternalTrafficPolicy 为 CLuster 模式下,kubernetes 所有 ECS 节点都会被加入到 SLB 的后端虚拟服务器组中,参与 SLB 的流量转发,此时会存在数据路在集群内被多个 ECS 转发的场景,该情况下会丢失真实客户端IP的情况

总结

本篇文章主要聚焦 ACK 在 Flannel 模式下,不同 SOP 场景下的数据链路转发路径。随着微服务化和云原生化,网络场景日趋复杂,作为 kubernetes 原生的网络模型——Flannel,不同的访问环境,一共可以分为10个 SOP 场景。通过深入简出的剖析,可以归纳为5个场景,并对这五个场景的转发链路,技术实现原理,云产品配置等一一梳理并总结,这对我们遇到 Flannel 架构下的链路抖动、最优化配置,链路原理等提供了初步指引方向。接下来将进入到阿里自研的 CNI 接口 Terway 模式,也是目前线上集群使用最多的模式,下一系列我们先带来 Terway ENI 模式的全景解析——ACK 全景剖析阿里云容器网络数据链路(二):Terway ENI。

点击此处了解阿里云容器服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单机最高能效270亿参数GPT模型的文本生成与理解

作者:李鹏,王玮,陈嘉乐,黄松芳,黄俊 单位:阿里云智能机器学习平台PAI & 达摩院自然语言基础技术 概述 GPT模型能较好的处理文本生成领域的各种任务,比如文本补全,自由问答&am…

scala 流计算之 aggregate()

函数参数详解 def aggregate[B](z: >B)(seqop: (B, A) > B, combop: (B, B) > B): BB: 函数返回结果的数据类型;z:聚类前的参数的初始化值;seqop:是用于序列运算的运算符,用于计算所述集合中每个元素的总和&a…

JAVA环境安装及配置

目录 一、前言 二、JAVA下载及安装配置 1、下载SDK开发包 2、安装SDK 3、环境变量配置 一、前言 大学毕业前系统学习过JAVA,记得当时还是1.6版本,并且特意研读了我人生中第一本最厚的图书《JAVA学习笔记》。掌握了那时比较流行的框架SSH,…

场景编程集锦 - 趣谈验证码

1. 场景描述 或许是近年来电话推销机器人太泛滥了,常常搞得正常的电话销售“灰头土脸”。有人为了验证对方究竟是人还是机器,竟想出来各种各样的奇葩手段。最近一小伙接到了一个汽车推销电话,但他听声音无法判断对方是不是人工客服人员。尽管…

大数据导论笔记

视频课林子雨老师 大数据导论 网页笔记预习大数据导论 大数据导论复习笔记 一、大数据概述 1.数据的概念、类型和组织形式 数据概念 数据类型 (1)数据基本类型 数据类型包括文本,图片,音频,视频等 数据组织形式 2…

【UE4 第一人称射击游戏】30-简单的任务提示功能

上一篇:UE4 第一人称射击游戏】29-流畅的枪械移动本篇效果:到达指定位置后,右上角会出现新的任务提示信息步骤:打开“ThirdPersonCharacter”,添加一个string类型变量默认值设为“Progress Through The Level”打开“F…

.Net Core实现健康检查

ASP.NET Core 提供运行状况检查中间件和库,以用于报告应用基础结构组件的运行状况。运行状况检查由应用程序作为 HTTP 终结点公开。可以为各种实时监视方案配置运行状况检查终结点: 运行状况探测可以由容器业务流程协调程和负载均衡器用于检查应用的状态…

MySQL 8.0 多实例安装

规划&#xff1a;主要就是data目录和port 端口以及socket 文件路径的差异管理&#xff1a; 配置文件准备 mkdir -p /data/330{6..8}/data chown -R mysql.mysql /data/* cat > /data/3306/my.cnf <<EOF [mysqld] usermysql basedir/usr/local/mysql datadir/data/3306…

新华三命令行基础

命令使用基础命令行视图用户视图• <h3c>• 只能查看配置&#xff0c;不能修改配置只能进行查看系统视图• [h3c]• 可以查看和修改全局配置接口视图• [H3C-GigabitEthernet0/0]• 可以对接口修改配置视图的切换system-view• 从用户视图进入系统视图interface g0/0• 从…

websocket_flask

1.使用socket协议构建server client文件&#xff0c;服务端构建maskrcnn分割模型&#xff0c;客户端发送图片返回分割结果&#xff1b;使用纯socket通信&#xff0c;通信传输效率较低&#xff0c;接收数据需要1024byte连续接收代码如下#server.py import socket import torchvi…

社区发现系列03-Louvain算法分辨率

1、分辨率局限 louvain算法存在的问题&#xff1a;分辨率局限。就是说当通过优化模块度来发现社区结构时&#xff0c;网络在存在一个固有的分辨率局限&#xff0c;导致一些规模较小但是结构显著的社区淹没在大的社区中&#xff0c;无法被识别到。 造成这个问题的根本原因是模块…

曝光:超算实习生的训练模式很独特

升职无望&#xff0c;随时被裁&#xff1b;内卷压力&#xff0c;无情996现如今的打工人实惨&#xff0c;但无论客观行情如何、经济到底有多难&#xff0c;背靠国家政策支持的高级技术人才&#xff0c;任何时候都吃香。超算、先进计算就是这样的行业&#xff0c;已经被定为未来3…

持续交付-Blue Ocean 应用

Blue Ocean 提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务。Blue Ocean 特性&#xff1a;流水线编辑器&#xff1a;用于创建贯穿始终的持续交付流水线&#xff0c;是一种直观并可视化的流水线编辑器。流水线的可视化&#xff1a;对流水线的可视化表示&#xff0c;提…

vm虚拟机及Linux系统安装教程详解

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Java集合源码学习(2)ArrayList

1 概述 ArrayList是基于数组实现的&#xff0c;是一个动态数组&#xff0c;其容量能自动增长&#xff0c;类似于C语言中的动态申请内存&#xff0c;动态增长内存。 ArrayList不是线程安全的&#xff0c;只能用在单线程环境下&#xff0c;多线程环境下可以考虑用Collections.s…

Commonsense and Named Entity Aware Knowledge Grounded Dialogue Generation

摘要 motivation&#xff1a; 以外部知识为基础&#xff0c;在对话历史背景下解释语言模式&#xff0c;如省写、回指和共同引用&#xff0c;对对话的理解和生成至关重要。 this paper&#xff1a; 在本文中&#xff0c;我们提出了一种新的开放域对话生成模型&#xff0c;该模型…

【C++】vector的使用及其迭代器失效问题

文章目录一、vector介绍二、vector使用1. 常用构造函数2. 迭代器3. 空间操作4. 增删查改5. 动态二维数组三、vector迭代器失效问题1. 扩容导致迭代器失效2. erase导致迭代器失效3. g对迭代器失效的处理一、vector介绍 vector是表示可变大小数组的序列容器。与数组一样&#xf…

vue打包exe

文章目录一、前言二、实现方法1.跑通示例代码 electron-quick-start<1>clone示例代码<2>进入项目根目录&#xff0c;下载依赖<3>测试运行2.打包自己的 vue 项目3.将vue项目整合到示例代码中打包exe<1>将打包好的 dist 文件夹复制到示例代码 electron-q…

【Linux】gdb调试器的使用

All is well that ends well.结果好就是好。 个人主页&#xff1a;阿润菜菜 简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 Windows 操作系统中&#xff0c;我们更习惯使用一些已经集成好的开发环境&#xff08;IDE&#xff09;&#xff0c;如 VS、VC、Dev-…

LeetCode461. 汉明距离,x与y异或,之后用f(x)=x (x−1))次数与Integer.bitCount求二进制1的个数

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 1.x ^ y异或&#xff0c;用f(x)x & (x−1)&#xff09;次数求二进制中1的个数&#xff0c;那么 f(x) 恰为x删去其二进制表示中…