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

【k8s核心概念与专业术语】

k8s架构

在这里插入图片描述

1、服务的分类

服务分类按如下图根据数据服务支撑,分为无状态和有状态

无状态引用如下所示,如果一个nginx服务,删除后重新部署有可以访问,这个属于无状态,不涉及到数据存储。

在这里插入图片描述

有状态服务,如redis,如果用户访问应用生成的token存储在redis中,如果把这个redis删除,重新部署redis后,这个用户还能正常访问么?(肯定是不是可以正常访问,用户的token都会没。)

在这里插入图片描述

2、资源和对象

  • Kubernetes中的所有内容部被抽象为资源",如Pod、Service、Node等都是资源。对象"就是"资源的实例。是持久化的实体如某个具体的Pod、某个具体的Node。Kubernetes使用这些实体去表示整个集群和的状态。
  • 对象的创建、删除、修改都是通过"Kubernetes APl",也就是"Api Server"组件提供的API接口,这些是RESTful风格的Api,与k8s的"万物皆对象理念相符。命令行工具“kubectl,实际上也是调用kubernetes api。
  • K8s中的资源类别有很多种,kubectl可以通过配置文件来创建这些“对象”,配置文件更像是描述对象属性“的文件,配置文件格式可以是“JSON或YAML",常用"YAML"。

2.1 资源的分类

2.1.1 元数据型

  • 对于资源的元数据描述是每一个资源都可以使用元空间的数据
1 自动扩缩容 Horizontal Pod Autoscaler (HPA)

场景eg:假设某个抢购场景,早上10点抢购,假设正常是有2个服务使用, 10点抢购时高并发场景,可以自定义在10点前自动扩容成10个服务使用,服务期流量降低后,自动缩减成2个服务正常使用。

HPA是Pod自动扩容:可以根据CPU使用率或白定义指标(metrics)自动对Pod进行扩缩容。

  • 控制管理器每隔30s(可以通过-horizontal–pod-autoscaler-sync-period修改)查询metrics的资源使用情况
  • 支持三种metrics类型
    • 预定义metrics(比如Pod的cpU)以利用率的方式计算
    • 自定义的Pod metrics,以原始值(raw value)的方式计算
    • 自定义的object metrics
  • 支特两种metrics查间方式:Heapster和白定义的REST API
  • 支持多metrics
2 Pod模板定义: PodTemplate

场景eg:原本有5个应用,现在要把5个应用扩容成10个应用,创建的新的应用应该是要和之前的5个应用一致,会基于这5个应用有一个配置文件,这个文件中会有(spec.template.描述)模版,那么新的应用会根据这个模版来创建应用。

  • Pod Template是关于Pod的转义,但是被包含在其他的Kubernetes对象中(例攸如Deployment、.StatefulSet、DaemonSet等控制器)。控制器通过Pod Template信息来创建Pod。
3 资源限制:LimitRange

场景eg:假设一个java应用,初始内存是2G,最大内存5G,假设整个应用有16G,超过5G的时候就进行限制,这个就是一个内存限制的策略。

可以对集群内Request(最少用多少资源)和Limits(最大用多少资源)的配置做一个全局的统一的限制,相当于批量设置了某一个范围内(某个命名空间)的Pod的资源使用限制。

2.1.2 集群级

  • 集群级别的资源作用于集群之上,集群下的所有资源都可以共享使用
1 命名空间:Namespace
  • 命名空间的资源本身就属于K8s的资源,只不过多了一个逻辑意义上独立的概念。
2 Node资源
  • 不像其他的资源(如Pod和Namespace),Node本质上不是Kubernetes来创建的,Kubemnetes只是管理Node上的资源,虽然可以通过Manifest创建一个Node对象,但Kubernetes也只是去检查是否真的是有这么一个Node,如果检查失败,也不会往上调度Pod.
3 ClusterRole
  • 这个角色是属于集群的角色,他是用在集群之上,用于对集群的权限管理。
4 ClusterRoleBinding
  • 上面的ClusterRole只是应用于一个权限组,但是还没真正用到那个用户身上。用来把权限和那个资源进行绑定。只能绑定到集群级别的资源对象上,不能给namespace的资源对象上绑定。

2.1.3 命名空间级资源

  • 作用在命名空间之上,通常只能作用于命名空间范围内使用,命名空间A不可以访问命名空间B的资源,可以理解为逻辑意义上的集群,一个k8s集群可以有多个命名空间。
1 工作负载
1.1 什么是POD?
  • Pod(容器组)是Kubemetes中最小的可部署单元,一个Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个维一的网烙IP地址、以及一些确定容器该如何运行的选项。Pod容器组代表了Kubernetes中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。
  • Docker是Kubernetes Pod中使用最广泛的容器引擎;Kubernetes Pod同时也支持其他类型的容器引擎。
  • Kubernetes集群中Pod存在如下两种使用途径:
    • 一个Pod中只运行一个容器.,"one-container-per-pod"是Kubemetes中最常见的使用式。此时,您可以认为Pod容器组是该容器的wrapper,Kubernetes通过Pod管理容器。而不是直接管理容器。
    • 一个Pod中运行多个需要互相协作的容器。您可以将多个紧耦合、共享资源目始终在一起运行的容器编排在同一个Pod中。
      在这里插入图片描述
1.2 Pod 副本(replicas)
  • 先引入副本的概念一一个Pod可以被复制成多份,每一份可被称之为一个“副本",这些副本除了一些描述性的信息(Pod的名字、uuid等)不一样以外,其它信息都是一样的。如Pod内部的容器、容器数量、容器里面运行的应用等的这些信总都是一样的。这些副本提供问样的功能。
  • Pod的"控制器"逼常包含一个名为"replicas’的属性,“replicas"属性则指定了特定Pod的副本的数量,当当前集群中该Pod的数量与该属性指定的值不一致时。k85会采取一些策路去使得当前状态满足配置的要求。
1.3 Pod 的控制器的类型
1.3.1 适用于无状态的服务

在这里插入图片描述

(1)【了解】ReplicationController(RC)帮助我们动态更新pod的副本数

Replication Controller简称RC,RC是Kubernetes系统中的接心概念之一,简单来说。RC可以保证在任意时间运行Pod的副本款量,能够保证Pod总是可用的。如果实际Pod数量比指定的多那就结束掉多余的。如果实示数量比指定的数量少,则新启动一些Pod,当Pod失败、被删除或者挂掉后,RC都会去自动创建新的Pod来保证利本数量,所以即使只有一个Pod,我们也应该用RC来管理我们的Pod,可以说,通过ReplicationController控制器,Kubernetes实现了Pod的高可用性。

在这里插入图片描述

(2) 【了解】ReplicaSet(RS)帮助我们动态更新pod的副本数,可以通过selector来选择对那些pod生效

RC(ReplicationController)主要的作用就是用来确保容器应用的副本数始终保特在用户定义的副本数,。即如果有容器异常退出,会自动创建新的Pod来替代:而如果异常多出来的容器也会自动回收(已经成为过去时),在v1.11版本废弃。
-
Kubernetes官方建议使用RS(ReplicaSet)替代RC(ReplicationController)进行部署,RS跟RC没有本质的不同,只是名字不一样,并且RS支持集合式的selector。

在这里插入图片描述

(3) 【重点】Deployment:增对RS的更高层次封装,提供了更丰富的部署相关的功能

自动创建ReplicaSet,自动创建Pod。
可以滚动升级和回滚,eg:代码更新后,回自动升级创建新的pod,新的pod可以用,在把旧的pod删除。
可以平滑扩容和缩容
暂停和恢复Deployment

1.3.2 适用有状态的服务 StatefulSet

在这里插入图片描述

StatefulSet:专门对有状态服务进行部署的一个控制器

  • StatefulSet中每个Pod的DNS格式为 statefulSetName{O…N-1).serviceName.namespace.svc.cluster.local

  • serviceName为Headless Service的名字

  • 0…N-1为Pod所在的序号,从0开始到N-1

  • "statefulSetName为StatefulSet的名字

  • namespace为服务所在的namespace,Headless Service和StatefulSet必须在相同的namespace

  • .cluster.local为Cluster Domain

场景:假设我们的集群是一个redis集群,redis集群(主从结构)官方推荐的方案是大于等于3个数量,并且一定是一个单数(涉及到redis的选举机制),如果更新redis这个pod的时候,会出现以下问题:
1、容器的网络还在不在?(原来的网络会没有,导致我们的后端服务去找这个redis的时候就不知道一什么ip地址去找了,我们不可以把这个redis的服务ip写到后端服务上,网络变更,那后端服务找不到这个redis了)
2、数据问题如何解决?(Pod删除掉后,数据也同样会被删除,就算新建的pod可以访问,但是数据不共享。)
3、顺序性问题(master节点一般都是可读可写,slave节点是可读的,那我们在创建pod的时候就会涉及到一个顺序性问题)
如上3个问题就需要用到StatefulSet,可以保证网络、数据、顺序性问题都可以解决。通过Headless service和volumeClaimTemplate实现。

在这里插入图片描述

1.3.3 守护进程 DaemonSet

DaemonSet保证在每个Node上都运行一个容器到本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:

  • 日志收集,比如fluentd,logstash等
  • 系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond 等
  • 系统程序,比如kube-proxy,kube-dns,glusterd,ceph等

场景:每个node可以添加一个type的标签,如果ds的pod匹配到这个标签,就会在这个node上创建这样一个pod

在这里插入图片描述

1.3.4 任务/定时任务 Job/CronJob
  • Job:一次性任务,运行完成后直接销毁
  • CronJob:在Job的基础上增加了定时的功能
2 服务发现

服务发现分为service和ingress两个服务。

原先的访问模式
1、用户访问域名,可以通过F5、LVS、阿里云slb负载均衡访问到后端服务,后端服务通过网关可以发现每个微服务,这种流量称为”南北流量“。
2、后端的微服务直线的相互访问称之为”东西流量“。

在这里插入图片描述

使用k8s集群后,用户访问域名访问k8s集群,通过域名访问集群内的ingress服务,通过service访问到后端服务。
后端服务之间的访问是是通过service服务来进行访问。

在这里插入图片描述

3 配置与存储
  • Volume:数据卷,共享Pod中容器使用的数据。用来放持久化的数据,比如数据库库数据。(可以和docker中的数据卷进行比对学习)
  • CSI:Container Storage Interface是由来自Kubernetes、Mesos、Docker等社区成员联合制定的一个行业标准接口规范,旨在将任意存储系统暴露给容器化应用程序。CSI规范定义了存储提供商实现CSI兼容的Volume Plugin的最小操作集和部署建议。CSl规范的主要焦点是声明Volume Plugin必须实现的接口。
4 特殊类型配置
  • ConfigMap:可以通过key-value这样的信息构建一个ConfigMap,让容器或者pod里面可以读取到这个ConfigMap的数据。可以把容器内的数据暴露出来,或者可以这么说原先容器内的运行的后端服务有些数据,比如数据库信息,如果更新需要重新打包jar包然后更新pod,现在可以通过把这个信息放置到ConfigMap,如果要修改信息直接修改ConfigMap,这个就是ConfigMap的作用。
  • Secret:Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敢感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用,Secret有三种类型:
    • Service Account:用来访问Kubemetes API,由Kubernetes自动创建,并目会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中
    • Opaquet base64编码格式的Secret,用来存储密码、密钥等
    • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。
  • DownwardAPI:DownwardAPI这个模式和其他模式不一样的地方在于它不是为了存放容器的数据也不是用来进行容器和宿主机的数据交换的,而是让pod里的容器能够直接获取到这个pod对象本身的一些信息。
    DownwardAPI提供了两种方式用于将pod的信息注入到容器内部:
    • 环境变量:用于单个变量,可以将p0d信息和容器信息直接注入容器内部
    • volume挂载:将pod信息生成为文件,直接挂载到容器内部中去
5 其他
  • Role:是去定义一组权限,定义我们命名空间级别的权限,和上文的(ClusterRole)不是一个级别的权限。Role是一组权限的集合,例如Role可以包含列出Pod权限及列出Deployment权限,Role用于给某个Namespace中的资源进行鉴权。
  • RoleBinding:可以作用于Role和ClusterRole,用RoleBinding就只能绑定到命名空间内。

2.2资源清单

  • 必须存在的属性
参数名字段类型说明
apiVersionString这里指的是K8s API的版本,目前基本上是v1,可以用kubectl api-version命令查询
kindString这里指的是yaml文件定义的资源类型和角色,比如:pod
metadataObject元数据对象,固定值就写 metadata
metadata.nameString元数据对象的名字,这里由我们编写,比如命令Pod的名字
metadata.namespaceString元数据对象的命名空间,由我们自身定义
specObject详细定义对象,固定值就写 Spec
spec.containers[]list这里是Spec对象的容器列表定义,是个列表
spec.containers[].nameString这里定义容器的名字
spec.containers[].imageString这里定义要用到的镜像名称
  • 主要对象
参数名字段类型说明
spec.containers[].nameString定义容器的名字
spec.containers[].imageString定义要用到的镜像名称
spec.containers[].imagePullRolicyString定义镜像拉取策略,有Always、Never、IfNotPresent三个选项; Always:每次都尝试重新拉取镜像,默认Always ;Never:仅使用本地镜像 ;IfNotPresent:如果本地有镜像就使用本地就像,如果没有就拉取在线镜像;
spec.containers[].command[]List指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。
spec.containers[].args[]List指定容器启动命令参数,因为是数组可以指定多个。
spec.containers[].workingDirString指定容器的工作目录。
spec.containers[].volumeMounts[]List指定容器内部的存储卷配置
spec.containers[].volumeMounts[].nameString指定可以被容器挂载的存储卷的名称
spec.containers[].volumeMounts[].mountPathString指定可以被容器挂载的存储卷的路径
spec.containers[].volumeMounts[].readOnlyString设置存储卷路径的读写模式,true或者false,默认为读写模式
spec.containers[].ports[]List指定容器需要用到的端口列表
spec.containers[].ports[].nameString指定端口名称
spec.containers[].containerPortString指定容器需要监听的端口号
spec.containers[].ports[].hostPortString指定容器所在主机需要监听的端口号,默认跟上面containerPort相同;注意设置了hostPort同一台主机无法启动该容器的相同副本(因为主机的端口号不能相同,这样会冲突)
spec.containers[].ports[].protocolString指定端口协议,支持TCP和UDP,默认为TCP
spec.containers[].env[]List指定容器运行前需设置的环境变量列表
  • 额外的参数项
参数名字段类型说明
spec.restartPolicyString定义Pod的重启策略,可选值为Always、OnFailure,默认值为Always;1.Always:pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启它。2.OnFailure:只有pod以非零退出码终止时,kubelet才会重启该容器;如果容器正常退出(退出码为0),则kubelet将不会重启它;3.Never:pod终止后,kubelet将退出码报告给master,不会重启pod。
spec.nodeSelectorObject定义Node的Label过滤标签,以key: value格式指定
spec.imagePullSecretsObject定义pull镜像时使用sercet名称,以name: secretkey格式指定
spec.hostNetworkBoolean定义是否使用主机网络模式,默认值false;设置true表示使用宿主机网络,不使用docker网桥,同时设置了true将无法再同一台宿主机上启动第二个副本。

3、对象规约和状态

规约(Spec)

  • "spec”是规约、规格的意思,spec是必需的,它描述了对象的期望状态(Desired State)一一希望对象所具有的特征.当创建Kubernetes对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。

状态(Status)

  • 表示对象的实际状态,该属性由k8s自己谁护,k8s会通过一系列的控制器对对应对象进行管理,让对象尽可能的让实示状态与期望状态重合。

相关文章:

【k8s核心概念与专业术语】

k8s架构 1、服务的分类 服务分类按如下图根据数据服务支撑,分为无状态和有状态 无状态引用如下所示,如果一个nginx服务,删除后重新部署有可以访问,这个属于无状态,不涉及到数据存储。 有状态服务,如redis&a…...

【stm32】hal库学习笔记-UART/USART串口通信(超详细!)

【stm32】hal库学习笔记-UART/USART串口通信 hal库驱动函数 CubeMX图形化配置 导入LCD.ioc RTC设置 时钟树配置 设置LSE为RTC时钟源 USART设置 中断设置 程序编写 编写主函数 /* USER CODE BEGIN 2 */lcd_init();lcd_show_str(10, 10, 16, "Demo12_1:USART1-CH340&q…...

通俗易懂理解GhostNetV1轻量级神经网络模型

一、参考资料 原始论文:[1] PyTorch代码链接:Efficient-AI-Backbones MindSpore代码:ghostnet_d 解读模型压缩5:减少冗余特征的Ghost模块:华为Ghost网络系列解读 GhostNet论文解析:Ghost Module CVPR…...

P8630 [蓝桥杯 2015 国 B] 密文搜索

P8630 [蓝桥杯 2015 国 B] 密文搜索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 题目分析 基本上是hash的板子,但实际上对于密码串,只要判断主串中任意连续的八个位置是否存在密码串即可;那么我们…...

Electron实战之环境搭建

工欲善其事必先利其器,在进行实战开发的时候,我们最终的步骤是搞好一个舒服的开发环境,目前支持 Vue 的 Electron 工程化工具主要有 electron-vue、Vue CLI Plugin Electron Builder、electron-vite。 接下来我们将分别介绍基于 Vue CLI Plu…...

【0259】inval.h/inval.c的理解

1. inval.h/inval.c inval.h、inval.c是缓存无效消息(invalidation message)调度程序定义。 2. inval.h/inval.c特性 inval.h/inval.c的实现是一个非常微妙的东西,所以需要注意: 当一个元组被更新或删除时,我们的标准可见性规则(standard visibility rules)认为只要我…...

力扣爆刷第77天--动态规划一网打尽打家劫舍问题

力扣爆刷第77天–动态规划一网打尽打家劫舍问题 文章目录 力扣爆刷第77天--动态规划一网打尽打家劫舍问题一、198.打家劫舍二、213.打家劫舍II三、337.打家劫舍 III 一、198.打家劫舍 题目链接:https://leetcode.cn/problems/house-robber/ 思路:小偷不…...

深入理解C语言(5):程序环境和预处理详解

文章主题:程序环境和预处理详解🌏所属专栏:深入理解C语言📔作者简介:更新有关深入理解C语言知识的博主一枚,记录分享自己对C语言的深入解读。😆个人主页:[₽]的个人主页&#x1f3c4…...

ESP8266智能家居(3)——单片机数据发送到mqtt服务器

1.主要思想 前期已学习如何用ESP8266连接WIFI,并发送数据到服务器。现在只需要在单片机与nodeMCU之间建立起串口通信,这样单片机就可以将传感器测到的数据:光照,温度,湿度等等传递给8266了,然后8266再对数据…...

lvm逻辑卷创建raid阵列(不常用)—— 筑梦之路

RAID卷介绍 逻辑卷管理器(LVM)不仅仅可以将多个磁盘和分区聚合到一个逻辑卷中,以此提高单个分区的存储容量,还可以创建和管理独立磁盘的冗余阵列(RAID)卷,防止磁盘故障并提高性能。它支持常用的RAID级别,支持的RAID的级别有 0、1…...

LayUI发送Ajax请求

页面初始化操作 var processData null $(function () {initView();initTable();// test(); })function initView() {layui.use([laydate, form], function () {var laydate layui.laydate;laydate.render({elem: #applyDateTimeRange,type: datetime,range: true});}); }初始…...

平时积累的FPGA知识点(10)

平时在FPGA群聊等积累的FPGA知识点,第10期: 41 ZYNQ系列芯片的PL中使用PS端送过来的时钟,这些时钟名字是自动生成的吗? 解释:是的。PS端设置的是ps_clk,用report_clocks查出来的时钟名变成了clk_fpga_0&a…...

使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程

文章目录 使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程开发环境hello Streatelit显示DataFrame数据显示地图WebUI左右布局设置st.sidebar左侧布局st.columns右侧布局 大语言模型LLM Chatbot WebUI设置Chatbot页面布局showdataframe()显示dataframeshowLineChart()显示折线图s…...

电脑死机卡住怎么办 电脑卡住鼠标也点不动的解决方法

在我们使用电脑的过程中,可能由于电脑硬件或者软件的问题,偶尔会出现电脑卡住的情况,很多电脑小白都不知道电脑卡住了怎么办,鼠标也点不动,键盘也没用,一旦发生了这种情况,大家可以来参考一下小编分享的电脑死机卡住的解决方法。 电脑卡住鼠标也点不动的解决方法 方…...

RAG 语义分块实践

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 原文标题:Semantic chunking in practice 原文地址:https://medium.com/@boudhayan-dev/semantic-chunking-in-practice-23a8bc33d56d 语义分块的实践 回顾 …...

12 Autosar_SWS_MemoryMapping.pdf解读

AUTOSAR中MemMap_autosar memmap-CSDN博客 1、Memory Map的作用 1.1 避免RAM的浪费:不同类型的变量,为了对齐造成的空间两份; 1.2 特殊RAM的用途:比如一些变量通过位掩码来获取,如果map到特定RAM可以通过编译器的位掩码…...

【Linux取经路】文件系统之缓冲区

文章目录 一、先看现象二、用户缓冲区的引入三、用户缓冲区的刷新策略四、为什么要有用户缓冲区五、现象解释六、结语 一、先看现象 #include <stdio.h> #include <string.h> #include <unistd.h>int main() {const char* fstr "Hello fwrite\n"…...

华为OD机试真题-查找接口成功率最优时间段-2023年OD统一考试(C卷)--Python3--开源

题目&#xff1a; 考察内容&#xff1a; for 时间窗口list(append, sum, sort) join 代码&#xff1a; """ 题目分析&#xff1a;最长时间段 且平均值小于等于minLost同时存在多个时间段&#xff0c;则输出多个&#xff0c;从大到小排序未找到返回 NULL 输入…...

缓存篇—缓存雪崩、缓存击穿、缓存穿透

缓存异常会面临的三个问题&#xff1a;缓存雪崩、击穿和穿透。 其中&#xff0c;缓存雪崩和缓存击穿主要原因是数据不在缓存中&#xff0c;而导致大量请求访问了数据库&#xff0c;数据库压力骤增&#xff0c;容易引发一系列连锁反应&#xff0c;导致系统奔溃。不过&#xff0…...

Python实现视频转音频、音频转文本的最佳方法

文章目录 Python实现视频转音频和音频转文字视频转音频步骤 1&#xff1a;导入moviepy库步骤 2&#xff1a;选择视频文件步骤 3&#xff1a;创建VideoFileClip对象步骤 4&#xff1a;提取音频步骤 5&#xff1a;保存音频文件 音频转文字步骤 1&#xff1a;导入SpeechRecognitio…...

阿里云SSL免费证书到期自动申请部署程序

阿里云的免费证书只有3个月的有效期&#xff0c;不注意就过期了&#xff0c;还要手动申请然后部署&#xff0c;很是麻烦&#xff0c;于是写了这个小工具。上班期间抽空写的&#xff0c;没有仔细测试&#xff0c;可能存在一些问题&#xff0c;大家可以自己clone代码改改&#xf…...

Vue全局事件防止重复点击(等待请求)【进阶版】

继《Vue全局指令防止重复点击&#xff08;等待请求&#xff09;》之后&#xff0c;感觉指令方式还是不太友好&#xff0c;而且嵌套闭包比较麻烦&#xff0c;于是想到了Vue的全局混入&#xff0c;利用混入&#xff0c;给组件绑定click事件。 一、实现原理 与指令方式大致一样&…...

C#程序反编译经验总结

1. 反编译出的代码有问题时&#xff0c;可以用多个反编译工具之间的代码相互印证。&#xff08;比如.net reflector 与ILSpy&#xff09; 2. 有时Visual Studio编译的错误信息不明确时, 可以msbuild编译程序&#xff0c;msbuild的错误信息相对完整一些。 2.1 编译错误&#xf…...

Android系统启动流程

android的启动流程是从底层开始进行的&#xff0c;具体如下所示&#xff1a; Android是基于Linux内核的系统&#xff0c;Android的启动过程主要分为两个阶段&#xff0c;首先是Linux内核的启动&#xff0c;然后是Android框架的启动。 可以将Andorid系统的启动流程分为以下五个…...

Flask——基于python完整实现客户端和服务器后端流式请求及响应

文章目录 本地客户端Flask服务器后端客户端/服务器端流式接收[打字机]效果 看了很多相关博客&#xff0c;但是都没有本地客户端和服务器后端的完整代码示例&#xff0c;有的也只说了如何流式获取后端结果&#xff0c;基本没有讲两端如何同时实现流式输入输出&#xff0c;特此整…...

crmeb多门店商城系统二次开发 增加车辆车牌搜索功能、车辆公里数

1、增加的数据库 ALTER TABLE eb_store_order ADD cart_number VARCHAR(255) NOT NULL DEFAULT COMMENT 车牌 AFTER erp_order_id, ADD curmileage VARCHAR(255) NOT NULL DEFAULT COMMENT 当前里程 AFTER cart_number; ALTER TABLE eb_store_cart ADD cart_number VARCHAR(…...

深度好文|关于人类智能与自主系统

上个世纪 50 年代&#xff0c;在二战结束没多久&#xff0c;人们开始研究和设计智能系统。作为信息学的分支&#xff0c;人类开始了最早对于人工智能的研究。时间来到 60 年代&#xff0c;人们对于计算机的发展充满了信心&#xff0c;人们断言“20年内机器能够做任何人所能做的…...

防火墙内容安全笔记

目录 DFI和DPI IDS和IPS 签名 AV URL过滤 HTTPS过滤 内容过滤 文件类型过滤 文件内容过滤 邮件过滤 VPN概述 DFI和DPI DFI和DPI技术 --- 深度检测技术 DPI DPI --- 深度包检测技术 --- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#…...

应用于温度报警器中的高精度温度传感芯片

温度报警器通常由温度传感器、控制电路和报警装置组成。温度传感器能够将温度变化转换为电信号&#xff0c;控制电路则对这些信号进行处理&#xff0c;当检测到的温度达到或超过预设的报警阈值时&#xff0c;报警装置会通过声音、灯光或其他方式发出警报&#xff0c;以提醒用户…...

微信小程序swiper 视频中间大,两边小,轮播滑到中间视频自动播放组件教程

静态效果&#xff1a; 进入下面小程序可以体验效果&#xff0c;点击底部 看剧 栏目 一、创建小程序组件 二、代码 1、WXML <view class"swiper-wrapper"><swiperclass"main-sw"autoplay"{{false}}"circular"{{true}}"inte…...