本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法。

故障现象

该问题的表现是安装了 sidecar proxy 的应用在启动后的一小段时间内无法通过网络访问 pod 外部的其他服务,例如外部的 HTTP,MySQL,Redis等服务。如果应用没有对依赖服务的异常进行容错处理,该问题还常常会导致应用启动失败。下面我们以该问题导致的一个典型故障的分析过程为例对该问题的原因进行说明。

典型案例:某运维同学反馈:昨天晚上 Istio 环境中应用的心跳检测报 connect reset,然后服务重启了。怀疑是 Istio 环境中网络不稳定导致了服务重启。

故障分析

根据运维同学的反馈,该 pod 曾多次重启。因此我们先用 kubectl logs --previous 命令查询 awesome-app 容器最后一次重启前的日志,以从日志中查找其重启的原因。

kubectl logs --previous awesome-app-cd1234567-gzgwg -c awesome-app

从日志中查询到了其重启前最后的错误信息如下:

Logging system failed to initialize using configuration from 'http://log-config-server:12345/******/logback-spring.xml'
java.net.ConnectException: Connection refused (Connection refused)at java.net.PlainSocketImpl.socketConnect(Native Method)at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

从错误信息可以得知,应用进程在启动时试图通过 HTTP 协议从配置中心拉取 logback 的配置信息,但该操作由于网络异常失败了,导致应用进程启动失败,最终导致容器重启。

是什么导致了网络异常呢?我们再用 Kubectl get pod 命令查询 Pod 的运行状态,尝试找到更多的线索:

kubectl get pod awesome-app-cd1234567-gzgwg  -oyaml

命令输出的 pod 详细内容如下,该 yaml 片段省略了其他无关的细节,只显示了 lastState 和 state 部分的容器状态信息。

containerStatuses:- containerID: lastState:terminated:containerID: exitCode: 1finishedAt: 2020-09-01T13:16:23Zreason: ErrorstartedAt: 2020-09-01T13:16:22Zname: awesome-appready: truerestartCount: 2state:running:startedAt: 2020-09-01T13:16:36Z- containerID: lastState: {}name: istio-proxyready: truerestartCount: 0state:running:startedAt: 2020-09-01T13:16:20ZhostIP: 10.0.6.161

从该输出可以看到 pod 中的应用容器 awesome-app 重启了两次。整理该 pod 中 awesome-app 应用容器和 istio-proxy sidecar 容器的启动和终止的时间顺序,可以得到下面的时间线:

  1. 2020-09-01T13:16:20Z istio-proxy 启动
  2. 2020-09-01T13:16:22Z awesome-app 上一次启动时间
  3. 2020-09-01T13:16:23Z awesome-app 上一次异常退出时间
  4. 2020-09-01T13:16:36Z awesome-app 最后一次启动,以后就一直正常运行

可以看到在 istio-proxy 启动2秒后,awesome-app 启动,并于1秒后异常退出。结合前面的日志信息,我们知道这次启动失败的直接原因是应用访问配置中心失败导致。在 istio-proxy 启动16秒后,awesome-app 再次启动,这次启动成功,之后一直正常运行。

istio-proxy 启动和 awesome-app 上一次异常退出的时间间隔很短,只有2秒钟,因此我们基本可以判断此时 istio-proxy 尚未启动初始化完成,导致 awesome-app 不能通过istio-proxy 连接到外部服务,导致其启动失败。待 awesome-app 于 2020-09-01T13:16:36Z 再次启动时,由于 istio-proxy 已经启动了较长时间,完成了从 pilot 获取动态配置的过程,因此 awesome-app 向 pod 外部的网络访问就正常了。

如下图所示,Envoy 启动后会通过 xDS 协议向 pilot 请求服务和路由配置信息,Pilot 收到请求后会根据 Envoy 所在的节点(pod或者VM)组装配置信息,包括 Listener、Route、Cluster等,然后再通过 xDS 协议下发给 Envoy。根据 Mesh 的规模和网络情况,该配置下发过程需要数秒到数十秒的时间。由于初始化容器已经在 pod 中创建了 Iptables rule 规则,因此这段时间内应用向外发送的网络流量会被重定向到 Envoy ,而此时 Envoy 中尚没有对这些网络请求进行处理的监听器和路由规则,无法对此进行处理,导致网络请求失败。(关于 Envoy sidecar 初始化过程和 Istio 流量管理原理的更多内容,可以参考这篇文章 Istio流量管理实现机制深度解析) img

解决方案

在应用启动命令中判断 Envoy 初始化状态

从前面的分析可以得知,该问题的根本原因是由于应用进程对 Envoy sidecar 配置初始化的依赖导致的。因此最直接的解决思路就是:在应用进程启动时判断 Envoy sidecar 的初始化状态,待其初始化完成后再启动应用进程。

Envoy 的健康检查接口 localhost:15020/healthz/ready 会在 xDS 配置初始化完成后才返回 200,否则将返回 503,因此可以根据该接口判断 Envoy 的配置初始化状态,待其完成后再启动应用容器。我们可以在应用容器的启动命令中加入调用 Envoy 健康检查的脚本,如下面的配置片段所示。在其他应用中使用时,将 start-awesome-app-cmd 改为容器中的应用启动命令即可。

apiVersion: apps/v1
kind: Deployment
metadata:name: awesome-app-deployment
spec:selector:matchLabels:app: awesome-appreplicas: 1template:metadata:labels:app: awesome-appspec:containers:- name: awesome-appimage: awesome-appports:- containerPort: 80command: ["/bin/bash", "-c"]args: ["while [[ \"$(curl -s -o /dev/null -w ''%{http_code}'' localhost:15020/healthz/ready)\" != '200' ]]; do echo Waiting for Sidecar;sleep 1; done; echo Sidecar available; start-awesome-app-cmd"]

该流程的执行顺序如下:

  1. Kubernetes 启动 应用容器。
  2. 应用容器启动脚本中通过 curl get localhost:15020/healthz/ready 查询 Envoy sidcar 状态,由于此时 Envoy sidecar 尚未就绪,因此该脚本会不断重试。
  3. Kubernetes 启动 Envoy sidecar。
  4. Envoy sidecar 通过 xDS 连接 Pilot,进行配置初始化。
  5. 应用容器启动脚本通过 Envoy sidecar 的健康检查接口判断其初始化已经完成,启动应用进程。

该方案虽然可以规避依赖顺序的问题,但需要对应用容器的启动脚本进行修改,对 Envoy 的健康状态进行判断。更理想的方案应该是应用对 Envoy sidecar 不感知。

通过 pod 容器启动顺序进行控制

通过阅读 Kubernetes 源码 ,我们可以发现当 pod 中有多个容器时,Kubernetes 会在一个线程中依次启动这些容器,如下面的代码片段所示:

    // Step 7: start containers in podContainerChanges.ContainersToStart.for _, idx := range podContainerChanges.ContainersToStart {start("container", containerStartSpec(&pod.Spec.Containers[idx]))}

因此我们可以在向 pod 中注入 Envoy sidecar 时将 Envoy sidecar 放到应用容器之前,这样 Kubernetes 会先启动 Envoy sidecar,再启动应用容器。但是还有一个问题,Envoy 启动后我们并不能立即启动应用容器,还需要等待 xDS 配置初始化完成。这时我们就可以采用容器的 postStart lifecycle hook来达成该目的。Kubernetes 会在启动容器后调用该容器的 postStart hook,postStart hook 会阻塞 pod 中的下一个容器的启动,直到 postStart hook 执行完成。因此如果在 Envoy sidecar 的 postStart hook 中对 Envoy 的配置初始化状态进行判断,待完成初始化后再返回,就可以保证 Kubernetes 在 Envoy sidecar 配置初始化完成后再启动应用容器。该流程的执行顺序如下:

  1. Kubernetes 启动 Envoy sidecar 。
  2. Kubernetes 执行 postStart hook。
  3. postStart hook 通过 Envoy 健康检查接口判断其配置初始化状态,直到 Envoy 启动完成 。
  4. Kubernetes 启动应用容器。

Istio 已经在 1.7 中合入了该修复方案,参见 Allow users to delay application start until proxy is ready #24737。

插入 sidecar 后的 pod spec 如下面的 yaml 片段所示。postStart hook 配置的 pilot-agent wait 命令会持续调用 Envoy 的健康检查接口 '/healthz/ready' 检查其状态,直到 Envoy 完成配置初始化。这篇文章Delaying application start until sidecar is ready中介绍了更多关于该方案的细节。

apiVersion: v1
kind: Pod
metadata:name: sidecar-starts-first
spec:containers:- name: istio-proxyimage: lifecycle:postStart:exec:command:- pilot-agent- wait- name: applicationimage: my-application

该方案在不对应用进行修改的情况下比较完美地解决了应用容器和 Envoy sidecar 初始化的依赖问题。但是该解决方案对 Kubernetes 有两个隐式依赖条件:Kubernetes 在一个线程中按定义顺序依次启动 pod 中的多个容器,以及前一个容器的 postStart hook 执行完毕后再启动下一个容器。这两个前提条件在目前的 Kuberenetes 代码实现中是满足的,但由于这并不是 Kubernetes的 API 规范,因此该前提在将来 Kubernetes 升级后很可能被打破,导致该问题再次出现。

Kubernetes 支持定义 pod 中容器之间的依赖关系

为了彻底解决该问题,避免 Kubernetes 代码变动后该问题再次出现,更合理的方式应该是由 Kubernetes 支持显式定义 pod 中一个容器的启动依赖于另一个容器的健康状态。目前 Kubernetes 中已经有一个 issue Support startup dependencies between containers on the same Pod #65502 对该问题进行跟踪处理。如果 Kubernetes 支持了该特性,则该流程的执行顺序如下:

  1. Kubernetes 启动 Envoy sidecar 容器。
  2. Kubernetes 通过 Envoy sidecar 容器的 readiness probe 检查其状态,直到 readiness probe 反馈 Envoy sidecar 已经 ready,即已经初始化完毕。
  3. Kubernetes 启动应用容器。

解耦应用服务之间的启动依赖关系

以上几个解决方案的思路都是控制 pod 中容器的启动顺序,在 Envoy sidecar 初始化完成后再启动应用容器,以确保应用容器启动时能够通过网络正常访问其他服务。但这些方案只是『头痛医头,脚痛医脚』,是治标不治本的方法。因为即使 pod 中对外的网络访问没有问题,应用容器依赖的其他服务也可能由于尚未启动,或者某些问题而不能在此时正常提供服务。要彻底解决该问题,我们需要解耦应用服务之间的启动依赖关系,使应用容器的启动不再强依赖其他服务。

在一个微服务系统中,原单体应用中的各个业务模块被拆分为多个独立进程(服务)。这些服务的启动顺序是随机的,并且服务之间通过不可靠的网络进行通信。微服务多进程部署、跨进程网络通信的特定决定了服务之间的调用出现异常是一个常见的情况。为了应对微服务的该特点,微服务的一个基本的设计原则是 "design for failure",即需要以优雅的方式应对可能出现的各种异常情况。当在微服务进程中不能访问一个依赖的外部服务时,需要通过重试、降级、超时、断路等策略对异常进行容错处理,以尽可能保证系统的正常运行。

Envoy sidecar 初始化期间网络暂时不能访问的情况只是放大了微服务系统未能正确处理服务依赖的问题,即使解决了 Envoy sidecar 的依赖顺序,该问题依然存在。例如在本案例中,配置中心也是一个独立的微服务,当一个依赖配置中心的微服务启动时,配置中心有可能尚未启动,或者尚未初始化完成。在这种情况下,如果在代码中没有对该异常情况进行处理,也会导致依赖配置中心的微服务启动失败。在一个更为复杂的系统中,多个微服务进程之间可能存在网状依赖关系,如果没有按照 "design for failure" 的原则对微服务进行容错处理,那么只是将整个系统启动起来就将是一个巨大的挑战。对于本例而言,可以采用一个类似这样的简单容错策略:先用一个缺省的 logback 配置启动应用进程,并在启动后对配置中心进行重试,待连接上配置中心后,再使用配置中心下发的配置对 logback 进行设置。

小结

应用容器对 Envoy Sidecar 启动依赖问题的典型表现是应用容器在刚启动的一小段时间内调用外部服务失败。原因是此时 Envoy sidecar 尚未完成 xDS 配置的初始化,因此不能为应用容器转发网络请求。该调用失败可能导致应用容器不能正常启动。此问题的根本原因是微服务应用中对依赖服务的调用失败没有进行合理的容错处理。对于遗留系统,为了尽量避免对应用的影响,我们可以通过在应用启动命令中判断 Envoy 初始化状态的方案,或者升级到 Istio 1.7 来缓解该问题。但为了彻底解决服务依赖导致的错误,建议参考 "design for failure" 的设计原则,解耦微服务之间的强依赖关系,在出现暂时不能访问一个依赖的外部服务的情况时,通过重试、降级、超时、断路等策略进行处理,以尽可能保证系统的正常运行。

参考文档

  • App container unable to connect to network before sidecar is fully running #11130(https://github.com/istio/istio/issues/11130)
  • Delaying application start until sidecar is ready(https://medium.com/@marko.luksa/delaying-application-start-until-sidecar-is-ready-2ec2d21a7b74)
  • Kubernetes Container Lifecycle Hooks(https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/)
  • Istio流量管理实现机制深度解析 (https://zhaohuabing.com/post/2018-09-25-istio-traffic-management-impl-intro/)

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. python的安装以及输入和输出

    Python介绍. Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解释型语言: 这意味着开发过程中没有了…...

    2024/3/23 12:16:08
  2. centos7升级openSSH(亲测可用)

    centos7升级openSSH(修改版)目录centos7升级openSSH(修改版) 1一:查看版本和下载 31.1所需安装包目录 31.2:查看系统openssh包 31.3:查看版本 31.4:下载地址 3二:安装telnet 42.1:卸载telnet 42.2:上传安装包 42.3:安装 52.4:启动服务 52.5:设置开机自启 52.6:查看telnet服务是…...

    2024/4/7 0:42:31
  3. 关于建造的逻辑: BIM和VDC

    关于建造的逻辑: BIM和VDC文章目录内容总结内容 BIM(Building Information Modeling)直译作“建筑信息模型”, 缩写和字面解释没有错,但内涵并不仅仅是“三维”或者“几何”模型这种角度。毕竟,英文中的modeling 和model 差距还是挺大的,简短的中文翻译反而表达不出来。所以…...

    2024/4/8 19:47:15
  4. Dubbo(十二)源码解析 之 服务发布

    源码解析 之 服务发布 1. 查找服务发布的入口之前已经分析过标签解析了,现在我们看下这个标签解析后封装的类: public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListe…...

    2024/4/8 2:29:02
  5. iPhone12、iPhone12 Pro、iPhone12 Max、iPhone12 Pro Max 什么时候上市

    苹果官网的海报显示,北京时间9月16日凌晨一点苹果将会发布新的活动。iphone11爆降2000 太给力了 机会不容错过 http://www.apple.com.cn iPhone 12系列的硬件配置,iPhone 12系列总共包含四款产品,分别是5.4英寸的iPhone 12入门版、6.1英寸的iPhone 12Pro\iPhone 12Max以及6.…...

    2024/4/20 9:54:20
  6. 第一章 分布式计算的概述

    第一章 分布式计算的概述 分布式计算定义分布式计算指在分布式系统上执行的计算。分布式计算是将一个大型计算任务分成很多部分分别交给其他的计算机处理,并将所有的计算结果合并为原问题的解决方案。这里与并行计算不同的是,并行计算是使用多个处理器并行执行单个计算。 分布…...

    2024/4/12 8:55:04
  7. 学习笔记(30):AI-人脸口罩识别训练营-第一天-口罩识别的技术点分析和模型训练

    立即学习:https://edu.csdn.net/course/play/30480/442389?utm_source=blogtoedu大师傅安抚打发撒旦飞洒地方上发顺丰安抚胜多负少的发生...

    2024/4/3 5:44:33
  8. 小白学习:李航《统计学习方法》第二版第11章 条件随机场(二)----条件随机场

    小白学习:李航《统计学习方法》第二版第11章 条件随机场(二)----条件随机场 小提示:食用这篇文章前,务必需要搞懂一中的马尔科夫随机场的内容。因为条件随机场在模型建立方面“依仗着”关于马尔科夫随机场的性质,所以大家可以去看看前一栏。 小白学习:李航《统计学习方法…...

    2024/3/24 21:45:50
  9. vue小白教程-4 想写啥写啥的小本本案例

    需求分析:功能需求:1.新增新增列表结构 (用v-for和数组)获取输入端数据(用v-model绑定)按回车保存 (v-on.enter)2.删除v-on splice索引3.统计统计条数(v-textlength)4.清空点击清楚所有信息(v-on 删除数组)5.隐藏没数据时就隐藏(因为不频繁用v-if)代码实现:<…...

    2024/4/3 4:33:27
  10. FreeRTOS

    FreeRTOS中断优先级配置...

    2024/3/23 12:16:05
  11. 京喜无货源:京东京喜入驻要求,未来趋势如何

    在生活中,大家是不是被网购改变了生活方式,足不出户就可以买到自己心仪的商品,享受到贴心的服务,随着这种简单、舒适的网购放手深入人心,越来越多的电商开始涌现,除了人们较为熟悉的淘宝、京东等老资历电商平台,新生力量也在电商平台开始涌现。现在我们就聊聊京东旗下的…...

    2024/3/23 12:16:01
  12. 《javascript高级程序设计》学习笔记(二)

    第四章、变量、作用域和内存问题 1、变量 基本类型:Undefined、Null、Boolean、Number和String。这5种基本数据类型是按值访问的,复制基本类型值,两个变量是不会互相影响的。示例: var num1 = 5; var num2 = num1; var num2 = 6; alert(num1) // 5 alert(num2) // 6引用类型…...

    2024/3/25 4:51:03
  13. 我的c++类文章索引

    c++增强c类接口安全性. c++调试,可根据类型与级别而调整 宏中的#,##,与…,VA_ARGS,备忘 c++型列. 测试虚继承 cmake说gm与c++latest冲突,如何解决 c++安全编写对象池中文版 继承体系下析构函数的顺序 不是用继承,而是用插件 学习AA大神c++设计新思维笔记:11多方法 学习AA大神c+…...

    2024/4/2 20:02:00
  14. k8s 基本使用(下)

    如果你没有看过上篇的话,推荐阅读完 k8s 基本使用(上)后再阅读本篇内容。kubectl create 创建资源!k8s 中的所有东西都可以通过kubectl create命令创建,无论你是想创建一个 pod 还是一个大型的滚动升级服务deployment,create命令都可以做到。使用create生成一个资源主要有…...

    2024/4/18 3:46:20
  15. 静态页面和动态页面的区别

    什么是静态页面?什么是动态页面?两者有什么区别?很多不了解前端技术的人可能会认为静态页面就是一个内容固定不变,没有任何效果的页面,而动态页面则是页面非常丰富,有各种交互效果和动态效果的页面。其实这个理解是错误的。通过本篇文章的阅读,详细为大家分享一下静态页…...

    2024/4/4 16:45:10
  16. Linux防火墙技术入门

    安装CentOS7.2-1511操作系统,云主机类型使用1vcpu/2G内存/20G硬盘。节点规划IP主机名节点192.168.20.10user1用户节点1192.168.20.20user2用户节点2基础环境准备IP地址配置user1节点修改IP:[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736TYPE=Eth…...

    2024/4/22 22:20:24
  17. [Linux Audio Driver] 声卡与XML匹配流程

    0. usecase usecase只是qcom内部定义的一个数据结构,位于hal层,用作处理处理内部声卡逻辑和输出方案。 代码路径: LA.UM.5.6\hardware\qcom\audio\hal\audio_hw.h /* These are the supported use cases by the hardware.* Each usecase is mapped to a specific PCM device…...

    2024/3/26 6:19:18
  18. Springboot配置文件的所有属性

    转载自:https://www.cnblogs.com/zhq510/p/11078292.html作者:一只愤怒的橘子# ---------------------------------------- # 核心属性 # ----------------------------------------# 文件编码 banner.charset= UTF-8 # 文件位置 banner.location= classpath:banner.txt# 日志…...

    2024/3/29 4:53:10
  19. Comprehensive anticancer drug response prediction based on a simple cell line drug complex network m

    Comprehensive anticancer drug response prediction based on a simple cell line drug complex network model基于简单细胞系药物复杂网络模型的综合抗癌药物反应预测Abstract Background: Accurate prediction of anticancer drug responses in cell lines is a crucial ste…...

    2024/3/29 3:44:21
  20. docker的安装和相关配置

    CentOS 7配置静态IP 第一步:修改网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.100.95(IP地址) NETMASK=255.255.255.0(子网掩码) GATEWAY=192.168.100.254(网关) DNS1=8.8.8.8(首选DNS)第二步:关闭防火墙查看防火状态 systemctl stat…...

    2024/4/22 9:41:53

最新文章

  1. 前端单行代码, 直接体现一个人的基础水平!!!

    文章目录 前端单行代码&#xff0c; 直接体现一个人的基础水平&#xff01;&#xff01;&#xff01;数组生成数组打乱数组数组简单数据去重数组唯一值数据去重多数组取交集查找最大值索引查找最小值索引找到最接近的数值压缩多个数组矩阵交换行和列 数字转换进制转换 web滚动到…...

    2024/4/23 19:19:58
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 线程池的方式爬虫

    <!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…...

    2024/4/21 20:36:50
  4. Vue ts 如何给 props 中的变量指定特定类型,比如 Interface 类的

    Vue ts 如何给 props 中的变量指定特定类型&#xff0c;比如 Interface 类的 我有一个这样的变量值类型 一、在没用 ts 之前的 props 类型指定方式 我们都知道之前在没用 ts 之前的 props 变量值类型指定方式&#xff1a; 如下图&#xff0c;billFood 定义方式是这样的&…...

    2024/4/23 6:24:09
  5. C#-实现软删除

    文章目录 前言1. 使用布尔字段标记删除状态2. 修改查询以忽略软删除的记录3. 实现软删除的方法4. 考虑使用全局查询过滤器5. 处理关联实体6. 考虑性能和存储软删除的好处&#xff1a;软删除的坏处&#xff1a; 总结 前言 后端中&#xff0c;经常使用软删除来标志删除一些数据。…...

    2024/4/23 6:22:08
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/22 23:19:42
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/23 0:57:45
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/4/23 9:32:47
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/4/23 9:32:46
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/4/23 9:23:51
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/23 9:32:46
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/4/23 9:32:45
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/23 9:32:45
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/4/23 6:07:03
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/23 9:32:44
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/23 9:32:44
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/23 9:32:44
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/23 0:54:52
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/4/23 0:54:31
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/4/23 9:32:42
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/4/23 9:32:42
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/4/23 9:32:41
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/4/23 9:32:41
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/4/22 18:18:53
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/23 0:52:04
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57