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

【K8S系列】深入解析无状态服务

 

目录

序言

1. 无服务介绍

1.1 优点

1.2 使用场景

1.3 资源类型

1.4 总结

2 使用介绍

2.1 Deployment

使用场景:

2.2 ReplicaSet

使用场景

2.3 pod

Pod 资源定义示例

2.4 service

创建一个Deployment:

创建一个Service:

总结:

2.5 ingress

安装Ingress控制器

创建Ingress规则

 应用Ingress规则

访问服务

总结:

2.6 configMap

3 总结

使用场景总结

 ReplicaSet 和 Deployment区别总结:


序言

所有幸运和巧合的事,要么是上天注定,要么是一个人偷偷的在努力。

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下无状态服务。

1. 无服务介绍

无状态服务是一种不需要保存任何数据状态的服务,也不需要维护任何会话信息的服务

这些服务通常被设计为可扩展和高可用性的,因为它们可以在任何时间点部署或删除,而不会对应用程序的可用性产生影响。

1.1 优点

无状态服务的优点包括:

  1. 可扩展性:由于无状态服务不需要维护状态信息,因此它们可以轻松地水平扩展,以应对高流量和负载情况。

  2. 高可用性:无状态服务可以通过多个副本来提高可用性,并且它们可以在任何时间点部署或删除,而不会影响应用程序的可用性。

  3. 简单性:由于无状态服务不需要维护状态信息,因此它们通常比有状态服务更简单、更容易维护。

1.2 使用场景

以下是一些无状态服务的使用场景详细介绍:

  1. 网络应用程序:无状态服务非常适合网络应用程序,例如Web服务器、API服务器、负载均衡器等。这些应用程序可以通过多个副本来提高可用性,并且它们可以通过水平扩展来处理更多的请求。

  2. 批处理作业:无状态服务也可以用于批处理作业,例如数据处理、日志分析、图像处理等。这些作业可以在任何时间点启动或停止,并且可以在多个节点上并行运行以提高效率。

  3. 队列服务:无状态服务还可以用于队列服务,例如消息队列、任务队列等。这些服务可以将消息或任务发送到队列中,并由多个工作者节点消费它们,以提高处理效率。

1.3 资源类型

在Kubernetes中,无状态服务资源类型主要包括以下几种:

  1. DeploymentDeployment是一种用于创建可扩展的无状态服务的资源类型。它允许定义副本数,并使用Rolling Update策略来升级服务,从而保持服务的可用性。

  2. ReplicaSetReplicaSet是Deployment的底层实现,用于确保在任何时间点都有指定数量的Pod副本在运行。当Pod崩溃或者被删除时,ReplicaSet会自动创建新的Pod副本,以确保所需的Pod副本数不变。

  3. Pod:Pod是Kubernetes中最小的可部署单元,用于运行一个或多个容器。通常,每个Pod只运行一个容器,但在某些情况下,可能需要在同一个Pod中运行多个容器。

  4. Service:Service是一种用于将多个Pod打包在一起并提供访问它们的统一入口的资源类型。Service可以使用Cluster IP、NodePort或者LoadBalancer等不同类型的服务来暴露Pod。

  5. Ingress :Ingress 是一种 k8s 资源类型,用于将集群内部的 HTTP 和 HTTPS 流量路由到 Service 上。Ingress 可以根据域名或 URL 路径将流量转发到不同的 Service 上,并支持 SSL/TLS 终止和负载均衡等功能。

  6. ConfigMap:ConfigMap 是一种 k8s 资源类型,用于将配置信息注入到无状态服务中。ConfigMap 可以存储键值对和配置文件等信息,并将它们作为环境变量、命令行参数或配置文件挂载到 Pod 中。

Ingress 和 Service、ConfigMap 一样,都是 Kubernetes 中的资源对象,它们都是抽象的概念,不包含任何具体的状态信息。Ingress 只是定义了一组规则,而 Service 则定义了如何暴露一个或多个 Pod,以便可以从集群内部或外部访问它们。因此,Ingress 和 Service 都可以看作是无状态的 Kubernetes 资源对象。

总之,使用Kubernetes中的无状态服务资源类型,可以更轻松地管理和扩展无状态服务,并提高其可用性和可靠性。

1.4 总结

无状态服务并不适用于所有的应用程序。一些应用程序可能需要维护会话信息、状态信息或持久化数据,这就需要使用有状态服务

因此,在设计应用程序时,需要考虑应用程序的特定要求,以确定应该使用无状态服务还是有状态服务。 

2 使用介绍

2.1 Deployment

Deployment资源控制器将用户定义的Deployment对象转换为实际运行的Pods,并确保Pods的状态与用户定义的状态一致。如果某个Pod因为某些原因被删除了,Deployment控制器会启动一个新的Pod,以确保在任何时候都有指定数量的Pods在运行。

Deployment 是 Kubernetes 中一种常用的资源类型,用于定义一组可扩展的 Pod,并确保它们按照所需的副本数在集群中运行。

Deployment 可以:

  • 确保应用程序在集群中始终以所需的副本数运行。
  • 自动升级应用程序,以便部署新的版本。
  • 自动回滚到以前的版本,以便应对故障情况。
  • 通过滚动升级、重启或暂停来更新部署。

下面是一个使用 Deployment 创建一个可扩展的 nginx 服务的示例:

apiVersion: apps/v1
kind: Deployment #资源类型
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

该示例使用了 Deployment 资源来创建一个名为 nginx-deployment 的部署。该部署将创建 3 个副本,并使用 label 选择器来识别与该部署关联的 Pod。

该示例的 Pod 使用了 nginx:latest 镜像,并且暴露了容器端口 80。

要部署该示例,将 YAML 文件保存为 nginx-deployment.yaml 并运行以下命令:

kubectl apply -f nginx-deployment.yaml

该命令将在集群中创建一个名为 nginx-deployment 的 Deployment,并自动创建与其相关的 3 个 Pod。

要更新部署的镜像,可以通过编辑 YAML 文件并运行以下命令来轻松更新:

kubectl apply -f nginx-deployment.yaml

Kubernetes 将自动将更新部署,并逐步将所有 Pod 升级到新版本。

总结一下,Deployment 资源是 Kubernetes 中一个非常有用的资源类型,它使得容器化应用程序的部署和管理变得更加容易和可靠。

使用场景:

  1. 应用程序部署:使用 Kubernetes Deployment 可以轻松地部署您的应用程序,并确保它们始终以所需的方式运行。您可以定义应用程序的副本数、容器映像、存储和网络设置等。

  2. 应用程序升级和回滚:使用 Kubernetes Deployment 可以轻松地升级和回滚您的应用程序。您可以定义应用程序的新版本,并控制升级的速率和流程。如果需要回滚,则可以通过简单的命令将应用程序回退到旧版本。

  3. 水平扩展:使用 Kubernetes Deployment 可以根据负载自动扩展应用程序。您可以定义水平扩展规则,并让 Kubernetes 自动扩展您的应用程序。

  4. 服务发现和负载均衡:使用 Kubernetes Deployment 可以轻松地为您的应用程序定义服务发现和负载均衡规则。Kubernetes 可以自动将流量路由到正确的副本集,并确保它们始终处于健康状态。

  5. 多环境部署:使用 Kubernetes Deployment 可以轻松地在不同的环境(如开发、测试和生产)之间部署应用程序。您可以使用不同的配置文件和策略来定义不同的部署规则,从而确保您的应用程序在不同的环境中始终以所需的方式运行。

2.2 ReplicaSet

Kubernetes的ReplicaSet(副本集)是一种控制器(Controller),用于确保Pod的副本数始终保持在指定的数量。如果发现副本数低于预期,则ReplicaSet将自动创建新的Pod。相反,如果副本数多于预期,则会删除多余的Pod。

以下是一个ReplicaSet的示例定义:

文件名:example-rs.yaml

apiVersion: apps/v1
kind: ReplicaSet #资源类型
metadata:name: example-rs
spec:replicas: 3selector:matchLabels:app: exampletemplate:metadata:labels:app: examplespec:containers:- name: exampleimage: nginx:latest

逐行解释这个示例:

  • apiVersion: apps/v1:表示使用API版本v1的apps组。
  • kind: ReplicaSet:表示我们定义的是ReplicaSet对象。
  • metadata:包含ReplicaSet的元数据,如名称、标签和注释。
  • name: example-rs:指定ReplicaSet的名称。
  • spec:定义了ReplicaSet的规范,包括副本数、选择器和Pod模板。
  • replicas: 3:指定我们要运行的Pod副本数为3个。
  • selector:指定要选择的Pod标签。
  • matchLabels:指定匹配的标签,与模板中的标签相同。
  • template:定义了要创建的Pod模板。
  • metadata:定义了Pod元数据,如标签。
  • labels:指定Pod标签,与选择器中的标签相同。
  • spec:指定了Pod的规范,如容器和容器映像。
  • containers:定义了Pod中的容器。
  • name: example:定义了容器的名称。
  • image: nginx:latest:定义了容器映像。

创建这个ReplicaSet:

kubectl apply -f example-rs.yaml

这将创建一个名为example-rs的ReplicaSet,并确保有3个标记为app=example的Pod在运行。如果Pod数目低于3个,则ReplicaSet将自动创建新的Pod。

如果要更新ReplicaSet,可以更新Pod模板的定义,并使用以下命令执行滚动更新:

kubectl apply -f example-rs.yaml

这将创建新的Pod,以替换旧的Pod,直到达到指定的副本数。这个过程被称为滚动更新。

要删除ReplicaSet及其所有Pod,可以使用以下命令:

kubectl delete rs example-rs

这个命令,删除名为example-rs的ReplicaSet及其所有Pod。

使用场景

ReplicaSet的主要使用场景包括:

  1. 扩展应用程序:通过创建多个Pod副本并在它们之间负载均衡,可以轻松地扩展应用程序的能力。

  2. 确保高可用性:当一个Pod副本出现故障时,ReplicaSet会自动创建一个新的Pod副本来替代它,从而确保应用程序的高可用性。

  3. 管理滚动升级:通过在ReplicaSet中定义新版本的Pod模板,可以实现滚动升级应用程序,从而最小化应用程序的停机时间。

  4. 确保资源利用率:通过控制Pod副本的数量,可以确保在负载轻的情况下不会浪费资源,同时在负载高峰期间有足够的资源可供使用。

2.3 pod

在 K8s 中,有两种主要类型的 Pod 资源:

  1. Pod 资源定义:这是用于定义 Pod 规格的 YAML 或 JSON 文件。它描述了 Pod 的容器及其相关配置、网络、存储等信息。

  2. Pod 运行时实例:这是由 Pod 资源定义创建的实际运行时实例。在运行时,K8s 负责管理 Pod 实例的生命周期、容器的运行状态以及网络和存储资源的分配。

Pod 资源定义示例

下面是一个 Pod 资源定义的示例:

apiVersion: v1
kind: Pod #资源类型
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxports:- containerPort: 80

2.4 service

Kubernetes (K8s) Service是一种用于提供网络访问的抽象机制,用于将一组Pods公开为单个网络服务。服务提供了一个虚拟IP地址和一个DNS名称,允许客户端通过这些标识符访问Kubernetes集群中的应用程序。服务还允许负载平衡和自动容错,以确保即使在一个或多个Pod失败时,服务仍然可用。

在Kubernetes中,Service对象是一个Kubernetes API对象,可以使用Kubernetes API或kubectl命令行工具创建、管理和删除它们。

创建一个Service对象时,需要指定一个标签选择器,用于确定要将哪些Pods作为后端。Service还可以使用不同的负载平衡算法(如轮询或IP哈希)将请求路由到后端Pods。

下面是一个简单的Kubernetes Service示例:

创建一个Deployment:

apiVersion: apps/v1
kind: Deployment #资源类型
metadata:name: nginx-deployment
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80

创建一个Service:

apiVersion: v1
kind: Service #资源类型
metadata:name: nginx-service
spec:selector:app: nginxtype: ClusterIPports:- name: httpport: 80targetPort: 80

这个示例创建了一个名为nginx-deployment的Deployment,它运行3个Nginx Pod。

接下来,它创建了一个名为nginx-service的Service,使用selector指定将后端Pods选择器设置为app: nginx

该Service使用默认的ClusterIP类型,并将所有传入流量路由到80端口。

在这个示例中,targetPort被设置为80,因为后端Pods也在80端口上监听。

总结:

此时,可以通过Kubernetes集群内部的虚拟IP地址和DNS名称访问Nginx服务。

例如,在Kubernetes集群中的Pod中,可以使用nginx-service名称来访问该服务。

注意:上述示例仅供参考,具体实现可能因Kubernetes版本和配置而异。请参阅Kubernetes文档以获取更多详细信息和最佳实践建议。 

2.5 ingress

Kubernetes Ingress是一个API对象,它允许管理在集群内的HTTP和HTTPS路由。Ingress充当负载均衡器,将流量路由到集群内的服务。它还可以提供TLS终止和基于名称的虚拟主机。

在Kubernetes中,Ingress控制器是一个运行Ingress规则的实体。许多不同的Ingress控制器可用,如Nginx,Traefik,Istio等,它们具有不同的功能和优缺点。

以下是使用Kubernetes Ingress的示例:

安装Ingress控制器

不同的Ingress控制器安装方式可能不同,这里以Nginx为例:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml

创建Ingress规则

创建一个Ingress对象以定义路由规则。以下示例将指定所有来自/example路径的HTTP请求将被路由到名为example-service的服务上:

apiVersion: networking.k8s.io/v1
kind: Ingress #资源类型
metadata:name: example-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- http:paths:- path: /examplepathType: Prefixbackend:service:name: example-serviceport:number: 80

 应用Ingress规则

使用以下命令将Ingress规则应用于Kubernetes集群:

kubectl apply -f example-ingress.yaml

访问服务

可以使用Ingress规则定义的路由访问服务。

http://ip地址/example

总结:

使用Kubernetes Ingress可以轻松地为集群内的服务设置路由规则,并将流量分发到相应的服务上。

同时,Ingress控制器的选择对性能和功能等方面也有一定影响,需要根据具体情况选择合适的控制器。 

2.6 configMap

Kubernetes (k8s) 的 ConfigMap 是一种用于存储非敏感配置数据的 Kubernetes 对象。ConfigMap 可以包含键值对、文件或者纯文本数据,并可以在容器中通过环境变量、命令行参数或者挂载路径的方式使用。

以下是一个 k8s ConfigMap 的示例 YAML 文件:

apiVersion: v1
kind: ConfigMap #资源类型
metadata:name: my-configmap
data:CONFIG_VAR1: value1CONFIG_VAR2: value2CONFIG_FILE: |-This is the content of a file in the ConfigMap.It can be accessed in a container as a volume.

上面的示例定义了一个名为 my-configmap 的 ConfigMap 对象,其中包含三个键值对:CONFIG_VAR1CONFIG_VAR2CONFIG_FILECONFIG_FILE 中包含了一些纯文本数据,可以在容器中以挂载的方式访问。

下面是一个使用 ConfigMap 的示例 YAML 文件:

apiVersion: v1
kind: Pod #资源类型为pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxenv:- name: VAR1valueFrom:configMapKeyRef:name: my-configmapkey: CONFIG_VAR1- name: VAR2valueFrom:configMapKeyRef:name: my-configmapkey: CONFIG_VAR2volumeMounts:- name: config-volumemountPath: /etc/configreadOnly: truevolumes:- name: config-volumeconfigMap:name: my-configmap

上面的示例定义了一个名为 my-pod 的 Pod 对象,其中包含一个名为 my-container 的容器。

该容器使用了 my-configmap 中的 CONFIG_VAR1CONFIG_VAR2 值,并将 my-configmap 中的 CONFIG_FILE 文件挂载到容器的 /etc/config 目录下。

总的来说,ConfigMap 是一种非常有用的 Kubernetes 对象,可以用于存储配置数据,并将其传递到容器中,以便在运行时使用

3 总结

使用场景总结

以下是一些适合使用无状态服务的业务场景:

  1. Web 应用程序:Web 应用程序通常是无状态的,它们的行为仅取决于用户的请求和输入。无状态服务可以帮助您轻松地扩展 Web 应用程序并提高其可靠性。

  2. 批处理作业:批处理作业通常是独立的任务,它们的执行不需要存储状态信息。无状态服务可以帮助您快速地运行大规模的批处理作业。

  3. 计算密集型应用程序:计算密集型应用程序通常需要大量的计算资源来处理数据。无状态服务可以帮助您快速地扩展应用程序以处理更多的计算任务。

  4. 微服务架构:在微服务架构中,服务通常被设计为无状态的。这是因为无状态服务可以更容易地扩展,并且更容易实现高可用性和负载均衡。

  5. 媒体流服务:媒体流服务通常是无状态的,因为它们不需要存储状态信息。无状态服务可以帮助您快速地扩展媒体流服务以处理更多的请求。

 ReplicaSet 和 Deployment区别总结:

Kubernetes (k8s) ReplicaSet 和 Deployment 是两个常用的 Kubernetes 资源对象,它们都用于管理 Pod 的创建、扩展、缩减和更新。

Deployment 和 ReplicaSet 的使用场景:

  • Deployment:Deployment 资源对象用于管理应用的版本更新。当您需要发布新版本的应用程序时,可以使用 Deployment 对象来创建一个新的 ReplicaSet,然后 Kubernetes 会逐步将 Pod 的数量从旧版本的 ReplicaSet 逐渐缩减到新版本的 ReplicaSet。如果发生故障,Deployment 会自动回滚至上一个可用版本。
  • ReplicaSet:ReplicaSet 资源对象用于管理 Pod 的数量。如果您需要扩展或缩减 Pod 的数量,可以使用 ReplicaSet 对象来定义所需的副本数,并让 Kubernetes 自动创建或删除 Pod,以达到您定义的副本数。

Deployment 和 ReplicaSet 的区别:

  • Deployment 是 ReplicaSet 的上层控制器,它在 ReplicaSet 的基础上增加了更多的更新、回滚和版本管理的功能,因此 Deployment 更适合用于应用程序版本的管理。
  • ReplicaSet 负责确保 Pod 的数量达到指定的副本数,但是它不会关心 Pod 的版本号。因此 ReplicaSet 更适合用于控制相同版本的 Pod 的数量,以确保可用性和容错性。

相关文章:

【K8S系列】深入解析无状态服务

目录 序言 1. 无服务介绍 1.1 优点 1.2 使用场景 1.3 资源类型 1.4 总结 2 使用介绍 2.1 Deployment 使用场景: 2.2 ReplicaSet 使用场景 2.3 pod Pod 资源定义示例 2.4 service 创建一个Deployment: 创建一个Service: 总结…...

Node基础--命令窗口

1.Windows命令行窗口(叫做:小黑屏、cmd窗口、终端、shell) (1).如何打开命令行窗口 开始菜单 -- 运行 --- cmd --- enter win R -- cmd --- enter (2).cmd窗口常用指令 dir 列出当前目录下的所有文件 cd 目录名 进入到指定的目录 md 目录名 …...

一些有趣的项目

一个支持交互的展示卷积过程的可视化工具 https://github.com/pwwang/cnn-convoluter 一款简单易用基于 Python scikit 的推荐系统https://github.com/NicolasHug/Surprise 一个封装了 7 种启发式算法的 Python 代码库。分别是:差分进化算法、遗传算法、粒子群算法…...

教你精通JavaSE语法之第六章、数组的使用

一、数组的定义与使用 😁1.1数组的概念📌数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间,可以同来存储同种数据类型的多个值。但是数组容器在存储数据的时候,需要结合隐式转换考虑。比如&#xff1…...

基于51单片机AT89C51的小型音乐喷泉控制系统设计

wx供重浩:创享日记 对话框发送:单片机小喷泉 获取完整无水印论文报告(内含电路原理图和程序) 根据目前音乐喷泉的发展现状,介绍了一个以AT89C51单片机为核心的小型音乐喷泉控制系统。给出了一个简洁的单片机控制电路&a…...

【Nacos】Nacos原理详解(注册中心,配置中心)

文章目录一、背景二、CAP理论三、什么是NacosNacos 服务注册需要具备的能力:Nacos的实现原理:四、Nacos原理Nacos 服务注册与订阅的完整流程服务领域模型五、注册中心原理六、配置中心原理七、Nacos 的关键特性包括:八、 面试分析一、背景 服务注册中心…...

蓝桥杯刷题冲刺 | 倒计时11天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.质因子2.蓝桥王国1.质因子 题目 链接: 1545. 质因子 - AcWing题库 给定一个整数 N…...

【新】(2023Q2模拟题JAVA)华为OD机试 - 时间格式化

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:时间格式化 题目 运维工程师…...

MySQL函数

函数 MySQL函数与其存储过程类似,是一系列完成某种功能的SQL语句。函数一旦定义后,与过程一样是存储在MySQL的服务器上。调用函数就是一次性执行这些语句。所以函数可以降低语句重复。 MySQL本身提供了内置函数,这些函数的存在给我们日常的开…...

【Linux系统】开发工具(下) {调试器gdb,自动化构建工具make/Makefile,多文件编译,代码管理平台git}

【Linux系统】开发工具(上) {软件包管理器yum,更新yum源,文本编辑器vim,vim的三种基本模式,vim指令集,代码编译器gcc/g} 四、Linux调试器:gdb 4.1 debug模式 程序的编译模式有两种,debug模式和…...

线性代数——行列式

文章目录版权声明排列行列式行列式的由来行列式的概念行列式的性质重要公式克拉默法则补充知识版权声明 本文大部分内容皆来自李永乐老师考研教材和视频课。 排列 由1,2,…,n1,2,\ldots,n1,2,…,n组成的有序数组称为一个nnn阶排列,通常使用j1j2…jnj_1j_2\ldots …...

Spring注解-Spring-boot-SpingAOP

Spring各个模块 Test 对应spring-test.jar. Spring提供的测试工具, 可以整合JUnit测试, 简化测试环节. Core Container ​ Spring的核心组件, 包含了Spring框架最基本的支撑. ​ Beans, 对应spring-beans.jar. Spring进行对象管理时依赖的jar包. ​ Core, 对应spring-core.jar,…...

使用Shell传参解决DataPhin中PySpark不支持中文的问题

使用Shell传参解决DataPhin中PySpark不支持中文的问题 背景 笔者开发PySpark任务时【别问为神马不用Java和Scala打Jar包的方式,PySpark不需要打包所以开发效率极高,早点搞完早点下班】,遇到一个令所有SQL Boy都很头疼的问题,那就…...

【CDH】cloudera manger 如何开启Debug 日志调试模式

前言 在安装 Cloudera Manger 时,遇到报错,需要开启Debug 日志级别来排查下问题原因。这里记录下 CM 如何开启 Debug 级别。 方法一:为整个服务启动DEBUG 如果 CM 无法启动,则可以为整个服务器启用 DEBUG 或 TRACE。 警告&…...

SQL Server 用户授权与回收

创建xxbbbb账号,账号可以在Company_report20221019.dbo.qfacccmprf表中进行select、 insert,update,delete --创建登录账号 create login xxbbbb with password12345#---创建用户 use Company_report20221019 create user xxbbbb for login xxbbbb---将qfacccmprf表…...

电脑出现乱码的原因以及解决方法

在日常使用电脑的过程中,经常会遇到电脑出现乱码,那么为什么会出现乱码呢?出现乱码又该怎么解决呢?下面我们一起来了解一下。 出现乱码的原因 系统乱码:主要是Windows中显示乱码,比如菜单、桌面、启动界面…...

网络工程师笔记

第一天: 编码就是转化为数字信号;调制就是转化为模拟信号; 调制: 1、基带调制(不改变频率,只改变波形) 2、带通调制(迁移到较高的频段进行传输) (1&…...

linux用户添加用户组与目录切换用户组的操作记录

linux用户添加到多个组 usermod -G groupname username (这种会把用户从其他组中去掉,只属于该组) 如:usermod -G git git (git只属于git组) usermod -a -G groupname username (把用户添加到这个组,之前所属组不影响) 如:usermod…...

在CentOS 7上使用二进制文件安装单节点Kubernetes的详细步骤:

确保您的系统已经安装了Docker和etcd。如果没有,请按照以下命令安装它们: yum install docker etcd 启动Docker服务并将其设置为开机自启: systemctl start docker systemctl enable docker 下载所需的Kubernetes二进制文件。您可以从以下网…...

iCollections for mac 8.0.6.80608 保持Mac桌面的整洁

应用介绍 iCollections允许您在桌面上创建区域,以便您可以排序和排列图标。这可以帮助您将相关项目保持在一起,以便文件(图片,文档,屏幕截图,应用程序等)井井有条且易于查找。 小麦测试可以按照…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

Ubuntu Cursor升级成v1.0

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

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...