Kubernetes k8s Pod容器 探针 健康探测

目录

Pod容器健康探测

 为什么要对容器做探测?

启动探测startupprobe

存活性探测livenessProbe

就绪性探测readinessProbe

 ReadinessProbe + LivenessProbe +startupProbe配合使用示例一般程序中需要设置三种探针结合使用,并且也要结合实际情况,来配置初始化检查时间和检测间隔,下面列一个简单的 SpringBoot 项目的例子。


文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘

链接:https://pan.baidu.com/s/1FRbgxf-O7ZxOnmS5SE-0Kw 
提取码:693j 

作者:韩先超老师

Pod容器健康探测

 为什么要对容器做探测?

在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应用在运行期间,可能因为某些意外情况致使程序挂掉。那么如何监控这些容器状态稳定性,保证服务在运行期间不会发生问题,发生问题后进行重启等机制,就成为了重中之重的事情,考虑到这点 kubernetes 推出了活性探针机制。有了存活性探针能保证程序在运行中如果挂掉能够自动重启,但是还有个经常遇到的问题,比如说,在Kubernetes 中启动Pod,显示明明Pod已经启动成功,且能访问里面的端口,但是却返回错误信息。还有就是在执行滚动更新时候,总会出现一段时间,Pod对外提供网络访问,但是访问却发生404,这两个原因,都是因为Pod已经成功启动,但是 Pod 的的容器中应用程序还在启动中导致,考虑到这点Kubernetes推出了就绪性探针机制。

1、默认的健康检查

Kubernetes默认的健康检查机制: 每个容器启动时都会执行一个进程, 此进程由Dockerfile的CMD或ENTRYPOINT指定。 如果进程退出时返回码非零, 则认为容器发生故障, Kubernetes就会根据restartPolicy策略决定是否重启容器。

[root@xianchaomaster1]# cat check.yaml

apiVersion: v1

kind: Pod

metadata:

  name: check

  namespace: default

  labels:

    app: check

spec:

  containers:

  - name: check

    image: busybox:1.28

    imagePullPolicy: IfNotPresent

    command:

    - /bin/sh

    - -c

    - sleep 10;exit

[root@xianchaomaster1 ~]# kubectl get pods -w

NAME        READY   STATUS    RESTARTS   AGE

check       0/1     Pending   0          0s

check       0/1     Pending   0          0s

check       0/1     ContainerCreating   0          0s

check       0/1     ContainerCreating   0          1s

check       1/1     Running             0          1s

check       0/1     Completed           0          11s

check       1/1     Running             1 (1s ago)   12s

check       0/1     Completed           1 (11s ago)   22s

check       0/1     CrashLoopBackOff    1 (13s ago)   34s

check       1/1     Running             2 (13s ago)   34s

check       0/1     Completed           2 (23s ago)   44s

在上面的例子中, 容器进程返回值非零, Kubernetes则认为容器发生故障, 需要重启。 有不少情况是发生了故障, 但进程并不会退出。 比如访问Web服务器时显示500内部错误, 可能是系统超载, 也可能是资源死锁, 此时httpd进程并没有异常退出, 在这种情况下重启容器可能是最直接、 最有效的解决方案。

k8s 提供了三种来实现容器探测的方法,分别是:

1、startupProbe:探测容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。

     

2、livenessprobe:用指定的方式(exec、tcp、http)检测pod中的容器是否正常运行,如果检测失败,则认为容器不健康,那么Kubelet将根据Pod中设置的 restartPolicy策略来判断Pod 是否要进行重启操作,如果容器配置中没有配置 livenessProbe,Kubelet 将认为存活探针探测一直为success(成功)状态。

 

3、readnessprobe:就绪性探针,用于检测容器中的应用是否可以接受请求,当探测成功后才使Pod对外提供网络访问,将容器标记为就绪状态,可以加到pod前端负载,如果探测失败,则将容器标记为未就绪状态,会把pod从前端负载移除。

 

可以自定义在pod启动时是否执行这些检测,如果不设置,则检测结果均默认为通过,如果设置,则顺序为startupProbe>readinessProbe和livenessProbe,readinessProbe和livenessProbe是并发关系

真正的启动顺序

官方文档:Caution: Liveness probes do not wait for readiness probes to succeed. If you want to wait before executing a liveness probe you should use initialDelaySeconds or a startupProbe

也就是 Liveness probes 并不会等到 Readiness probes 成功之后才运行,根据上面的官方文档,Liveness 和 readiness 应该是某种并发的关系。

目前LivenessProbe和ReadinessProbe、startupprobe探测都支持下面三种探针:

1、exec:在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。

2、TCPSocket:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。

3、HTTPGet:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康

探针探测结果有以下值:

1、Success:表示通过检测。

2、Failure:表示未通过检测。

3、Unknown:表示检测没有正常进行。

Pod探针相关的属性:

探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为

    initialDelaySeconds:容器启动后要等待多少秒后探针开始工作,单位“秒”,默认是 0 秒,最小值是 0

    periodSeconds: 执行探测的时间间隔(单位是秒),默认为 10s,单位“秒”,最小值是1

    timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为1,单位“秒”。

successThreshold:连续探测几次成功,才认为探测成功,默认为 1,在 Liveness 探针中必须为1,最小值为1。

failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3,最小值为 1

 两种探针区别:

ReadinessProbe 和 livenessProbe 可以使用相同探测方式,只是对 Pod 的处置方式不同:

readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。

livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。

启动探测startupprobe

1、exec模式

[root@xianchaomaster1]# cat startup-exec.yaml

apiVersion: v1

kind: Pod

metadata:

  name: startupprobe

spec:

  containers:

  - name: startup

image: xianchao/tomcat-8.5-jre8:v1

imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

    startupProbe:

     exec:

       command:

       - "/bin/sh"

       - "-c"

       - "aa ps aux | grep tomcat"

     initialDelaySeconds: 20 #容器启动后多久开始探测

     periodSeconds: 20 #执行探测的时间间隔

     timeoutSeconds: 10 #探针执行检测请求后,等待响应的超时时间

     successThreshold: 1 #成功多少次才算成功

     failureThreshold: 3 #失败多少次才算失败

2、tcpsocket模式

[root@xianchaomaster1]# cat startup-tcpsocket.yaml

apiVersion: v1

kind: Pod

metadata:

  name: startupprobe

spec:

  containers:

  - name: startup

image: xianchao/tomcat-8.5-jre8:v1

imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

    startupProbe:

     tcpSocket:

       port: 8080

     initialDelaySeconds: 20 #容器启动后多久开始探测

     periodSeconds: 20 #执行探测的时间间隔

     timeoutSeconds: 10 #探针执行检测请求后,等待响应的超时时间

     successThreshold: 1 #成功多少次才算成功

     failureThreshold: 3 #失败多少次才算失败

3、httpget模式

[root@xianchaomaster1]# cat startup-httpget.yaml

apiVersion: v1

kind: Pod

metadata:

  name: startupprobe

spec:

  containers:

  - name: startup

image: xianchao/tomcat-8.5-jre8:v1

imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

    startupProbe:

      httpGet:

        path: /

        port: 8080

     initialDelaySeconds: 20 #容器启动后多久开始探测

     periodSeconds: 20 #执行探测的时间间隔

     timeoutSeconds: 10 #探针执行检测请求后,等待响应的超时时间

     successThreshold: 1 #成功多少次才算成功

     failureThreshold: 3 #失败多少次才算失败

存活性探测livenessProbe

官网地址:配置存活、就绪和启动探针 | Kubernetes这篇文章介绍如何给容器配置存活(Liveness)、就绪(Readiness)和启动(Startup)探针。kubelet 使用存活探针来确定什么时候要重启容器。 例如,存活探针可以探测到应用死锁(应用在运行,但是无法继续执行后面的步骤)情况。 重启这种状态下的容器有助于提高应用的可用性,即使其中存在缺陷。存活探针的常见模式是为就绪探针使用相同的低成本 HTTP 端点,但具有更高的 failureThreshold。 这样可以确保在硬性终止 Pod 之前,将观察到 Pod 在一段时间内处于非就绪状态。kubelet 使用就绪探针可以知道容器何时准备好接受请求流量,当一个 Pod 内的所有容器都就绪时,才能认为该 Pod 就绪。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 若 Pod 尚未就绪,会被从 Service 的负载均衡器中剔除。kubelet 使用启动探针来了解应用容器何时启动。 如果配置了这类探针,存活探针和就绪探针成功之前不会重启,确保这些探针不会影响应用的启动。 启动探针可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。注意: 存活探针是一种从应用故障中恢复的强劲方式,但应谨慎使用。 你必须仔细配置存活探针,确保它能真正标示出不可恢复的应用故障,例如死锁。说明: 错误的存活探针可能会导致级联故障。 这会导致在高负载下容器重启;例如由于应用无法扩展,导致客户端请求失败;以及由于某些 Pod 失败而导致剩余 Pod 的工作负载增加。了解就绪探针和存活探针之间的区别, 以及何时为应用配置使用它们非常重要。准备开始 你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:Killercoda 玩转 Kubernetes 定义存活命令 许多长时间运行的应用最终会进入损坏状态,除非重新启动,否则无法被恢复。 Kubernetes 提供了存活探针来发现并处理这种情况。在本练习中,你会创建一个 Pod,其中运行一个基于 registry.k8s.io/busybox 镜像的容器。 下面是这个 Pod 的配置文件。icon-default.png?t=N7T8https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

   

Pod探针使用示例:

1、LivenessProbe 探针使用示例
(1)、通过exec方式做健康探测
示例文件 liveness-exec.yaml

apiVersion: v1

kind: Pod

metadata:

  name: liveness-exec

  labels:

    app: liveness

spec:

  containers:

  - name: liveness

image: busybox:1.28

imagePullPolicy: IfNotPresent

    args:                       #创建测试探针探测的文件

    - /bin/sh

    - -c

    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600

    livenessProbe:

      initialDelaySeconds: 10   #延迟检测时间

      periodSeconds: 5          #检测时间间隔

      exec:

        command:

        - cat

        - /tmp/healthy

容器启动设置执行的命令:

    /bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

容器在初始化后,首先创建一个 /tmp/healthy 文件,然后执行睡眠命令,睡眠 30 秒,到时间后执行删除 /tmp/healthy 文件命令。而设置的存活探针检检测方式为执行 shell 命令,用 cat 命令输出 healthy 文件的内容,如果能成功执行这条命令,存活探针就认为探测成功,否则探测失败。在前 30 秒内,由于文件存在,所以存活探针探测时执行 cat /tmp/healthy 命令成功执行。30 秒后 healthy 文件被删除,所以执行命令失败,Kubernetes 会根据 Pod 设置的重启策略来判断,是否重启 Pod。

(2)、通过HTTP方式做健康探测

[root@xianchaonode1 ~]# ctr -n k8s.io images import springboot.tar.gz

[root@xianchaonode2 ~]# ctr -n k8s.io images import springboot.tar.gz
示例文件 liveness-http.yaml

apiVersion: v1

kind: Pod

metadata:

  name: liveness-http

  labels:

    test: liveness

spec:

  containers:

  - name: liveness

image: mydlqclub/springboot-helloworld:0.0.1

imagePullPolicy: IfNotPresent

    livenessProbe:

      initialDelaySeconds: 20   #延迟加载时间

      periodSeconds: 5          #重试时间间隔

      timeoutSeconds: 10        #超时时间设置

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

上面 Pod 中启动的容器是一个 SpringBoot 应用,其中引用了 Actuator 组件,提供了 /actuator/health 健康检查地址,存活探针可以使用 HTTPGet 方式向服务发起请求,请求 8081 端口的 /actuator/health 路径来进行存活判断:

任何大于或等于200且小于400的代码表示探测成功。

任何其他代码表示失败。

如果探测失败,则会杀死 Pod 进行重启操作。


httpGet探测方式有如下可选的控制字段:

scheme: 用于连接host的协议,默认为HTTP。

host:要连接的主机名,默认为Pod IP,可以在http request head中设置host头部。

port:容器上要访问端口号或名称。

path:http服务器上的访问URI。

httpHeaders:自定义HTTP请求headers,HTTP允许重复headers。

(3)、通过TCP方式做健康探测
示例文件 liveness-tcp.yaml

apiVersion: v1

kind: Pod

metadata:

  name: liveness-tcp

  labels:

    app: liveness

spec:

  containers:

  - name: liveness

image: docker.io/xianchao/nginx:v1

imagePullPolicy: IfNotPresent

    livenessProbe:

      initialDelaySeconds: 15

      periodSeconds: 20

      tcpSocket:

        port: 80

TCP 检查方式和 HTTP 检查方式非常相似,在容器启动 initialDelaySeconds 参数设定的时间后,kubelet 将发送第一个 livenessProbe 探针,尝试连接容器的 80 端口,如果连接失败则将杀死 Pod 重启容器。

就绪性探测readinessProbe

1、ReadinessProbe 探针使用示例

Pod 的ReadinessProbe 探针使用方式和 LivenessProbe 探针探测方法一样,也是支持三种,只是一个是用于探测应用的存活,一个是判断是否对外提供流量的条件。这里用一个 Springboot 项目,设置 ReadinessProbe 探测 SpringBoot 项目的 8081 端口下的 /actuator/health 接口,如果探测成功则代表内部程序以及启动,就开放对外提供接口访问,否则内部应用没有成功启动,暂不对外提供访问,直到就绪探针探测成功。

示例文件 readiness-exec.yaml

apiVersion: v1

kind: Service

metadata:

  name: springboot

  labels:

    app: springboot

spec:

  type: NodePort

  ports:

  - name: server

    port: 8080

    targetPort: 8080

    nodePort: 31180

  - name: management

    port: 8081

    targetPort: 8081

    nodePort: 31181

  selector:

    app: springboot

---

apiVersion: v1

kind: Pod

metadata:

  name: springboot

  labels:

    app: springboot

spec:

  containers:

  - name: springboot

image: mydlqclub/springboot-helloworld:0.0.1

imagePullPolicy: IfNotPresent

    ports:

    - name: server

      containerPort: 8080

    - name: management

      containerPort: 8081

    readinessProbe:

      initialDelaySeconds: 20  

      periodSeconds: 5         

      timeoutSeconds: 10  

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

 ReadinessProbe + LivenessProbe +startupProbe配合使用示例
一般程序中需要设置三种探针结合使用,并且也要结合实际情况,来配置初始化检查时间和检测间隔,下面列一个简单的 SpringBoot 项目的例子。

[root@xianchaomaster1]# cat start-read-live.yaml

apiVersion: v1

kind: Service

metadata:

  name: springboot-live

  labels:

    app: springboot

spec:

  type: NodePort

  ports:

  - name: server

    port: 8080

    targetPort: 8080

    nodePort: 31180

  - name: management

    port: 8081

    targetPort: 8081

    nodePort: 31181

  selector:

    app: springboot

---

apiVersion: v1

kind: Pod

metadata:

  name: springboot-live

  labels:

    app: springboot

spec:

  containers:

  - name: springboot

    image: mydlqclub/springboot-helloworld:0.0.1

    imagePullPolicy: IfNotPresent

    ports:

    - name: server

      containerPort: 8080

    - name: management

      containerPort: 8081

    readinessProbe:

      initialDelaySeconds: 20  

      periodSeconds: 5         

      timeoutSeconds: 10  

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

    livenessProbe:

      initialDelaySeconds: 20

      periodSeconds: 5

      timeoutSeconds: 10

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

    startupProbe:

      initialDelaySeconds: 20

      periodSeconds: 5

      timeoutSeconds: 10

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验18 边界网关协议BGP

一、实验目的 1.验证边界网关协议BGP的作用; 2.学习在思科路由器上该协议的使用方法。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; …

SpringBoot开发实用篇(三)

一:任务 1:SpringBoot整合Quartz 导入SpringBoot整合quartz的坐标定义具体要执行的任务,继承QuartzJobBean定义工作明细和触发器,并绑定对应关系 2:SpringBoot整合task 开启定时任务功能设置定时执行的任务&#x…

222|一周小精进:关于需求、产品和技术壁垒/Momentum, Consolidation, and Breakout(7.8

<希望能够坚持下来.JPG> 一、上接 《一胜九败&#xff1a;优衣库全球热卖的秘密》15000字浓缩精华评注&#xff01;所以&#xff0c;单独研究了一下“摇粒绒”。 1、从优衣库的摇粒绒开始 摇粒绒又称羊丽绒&#xff0c;是针织面料的一种&#xff0c;由大圆机编织而成&…

迅为RK3588开发板RKNPU2项目实战2SORT目标追踪

1.介绍和视频演示2.在模拟器实现图片的目标追踪3.连板推理和嵌入式部署4.视频目标追踪的实现(python)5.C实现目标追踪性能强--iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代ALoT高端应用芯片&#xff0c;采用8nm LP制程&#xff0c;搭载八核64位CPU&#xff0c…

如何更改WordPress网站的字体(适用于所有主题)

如何更改WordPress的字体的具体方法&#xff0c;需要取决于您使用的是新的区块主题还是比较旧的经典主题&#xff0c;这一点可能会让人感到困惑&#xff0c;本文中我们将详细介绍二者的区别以及如何分别在这两种主题中修改字体的的方法。 区别&#xff1a; 现代区块主题具有内…

相机光学(三十)——N5-N7-N8中性灰

GTI可提供N5/N7/N8中性灰涂料&#xff0c;用于不同的看色环境&#xff0c;N5/N7/N8代表深中浅不同的灰色程度&#xff0c;在成像、工业、印刷行业中&#xff0c;分别对周围观察环境有一定的要求&#xff0c;也出台了相应的标准文件&#xff0c;客户可以根据实际使用环境进行选择…

Transformer常见问题

1.位置编码有哪些&#xff1f; a. 正弦和余弦位置编码&#xff08;Sinusoidal Positional Encoding&#xff09; 原理&#xff1a;使用固定的正弦和余弦函数来生成位置编码。 b.学习位置编码&#xff08;Learnable Positional Encoding&#xff09; 原理&#xff1a;将位置编…

快速入门,springboot知识点汇总

学习 springboot 应该像学习一门编程语言一样&#xff0c;首先要熟练掌握常用的知识&#xff0c;而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓&#xff0c;然后再逐步补充细节。 前序: Spring Boot 通过简化配置和提供开箱即用的特性&#xff0c…

汇凯金业:天然橡胶的用途和作用

天然橡胶是一种由橡胶树(Hevea brasiliensis)的乳汁加工而成的弹性体&#xff0c;具有弹性好、强度高、耐磨性好、耐寒性好、电绝缘性好、易于加工等优点&#xff0c;是世界上重要的战略物资和不可缺少的工业原料。 天然橡胶的用途十分广泛&#xff0c;主要应用于以下领域&…

java Web实现用户登录功能

文章目录 一、纯JSP方式实现用户登录功能&#xff08;一&#xff09;实现思路1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 &#xff08;三&#xff09;测试结果 二、JSPServlet方式实现用户登录功能&#xff08;一…

04_Shell字符串变量

04_Shell字符串 一、字符串拼接&#xff08;推荐双引号&#xff09; 无引号拼接解析变量时不能有空格 单引号拼接无法解析变量 双引号方式可正常解析变量 推荐 二、字符串的长度获取 #!/bin/bash#使用 ${#变量名} 可获取字符串变量长度 var"test" echo "${#va…

[PM]流程与结构设计

流程图 流程就是为了达到特定目标, 进行的一系列有逻辑性的操作步骤, 由两个及已上的步骤, 完成一个完整的行为过程, 即可称为流程, 流程图就是对这个过程的图形化展示 分类 业务流程图 概念: 描述业务流程的一种图, 通过特定符号和连线表示具体某个业务的处理步骤和过程作…

【R语言+Gephi】利用R语言和Gephi实现共发生网络的可视化

【R语言Gephi】利用R语言和Gephi实现共发生网络的可视化 注&#xff1a;本文仅作为自己的学习记录以备以后复习查阅 一 概述 Gephi是一款开源免费的多平台网络分析软件&#xff0c;在Windows、Linux和Mac os上均可以运行&#xff0c;像他们官网所说的&#xff0c;他们致力于…

AWS 云安全性:检测 SSH 暴力攻击

由于开源、低成本、可靠性和灵活性等优势&#xff0c;云基础设施主要由基于linux的机器主导&#xff0c;然而&#xff0c;它们也不能幸免于黑客的攻击&#xff0c;从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议&#xff08;Sec…

二叉树超详细解析

二叉树 目录 二叉树一级目录二级目录三级目录 1.树的介绍1.1树的定义1.2树的基本术语1.3相关性质 2.二叉树介绍2.1定义2.2 性质 3.二叉树的种类3.1 满二叉树3.2完全二叉树3.3 二叉查找树特点&#xff1a;二叉查找树的节点包含的基本信息&#xff1a; 3.4 平衡二叉树 4.二叉树的…

极狐Gitlab安装部署

GitLab 是一个基于 Git 的开源 DevOps 平台&#xff0c;提供代码仓库管理、CI/CD&#xff08;持续集成和持续交付&#xff09;、项目管理、监控和安全等功能。它集成了多种工具&#xff0c;帮助开发团队在一个平台上进行代码开发、测试、部署和运维。以下是 GitLab 的主要功能和…

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…

vue中,图片在div中按照图片原来大小等比例显示

图片在div中按照图片原来大小等比例显示&#xff0c;可以保证web上显示的图片和实际图片形状一样&#xff0c;保留原始图片效果 实现代码如下&#xff1a; <div style"padding: 0; width:400px;height:400px;position: absolute;border: 1px solid #eff2f6;">…

PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?

文章目录 一、增量更新与全量更新的概念增量更新全量更新 二、考虑的因素1. 数据量2. 数据更改的频率和规模3. 数据一致性要求4. 系统性能和资源利用5. 业务逻辑和流程 三、解决方案&#xff08;一&#xff09;混合使用增量更新和全量更新&#xff08;二&#xff09;使用临时表…

制作电子名片的小程序系统源码 快速生成电子名片

在当今数字化时代&#xff0c;传统的纸质名片已逐渐被智能电子名片所取代。电子名片小程序作为一种基于微信生态的创新名片交换方式&#xff0c;凭借其便捷性、高效性和环保性&#xff0c;成为了众多商务人士的首选。小编分享一个制作电子名片的小程序系统源码&#xff0c;无忧…