【后端开发】自动化部署、服务管理、问题排查工具(cicd流水线,k8s集群,ELK日志)

news2024/11/23 15:53:29

【后端开发】自动化部署、服务管理、问题排查工具(cicd流水线,k8s集群,ELK日志)

文章目录

      • 1、Devops与CICD流水线(TeamCity, Jenkins,GitHub Actions)
      • 2、Kubernetes 集群的管理和操作(对比Portainer,docker ui)
      • 3、Elastic Stack / ELK 日志平台(Elasticsearch + Logstash + Filebeat + Kibana)

1、Devops与CICD流水线(TeamCity, Jenkins,GitHub Actions)

CICD和DevOps的区别和联系

  • CICD更关注的是整个开发,测试,部署的自动化的过程,当我们在本地单元测试通过后,我们提交到git上,触发相应的webhook或者类似的东西进行代码的构建,并打包部署到相应的机器上,自动化的完成这整个过程。
  • DevOps 就是开发(Development)、测试(QA)、运维(Operations)这三个领域的合并。虽然名字中没有体现,但是DevOps仍包括测试。
    DevOps更关注的是打通用户、PMO、需求、设计、开发(Dev)、测试、运维(Ops)等各上下游部门或不同角色;打通业务、架构、代码、测试、部署、监控、安全、性能等各领域工具链;
    尤其是打通开发与运维之间的gap,因为两者实际上存在着很多的冲突。DevOps是基于CICD的,自动化的流程是基础,DevOps是一个项目由idea到实际稳定运行的产品的一个最佳实践。
  • DevOps是CICD思想的延伸,CICD是DevOps的基础核心,如果没有CICD自动化的工具和流程,DevOps是没有意义的。在这里插入图片描述
    在这里插入图片描述

CICD是什么?

  • CI/CD 是“持续集成”(Continuous Integration)和“持续交付/持续部署”(Continuous Delivery/Continuous Deployment)的缩写。
    它们是现代软件开发流程中的关键实践,用于提高软件开发、测试和发布的效率与质量。
  • 持续集成(CI)
    是一种开发实践,强调将代码更频繁地集成到主干代码库中。其主要特点包括:
    频繁合并: 开发人员定期将自己的代码更改合并到共享的主干分支,通常是每天多次(分支独立构建镜像和容器)。
    自动化测试: 在每次代码提交后,自动运行构建和测试,确保新代码不会破坏现有功能(校验代码安全风险,容器正确运行,等等测试)。
    及时反馈: 开发团队可以快速获得关于代码更改的反馈,从而更快地修复问题。
  • 持续交付(CD)
    是在持续集成的基础上进一步延伸的一种实践,目的是让软件始终处于可发布状态。其特点包括:
    自动化构建和发布: 经过自动化测试的代码可以快速、安全地部署到生产环境或准备生产的环境中。
    手动触发发布: 代码在任何时候都可以发布,但通常需要手动确认。
  • 持续部署 (CD)
    持续部署是持续交付的一个更高阶段,指的是每当代码通过自动测试后,立即自动部署到生产环境中。其特点包括:
    自动化部署: 无需人工干预,代码更改会自动上线。
    快速迭代: 可以更快地交付新功能或修复bug,客户几乎可以在更短的时间内体验到最新的产品改进。
    在这里插入图片描述

TeamCity

  • TeamCity 是 JetBrains 的商业 CI/CD 服务器,一般为自托管,也有云版本。
  • 参考:1, 2, 3
  • 特点:
    • 灵活性: 通过配置能够支持复杂的构建流程和多种构建工具。
    • 集成: 与多种版本控制系统、构建工具和部署平台的集成非常好。
    • 插件支持: 拥有丰富的插件生态系统,可以扩展功能。
    • 监控与分析: 提供详细的构建历史和性能监控。

Jenkins

  • Jenkins 是一个开源的自动化服务器,用于实现持续集成和持续交付(CI/CD)。
  • 参考:1, 2, 3
  • 特点:
    • 开源: 免费使用,并拥有活跃的社区。
    • 插件生态: 拥有大量插件,几乎能够与所有主流工具和技术集成。
    • 跨平台: 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。
    • 高度可定制性: 允许用户根据需要进行配置和扩展。

GitHub Actions

  • 类型: GitHub 提供的 CI/CD 工具,集成在 GitHub 平台内。
  • 参考:1, 2, 3, 5
  • 特点:
    • 紧密集成: 与 GitHub 仓库无缝结合,可以直接在代码库中进行工作流配置。
    • YAML 配置: 通过 YAML 文件定义构建和部署过程,易于理解和使用。
    • 社区模板: 拥有大量社区共享的工作流模板,可以快速上手。
    • 按需计费: 提供免费和按用量计费的选项,适合小型项目和开源项目。

服务选型对比

  • TeamCity:提供用户友好的体验和高级功能,适合中小型企业,但具有商业限制。
  • Jenkins:适合大规模和多样化的开发团队,开源,灵活且强大,但需要一定的维护和配置时间。
  • GitHub Actions:对使用 GitHub 的团队特别便利,简化了 CI/CD 流程,但可能不适合需要独立于 GitHub 进行构建的场景。

更多CICD工具:

  • 持续集成工具:Jenkins、Travis CI、CircleCI、GitLab CI等;
  • 持续部署工具:Ansible、Puppet、Chef、SaltStack、AWS CodeDeploy等;
  • 容器编排工具:Docker、Kubernetes、OpenShift等;
  • 代码质量工具:SonarQube、Code Climate、Coverity、PMD等;
  • 测试自动化工具:Selenium、Appium、TestComplete等;
  • 监控工具:Nagios、Zabbix、ELK Stack等。

参考资料:1, 2, 3, 4, 5

2、Kubernetes 集群的管理和操作(对比Portainer,docker ui)

Kubernetes 与 Docker的联系

  • Docker 可以允许开发人员使用本地容器在标准化环境中工作,从而对开发生命周期进行简化;而这些本地容器会为您提供应用程序和服务。它是基于容器的平台,支持高度可移植的工作负载。
  • 另一方面,Kubernetes 允许您定义复杂的容器化应用程序,并能跨服务器集群大规模运行这些应用程序。
  • Kubernetes,容器编排工具,在多个服务器之间协调多个容器,大规模地定义与运行复杂的容器化应用程序。
  • docker, 用于创建和运行容器的容器技术堆栈, 使用库和运行时将应用程序打包到容器映像, 更快速对应用程序操作和代码传输进行标准化。
  • Kubernetes 管理的容器通常是 Docker 容器,也可以是docker衍生的其他如containerd,CRI-O等更轻量的容器。

Kubernetes 与 docker管理工具(Portainer、Docker UI)

  • Portainer 和 Docker UI 更专注于容器的简单管理,而 Kubernetes 则是用于全面管理大规模容器集群的编排平台
  • Portainer 是一款免费的容器管理平台,它提供了Web界面管理Docker容器、镜像、网络和数据卷等资源。Portainer支持多种Docker环境,包括Docker Swarm、Kubernetes和Docker单机模式。通过Portainer,用户可以方便地创建、启动、停止和删除容器、查看容器日志、进入容器终端、管理镜像等操作。
  • DockerUI 是一个易于使用且轻量级的Docker管理工具。通过Web界面的操作,可以更方便地让不熟悉Docker指令的用户更快地进入Docker世界。DockerUI覆盖了Docker CLI命令行的95%以上的命令功能。通过DockerUI界面提供的可视化操作功能,可以轻松执行Docker环境和Docker Swarm群集环境的管理和维护功能。

Kubernetes(通常简称为 K8s)是一个开源容器编排平台,主要用于自动化应用程序的部署、扩展和管理。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

集群(Cluster)

  • Kubernetes 集群是由一组实际或虚拟计算机(节点)组成的集合,这些计算机一起运行 Kubernetes 应用。集群由以下两种主要角色的节点组成:
  • 控制平面(Control Plane):负责管理集群的状态,包括 API 服务器、调度器、控制管理器和 etcd(存储集群状态的键值数据库)
  • 工作节点(Worker Node):实际运行应用程序的节点,每个节点通常运行多个 pod。

核心组件

  • API Server:Kubernetes 控制平面的前端,所有的操作请求都通过 API Server 处理。
  • etcd:一个分布式键值存储系统,用于保存集群的所有数据和状态。
  • Controller Manager:负责处理控制器的运行,确保集群状态的一致性。
  • Scheduler:负责将新创建的 Pod 调度到适合的工作节点。
  • Kubelet:运行在每个工作节点上的代理,它负责维护 Pod 的状态。
  • Kube-Proxy:负责网络代理和负载均衡,处理 Pod 之间的通信。

基本对象

  • Pod:Kubernetes 中最小的可调度单元,包含一个或多个容器,通常提供应用程序的基础环境。
  • Service:为一组 Pod 提供统一的访问入口,可以通过 DNS 名称进行访问,支持负载均衡。
  • Deployment:用于管理无状态应用的声明式 API,对 Pod 进行创建和更新。
  • ReplicaSet:确保指定数量的 Pod 副本在任何时间都在运行。
  • StatefulSet:用于管理有状态应用的 Pod,确保 Pod 的唯一性和持久性。
  • DaemonSet:确保在每个节点上运行一个 Pod 的副本,通常用于集群级别的管理任务。
  • Job:用于一次性任务调度,确保指定的数量的 Pod 任务成功完成。

基本概念

  • 命名空间(Namespace) :是 Kubernetes 中用于将集群资源分隔的机制,允许在同一个集群中运行多个隔离的工作负载。常用来组织不同的环境(如开发、测试和生产)或按团队划分。
  • Volume 和 Storage:Kubernetes 提供了多种存储选项,支持各种持久化存储机制。例如,Pod 中的 Volume 用于存放容器的数据,允许跨 Pod 持久化存储。
  • Label:用于对 Kubernetes 对象进行标记,以便进行选择和组织。可以用于选择特定的 Pod。
  • Annotation:允许附加元数据到对象上,通常用于存储非识别信息。
  • 网络:Kubernetes 提供了强大的网络管理功能,包括容器间的通信、服务发现和负载均衡。每个 Pod 都有自己的 IP 地址,所有 Pod 之间的通信可以通过该 IP 地址进行。

kubectl常用命令

# 查看集群信息
kubectl cluster-info

# 查看所有命名空间
kubectl get namespaces

# 查看所有 Pods
kubectl get pods

# 查看特定命名空间的 Pods
kubectl get pods -n <namespace>

# 查看所有服务
kubectl get services

# 查看特定命名空间的服务
kubectl get services -n <namespace>

# 查看 Pod 详细信息
kubectl describe pod <pod-name>

# 创建资源
kubectl apply -f <file.yaml>

# 删除资源
kubectl delete pod <pod-name>

# 查看集群节点
kubectl get nodes

# 查看特定节点信息
kubectl describe node <node-name>

# 获取 Pod 日志
kubectl logs <pod-name>

# 执行命令到 Pod 中
kubectl exec -it <pod-name> -- <command>

# 查看所有 ReplicaSets
kubectl get replicasets

# 查看所有 Deployments
kubectl get deployments

# 查看特定 Deployment 的详细信息
kubectl describe deployment <deployment-name>

# 滚动更新 Deployment
kubectl rollout restart deployment <deployment-name>

# 查看 Deployment 的历史
kubectl rollout history deployment <deployment-name>

K8S集群搭建

  • 一主(master)一从(slave)。系统创建的Pod都在namespace为kube-system中。master和slave的组件分配如下图
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

master的k8s主要组件

  • kube-apiserver 客户端组件通过kube-apiserver管理cluster各种资源,kube-apiserver提供了HTTP/HTTPS RESTful API,例如kubectl就算是一个客户端
  • kube-controller-manager 管理cluster的资源,kube-controller-manager由多种controller组成,包括replication controller、namespacecontroller等。 不同的controller管理不同的资源,replication controller管理Deployment、StatefulSet、DaemonSet的生命周期;namespacecontroller管理Namespace资源
  • kube-schedule 负责决定哪个Pod在哪个机器上运行。Scheduler在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求
  • etcd 是一个数据库,保存集群的配置信息和各种资源的状态信息。例如,kubectl get pod信息就是从etcd数据库获取的
  • weave-net Pod间总是要通信的,weave是Pod的网络的其中一个方案

slave的k8s主要组件

  • kube-proxy: service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。
    service接收到的请求是如何转发到Pod的呢?这就是kube-proxy要完成的工作。每个Node都会运行kube-proxy服务,它负责将访问service的TCP/UPD数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。从图中可以看到master也有kube-proxy,这是因为master也可以作为一个slave来使用。
  • kubelet : 是Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态。

参考资料:1, 2, 3, 4, 5,6

3、Elastic Stack / ELK 日志平台(Elasticsearch + Logstash + Filebeat + Kibana)

日志的传输路线是:

  • 微服务产生日志,并将日志数据保存到磁盘中的.log文件中,
  • filebeat监听log文件,将其数据收集并结构化后传输到logstash上,
  • logstash将日志进行过滤收集,再传输到elasticsearch上,
  • elasticsearch把日志作为索引进行存储并且构造对应倒排索引,
  • kibana可视化呈现日志,需要查询时kibana调用elasticsearch进行日志数据的查询。

Elastic Stack架构

  • Elastic Stack(也称为 ELK Stack)是公认的日志监测领域的领导者,拥有业界最广泛、最全面的系列日志数据源,是备受欢迎的免费开放日志平台。
  • 由四个组件组成,分别是Beats、Logstash、Elasticsearch、Kibana。它们提供了日志采集、清洗、存储、可视化的能力,是一个比较完备的架构。
  • Beats:是一组工具集,一些轻量的数据采集器。
    需要把他们安装在生产环境的各个机器上,他们采集了本机日志后,向Logstash或Elasticsearch发送数据。
  • Logstash:动态数据收集管道,负责数据的清洗、格式化、添加附属信息等。
    Logstash的功能是很强大的,它支持从多种系统中收集数据,又可以把数据推送到各种系统里。
  • Elasticsearch:是一种分布式搜索引擎,数据的存储、查询都集中在这里。
    它本身有较为强大的集群管理功能,支持水平扩展。
    数据多分片、多副本存储,即提供高并发的写入查询能力,又能保证数据可靠性。
  • Kibana:数据可视化平台
    支持各种丰富的图表,可以直观的呈现日志数据。
    也提供了易用的搜索界面,简化问题定位过程。

ELK 平台搭建

  • 参考资料:1

  • 1、部署并启动微服务

    • 指定服务的日志地址:logging.file.path=/Users/xxx/
  • 2、部署 Elasticsearch

    • 解压 Elasticsearch 文件:tar -zxvf elasticsearch-7.13.0-linux-x86_64.tar.gz
    • 修改配置文件(参考网络或参考资料)。
    • 因为 Elasticsearch 不允许以 root 账号启动,需要提前创建其他账号。
    • 将 Elasticsearch 安装目录权限赋给 elastic 账号:chown -R elastic:elastic elasticsearch-7.13.0
    • 以 elastic 账户启动 Elasticsearch:./bin/elasticsearch
  • 3、部署 Kibana

    • 解压 Kibana 文件:tar -zxvf kibana-7.13.0-linux-x86_64.tar.gz
    • 修改配置文件:vim config/kibana.yml (参考网络或参考资料)
    • 同样,Kibana 也不允许用 root 账号启动,需要创建 elastic 账号,并将 Kibana 安装目录的权限赋给他:chown -R elastic:elastic kibana-7.13.0
    • 开通 5602 端口:firewall-cmd --add-port=5602/tcp --permanent
    • 重新载入添加的端口:firewall-cmd --reload
    • 以 elastic 账户启动 Kibana:./bin/kibana
    • 测试访问 ip:5602,若出现页面则部署成功。
  • 4、部署 Logstash

    • Logstash 依赖于 Java 环境,推荐使用 JDK 8、11 或 14,提前安装 Java 环境(官方推荐 JDK 11+)。
    • 注意:Logstash 7.13.0 自带 JDK,若服务器没有单独安装 JDK,将使用 Logstash 下的 JDK。
    • 将 Logstash 安装包上传到服务器:scp logstash-7.13.0-linux-x86_64.tar.gz root@172.16.188.6:/var/local
    • 解压安装包:tar -zxvf logstash-7.13.0-linux-x86_64.tar.gz
    • 修改配置文件,Logstash 提供了实例配置文件 logstash-sample.conf 可作基础修改。
    • 开放 5044 端口:firewall-cmd --add-port=5044/tcp --permanent
    • 重新载入配置:firewall-cmd --reload
    • 以上述配置文件启动 Logstash,注意 Logstash 启动较慢。
  • 5、部署 Filebeat

    • 将 Filebeat 传输到两个微服务所在的服务器上:scp
    • /var/local 目录下解压 Filebeat:tar -zxvf filebeat-7.13.0-linux-x86_64.tar.gz
    • 进入 Filebeat 安装目录,修改配置文件:vim filebeat.yml
    • 启动 Filebeat:./filebeat -e -c filebeat.yml
    • 重启微服务,并将启动日志输入到 Beats 中。
    • 调用接口创建几条日志:
      • user-service:
        • http://xxx:8081/user/info?log=use
        • http://xxx:8081/user/error?log=use
      • order-service:
        • http://xxx:8080/order/info?log=orde
        • http://xxx:8080/order/error?log=orde
  • 6、Kibana 可视化

    • 在 Kibana 的 Dev Tools 中输入指令:GET _cat/indices,查看日志索引是否创建成功。
    • 打开 Kibana,进入 Stack Management > Index Management,可以发现新创建的日志索引状态为黄色,这可能是由于副本分片数设置为1所致。需修改为0以更新索引状态为绿色:点击索引,在弹出框中点击 edit settings,修改 number_of_replicas 为 0,点击 save。
    • 也可以通过 DSL 指令直接修改。
    • 点击 Index Patterns,创建索引模式。
    • 输出 order-log 的正则匹配,同理创建 user-log 的索引模式。
    • 进行索引可视化,点击左侧菜单栏中的 Discover。

部分架构图:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

参考资料:1, 2,3, 4, 5 ,6,

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

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

相关文章

【解决】Set-ExecutionPolicy不是内部或外部命令

简介 当使用 VsCode 配置Django项目时&#xff0c;需要配置环境&#xff0c;但是当切换至虚拟环境时&#xff0c;出现了下面的情况。 无法加载文件&#xff1a;D:\django\Scripts\Activate.ps1&#xff0c; 上述问题可通过下面的命令进行解决 解决方法 1 命令行(最好是管理员…

JVM进阶调优系列(1)类加载器原理一文讲透

今天开始写JVM调优系列&#xff0c;并发编程系列也会继续穿插连载&#xff0c;让各位同学闲暇之余有更多阅读选择。 起笔写第一篇&#xff0c;并不好写。首先要构思整个系列的大概框架&#xff0c;一个好的框架一定是深度上由浅入深、逻辑上有严格顺序&#xff0c;读者订阅跟踪…

免费获取的8个SVG图标库,轻松下载与复制!

SVG图标相比传统的JPG、PNG图标具有诸多优势&#xff0c;适用于各种类型的图像&#xff0c;不仅能在不同尺寸下保持清晰度&#xff0c;还具备高度压缩性和轻量特性&#xff0c;支持静态和动态效果。因此&#xff0c;SVG格式在网页设计中往往是优选。尽管如今有很多免费的图标库…

风扇PD协议取电协议芯片-ECP 5702

随着USB-C的普及&#xff0c;市面上消费者PD充电器越来越多&#xff0c;如何让小家电产品也能够支持PD协议快充呢&#xff1f;加入一颗能芯科技PD协议取电协议芯片ECP5702试试看 USB PD协议受电端诱骗协议芯片 1、概述 ECP5702是能芯科技开发的一款专门PD协议的Sink控制器。 …

【论文速看】DL最新进展20241010-扩散模型、目标检测、行人检测

目录 【扩散模型】【目标检测】【行人检测】 【扩散模型】 []Faster Diffusion: Rethinking the Role of UNet Encoder in Diffusion Models 论文链接&#xff1a;https://arxiv.org/pdf/2312.09608 代码链接&#xff1a;https://github.com/hutaiHang/Faster-Diffusion 扩散…

No.10 笔记 | PHP学习指南:PHP数组掌握

本指南为PHP开发者提供了一个全面而简洁的数组学习路径。从数组的基本概念到高级操作技巧&#xff0c;我们深入浅出地解析了PHP数组的方方面面。无论您是初学者还是寻求提升的中级开发者&#xff0c;这份指南都能帮助您更好地理解和运用PHP数组&#xff0c;提高编码效率和代码质…

java批量发送邮件:如何实现高效邮件群发?

java批量发送邮件的教程指南&#xff1f;利用Java实现邮件批发&#xff1f; 随着技术的进步&#xff0c;java批量发送邮件已经成为企业实现高效邮件群发的关键工具。AokSend将探讨如何利用java批量发送邮件技术&#xff0c;实现高效的邮件群发&#xff0c;提升营销效果。 jav…

相当炸裂!495页看漫画学Python(全彩版)通俗易懂!Git首发破万Star

今天给大家分享一份由清华大学出品的《看漫画学Python》&#xff0c;本书作者对每一幅漫画表达的准确性也进行了N遍的推敲和打磨&#xff0c;向广大读者奉献一本精品漫画Python技术书。 总共495页&#xff0c;书中结合了幽默的故事情节和实用的编程知识&#xff0c;使得学习过…

【LeetCode】动态规划—673. 最长递增子序列的个数(附完整Python/C++代码)

动态规划—673. 最长递增子序列的个数 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 优化方法 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释1. 初始化&#xff1a;2. 动态规划过程&…

Basic Pentesting靶机打靶记录

一、靶机介绍 下载链接&#xff1a;https://download.vulnhub.com/basicpentesting/basic_pentesting_1.ova 二、信息收集 确认靶机ip&#xff1a;192.168.242.136 arp-scan -l 扫描端口 nmap -p- -A -sS 192.168.242.136 这里开放了21&#xff0c;22&#xff0c;80端口 扫…

美发店数字化转型:SpringBoot管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

鸿蒙开发:文件推送到沙箱路径

最近一个项目需要基于沙箱路径下的文件进行操作&#xff0c;奈何应用沙箱路径下没有。找来找去方法都是要把文件推送进去。以下是我的一些拙见&#xff0c;请各位看官老爷指点一二。 沙箱路径 沙箱路径&#xff08;Sandbox Path&#xff09;通常是指在计算机安全和软件开发中…

【大学学习-大学之路-回顾-电子计算机相关专业-学习方案-自我学习-大二学生(2)】

【大学学习-大学之路-回顾-电子&计算机相关专业-学习方案-自我学习-大二学生&#xff08;2&#xff09;】 1、前言2、总体说明1-保证课程原因1&#xff1a;原因2&#xff1a; 2-打比赛3-自我适应 - 享受大学生活 3、 保证课程1、英语课程2、专业课程3、其他课程 4、 打比赛…

数据质量指标:如何衡量数据的准确性

数据质量是任何数据驱动运营的重要组成部分。即使对于不打算将数据集出售给其他公司的企业&#xff0c;数据的质量和准确性也会极大地影响决策效率。 不幸的是&#xff0c;没有单一指标可以确保数据质量达到标准。您必须跟踪多个指标并不断关注它们。因此&#xff0c;维护数据…

高通QCS6490开发(十):合并显示多路安防摄像头

视频分析时边缘侧AI应用的一个常见场景&#xff0c;边缘侧的单个节点能够同时视频流越多&#xff0c;这不仅提高了处理效率&#xff0c;还具有显著的经济性。本文将介绍如何使用QCS6490的VPU&#xff08;视频处理单元&#xff09;来支持H264/H265的视频硬件编解码&#xff0c;并…

C语言计算GPS卫星位置

1 概述 在用GPS信号进行导航定位以与制订观测计划时&#xff0c;都必须已知GPS卫星在空间的瞬间位置。卫星位置的计算是根据卫星电文所提供的轨道参数按一定的公式计算的。本节专门讲解观测瞬间GPS卫星在地固坐标系中坐标的计算方法。 2 卫星位置的计算 1. 计算卫星运行的平…

如何做好项目管理中的需求管理?

本人任职于某科技公司项目经理&#xff0c;主要帮助客户梳理现有的业务流程&#xff0c;借助公司自主研发的低代码平台实现流程的线上化&#xff0c;业务的数字化转型。 由于项目性质特殊&#xff0c;在实施期间&#xff0c;对于总体项目需要采用传统的瀑布式开发规划整个项目…

揭秘网络流量分析的秘密 WireShark使用教程

WireShark是一个网络包分析工具。该工具主要用来捕获网络数据包&#xff0c;并自动解析网络数据包&#xff0c;为用户显示数据包详细信息&#xff0c;供用户对数据包进行分析 网络管理员 使用WireShark来检查网络问题网络安全工程师 使用WireShark来检查咨询安全相关问题开发人…

腾讯云大牛亲码“redis深度笔记”在牛客网上火了,完整 PDF 开源

前言 作为这个时代码代码的秃头人员&#xff0c;对Redis肯定是不陌生的&#xff0c;如果连Redis都没用过&#xff0c;还真不好意思出去面试&#xff0c;指不定被面试官吊打多少次。 毕竟现在互联网公司和一些创业公司都要用到Redis&#xff0c;像亚马逊、谷歌、阿里、腾讯都要…

【大模型理论篇】精简循环序列模型(minGRU/minLSTM)性能堪比Transformer以及对循环神经网络的回顾

1. 语言模型之精简RNN结构 近期关注到&#xff0c;Yoshua Bengio发布了一篇论文《Were RNNs All We Needed?》&#xff0c;提出简化版RNN&#xff08;minLSTM和minGRU&#xff09;。该工作的初始缘由&#xff1a;Transformer 在序列长度方面的扩展性限制重新引发了对可在训练期…