运维锅总浅析云原生DevOps工具

本文从Tekton与Kubevela、Jenkins、GitLab CI的区别与联系对常见的云原生DevOps工具进行对比分析,最后给出DevOps工具选型思路。希望对您有所帮助!

一、DevOps简介

DevOps是一种结合了软件开发(Development)和IT运维(Operations)的实践,旨在缩短系统开发生命周期,并在保持高软件质量的前提下实现持续交付。以下是DevOps的一些关键方面和常用工具:

关键实践:

  1. 持续集成(CI): 频繁地将代码变更合并到中央代码库,并对每次变更进行自动测试。
  2. 持续交付(CD): 确保代码在任何时候都可以安全地部署到生产环境,并且能够自动化发布流程。
  3. 持续部署: 自动化地将每次代码变更部署到生产环境中,不需要人工干预。
  4. 基础设施即代码(IaC): 使用代码来管理和配置基础设施,以提高一致性和可重复性。
  5. 监控和日志: 实时监控系统性能和日志,及时发现和解决问题。
  6. 协作与沟通: 促进开发团队和运维团队之间的协作与沟通,打破传统的孤岛效应。

常用工具:

  1. 版本控制系统: Git、SVN
  2. CI/CD工具: Jenkins、Travis CI、CircleCI、GitLab CI
  3. 配置管理工具: Ansible、Puppet、Chef、SaltStack
  4. 容器化工具: Docker、Kubernetes
  5. 监控工具: Prometheus、Grafana、Nagios
  6. 日志管理工具: ELK Stack (Elasticsearch, Logstash, Kibana)、Splunk

优点:

  • 加快交付速度: 通过自动化流程和工具链,提高软件发布的频率和速度。
  • 提高质量: 持续集成和自动化测试确保了代码质量,减少了生产环境中的错误。
  • 增强协作: 开发和运维团队之间的紧密合作提高了沟通效率和团队协作能力。
  • 更快响应: 通过实时监控和日志分析,能够更快速地发现和解决问题。

适用场景:

  • 快速迭代: 适用于需要快速发布新功能和版本的软件开发项目。
  • 高可用性系统: 对于需要高可用性和快速恢复能力的系统非常适用。
  • 复杂系统管理: 有助于管理大规模、复杂的分布式系统。

DevOps的核心思想是通过自动化和协作来提高软件开发和运维的效率,从而更快地交付高质量的软件产品。

二、OAM是什么

OAM(Open Application Model)是一种开放的应用模型,旨在定义和管理现代云原生应用。它由Microsoft和Alibaba Cloud联合提出,旨在提供一种标准化的方法来描述和管理跨多种环境和平台的应用。

核心概念

  1. 应用(Application): 应用是OAM的核心单元,是用户希望部署和管理的内容。一个应用包含多个组件(Components)和特性(Traits)。

  2. 组件(Component): 组件是应用的基本构建块,每个组件代表一个可独立部署的单元,比如一个容器、一个数据库实例或者一个微服务。

  3. 特性(Trait): 特性是对组件的操作或属性的抽象,比如伸缩、路由、监控等。特性可以应用于组件以扩展其功能。

  4. 作用域(Scope): 作用域定义了组件之间的共享资源和上下文,比如网络域、配置域等。

  5. 工作流(Workflow): 工作流定义了应用的部署和管理过程中的一系列步骤,比如部署顺序、依赖关系等。

主要优势

  1. 平台无关性: OAM模型与底层平台无关,可以应用于各种云平台和编排系统(如Kubernetes)。

  2. 标准化描述: 提供统一的应用描述方法,简化了多环境、多平台的应用管理。

  3. 扩展性: 组件和特性可以灵活扩展,适应不同的业务需求和技术栈。

  4. 简化管理: 通过统一的模型和抽象,降低了应用管理的复杂性。

适用场景

  1. 跨云部署: 需要在多个云平台之间迁移和部署应用。

  2. 多租户环境: 在共享的基础设施上管理多个独立的应用。

  3. 复杂应用: 需要管理包含多个组件和特性的复杂应用。

典型工具和实现

  • KubeVela: 基于OAM模型的现代应用管理平台,旨在简化在Kubernetes上的应用部署和管理。
  • Crossplane: 通过OAM提供跨云的应用管理和控制平面。

示例

下面是一个简单的OAM应用定义示例:

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:name: my-application
spec:components:- componentName: my-componenttraits:- traitType: scalerproperties:replicas: 3

这个示例定义了一个包含单个组件的应用,并为该组件配置了一个伸缩特性,将副本数设置为3。

通过OAM,开发者和运维人员可以更加方便地定义、部署和管理现代云原生应用,提升了应用的可移植性和管理效率。

三、OAM在DevOps中的应用举例

理解OAM在DevOps中的应用,可以帮助更好地理解如何标准化和管理现代云原生应用。以下是一个更加通用的示例,展示如何在DevOps实践中应用OAM:

场景概述

我们假设一个应用由多个微服务组成,每个微服务作为一个独立的组件部署在Kubernetes集群上。我们希望通过OAM来管理这些微服务的部署、扩展和监控,同时使用CI/CD流水线实现自动化部署。

核心组件

  1. 应用配置(Application Configuration):定义应用的结构和各个组件。
  2. 组件(Component):定义具体的微服务。
  3. 特性(Trait):定义组件的操作或属性,如伸缩、路由、监控等。

示例

1. 定义组件

每个微服务作为一个组件定义,例如,一个简单的Web服务:

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:name: web-service
spec:workload:apiVersion: v1kind: Podmetadata:labels:app: web-servicespec:containers:- name: webimage: nginx:latestports:- containerPort: 80
2. 定义应用配置

将多个组件组合成一个应用,并为每个组件添加特性,例如自动伸缩和监控:

apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:name: my-application
spec:components:- componentName: web-servicetraits:- traitType: scalerproperties:replicas: 3- traitType: monitorproperties:path: /metricsinterval: 30s
3. 集成到CI/CD流水线

在CI/CD流水线中使用OAM定义的应用配置,自动化部署和测试:

stages:- name: Buildsteps:- script: docker build -t my-repo/web-service:latest .- script: docker push my-repo/web-service:latest- name: Deploysteps:- script: kubectl apply -f web-service-component.yaml- script: kubectl apply -f my-application.yaml- name: Teststeps:- script: ./run-tests.sh
4. 自动化运维

使用OAM定义的特性实现自动化运维任务,例如自动伸缩和监控:

apiVersion: core.oam.dev/v1alpha2
kind: Trait
metadata:name: auto-scaler
spec:minReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:averageUtilization: 70

优势

  1. 标准化描述:OAM提供统一的应用描述方法,使得跨环境和跨平台的应用管理更加容易。
  2. 自动化部署:结合CI/CD流水线,实现应用的自动化构建、部署和测试,提高交付速度。
  3. 灵活扩展:通过定义特性,可以方便地扩展和调整应用的行为,如自动伸缩和监控。
  4. 提高可维护性:清晰的组件和特性定义,使得应用的管理和运维更加直观和可维护。

总结

OAM在DevOps中的应用,通过标准化的组件、特性和应用配置定义,实现了应用的自动化管理和跨平台部署。结合CI/CD流水线和自动化运维任务,可以大幅提升应用交付的效率和质量。

四、TekTon 与Kubevela的区别与联系

TekTon和KubeVela是两个不同的工具,虽然它们都用于管理应用程序和工作负载,但它们关注的方面和用途有所不同。以下是它们的区别和联系:

TekTon

概述
  • TekTon 是一个用于构建和运行CI/CD流水线的Kubernetes原生框架。它允许用户定义和运行在Kubernetes上的构建、测试和部署任务。
主要特点
  1. 任务(Tasks)和流水线(Pipelines): TekTon使用任务和流水线来定义和运行自动化工作流程。任务是构建、测试和部署等步骤,流水线是任务的有序集合。
  2. 可扩展性: TekTon可以通过添加自定义任务和流水线资源进行扩展,适应不同的CI/CD需求。
  3. Kubernetes原生: TekTon完全基于Kubernetes设计,可以无缝集成到Kubernetes环境中。
  4. 事件驱动: TekTon可以与触发器(Triggers)结合,实现事件驱动的CI/CD工作流程。
适用场景
  • 构建、测试和部署应用程序。
  • 定义和运行复杂的CI/CD流水线。
  • 自动化软件交付过程。

KubeVela

概述
  • KubeVela 是一个基于Open Application Model(OAM)的现代应用交付平台。它旨在简化在Kubernetes上的应用定义、部署和管理。
主要特点
  1. 应用配置(Application Configuration): 使用OAM标准定义应用的组件、特性和工作流。
  2. 组件(Components): 定义应用的基本构建块,如容器、数据库实例等。
  3. 特性(Traits): 为组件添加操作或属性,如伸缩、路由、监控等。
  4. 工作流(Workflow): 定义应用的部署和管理过程中的一系列步骤。
  5. 跨平台支持: KubeVela可以在不同的云平台和Kubernetes集群上运行,提供统一的应用管理界面。
适用场景
  • 管理和部署复杂的云原生应用。
  • 标准化应用描述,跨环境和跨平台的应用管理。
  • 提供一站式的应用交付和运维平台。

区别

  1. 功能和用途:

    • TekTon:主要用于构建和运行CI/CD流水线,专注于自动化软件构建、测试和部署过程。
    • KubeVela:主要用于定义和管理应用,专注于应用的部署和运行时管理,基于OAM标准。
  2. 核心概念:

    • TekTon:任务、流水线、步骤、触发器。
    • KubeVela:组件、特性、应用配置、工作流。
  3. 集成方式:

    • TekTon:与Kubernetes无缝集成,依赖于Kubernetes的原生资源和API。
    • KubeVela:基于OAM标准,可以与不同的云平台和Kubernetes集成,提供统一的应用交付和管理界面。
  4. 关注点:

    • TekTon:关注CI/CD工作流程的自动化和可扩展性。
    • KubeVela:关注应用的声明性定义、部署和跨平台管理。

联系

  1. Kubernetes原生: 两者都基于Kubernetes,利用Kubernetes的强大功能和生态系统。
  2. 自动化和标准化: TekTon通过任务和流水线实现CI/CD流程的自动化,KubeVela通过OAM实现应用描述和管理的标准化。

示例对比

TekTon示例

定义一个简单的构建和部署流水线:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:name: build-task
spec:steps:- name: buildimage: golangscript: |go build -o /workspace/output/myapp .---
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:name: build-deploy-pipeline
spec:tasks:- name: buildtaskRef:name: build-task- name: deploytaskSpec:steps:- name: deployimage: kubectlscript: |kubectl apply -f /workspace/output/myapp.yaml
KubeVela示例

定义一个包含组件和特性的应用:

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:name: web-service
spec:workload:apiVersion: v1kind: Deploymentspec:replicas: 2template:spec:containers:- name: webimage: nginx:latest---
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:name: my-application
spec:components:- componentName: web-servicetraits:- traitType: scalerproperties:replicas: 3

通过这些示例,可以看到TekTon和KubeVela在定义和管理应用方面的不同方式。TekTon更侧重于构建和部署流水线,而KubeVela更关注应用的结构化定义和管理。

五、TekTon、Jenkins、GitLab CI 的区别与联系

TekTon、Jenkins和GitLab CI都是用于实现持续集成和持续交付(CI/CD)的工具,但它们在设计理念、功能特点和使用场景上有所不同。以下是它们的区别和联系,以及示例说明:

TekTon

概述
  • TekTon 是一个Kubernetes原生的CI/CD框架,允许用户定义和运行在Kubernetes上的构建、测试和部署流水线。
主要特点
  1. Kubernetes原生:完全集成到Kubernetes环境中,利用其资源和调度能力。
  2. 模块化:基于任务(Tasks)和流水线(Pipelines)进行构建,每个任务都是独立的,可以复用和扩展。
  3. 高度扩展性:可以通过CRD(自定义资源定义)进行扩展,适应各种CI/CD需求。
  4. 事件驱动:可以使用触发器(Triggers)来响应事件,启动流水线。
适用场景
  • Kubernetes环境下的CI/CD。
  • 需要高度自定义和扩展的CI/CD工作流。
示例

定义一个简单的构建和部署流水线:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:name: build-task
spec:steps:- name: buildimage: mavenscript: |mvn clean install---
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:name: build-deploy-pipeline
spec:tasks:- name: buildtaskRef:name: build-task- name: deploytaskSpec:steps:- name: deployimage: kubectlscript: |kubectl apply -f deployment.yaml

Jenkins

概述
  • Jenkins 是一个开源的自动化服务器,支持构建、部署和自动化任务。它具有丰富的插件生态系统,几乎可以集成到任何开发工具和工作流程中。
主要特点
  1. 插件丰富:拥有上千个插件,可以集成各种工具和服务。
  2. 灵活性:支持脚本化(Pipeline as Code)和GUI配置流水线。
  3. 跨平台:可以运行在各种操作系统和环境中,不限于Kubernetes。
适用场景
  • 各种CI/CD需求,从简单到复杂的自动化工作流。
  • 不限于Kubernetes的多平台环境。
示例

定义一个简单的Jenkins流水线(Jenkinsfile):

pipeline {agent anystages {stage('Build') {steps {sh 'mvn clean install'}}stage('Deploy') {steps {sh 'kubectl apply -f deployment.yaml'}}}
}

GitLab CI

概述
  • GitLab CI 是集成在GitLab中的CI/CD工具,提供了与GitLab代码库紧密集成的持续集成和持续交付功能。
主要特点
  1. 紧密集成:与GitLab代码库、代码审查、问题跟踪和其他DevOps功能无缝集成。
  2. 易于使用:通过.gitlab-ci.yml文件定义流水线,简单易用。
  3. 内置功能:提供强大的内置功能,如自动化测试、部署、环境管理等。
适用场景
  • 使用GitLab作为代码存储库的团队。
  • 希望通过一个集成平台管理所有DevOps工具和流程。
示例

定义一个简单的GitLab CI流水线(.gitlab-ci.yml):

stages:- build- deploybuild-job:stage: buildscript:- mvn clean installdeploy-job:stage: deployscript:- kubectl apply -f deployment.yaml

区别

  1. 环境依赖:

    • TekTon:依赖Kubernetes,设计为Kubernetes原生。
    • Jenkins:独立于平台,可以运行在各种环境中。
    • GitLab CI:紧密集成在GitLab中,依赖于GitLab平台。
  2. 配置方式:

    • TekTon:通过Kubernetes CRD定义任务和流水线。
    • Jenkins:通过Jenkinsfile(脚本)或GUI配置流水线。
    • GitLab CI:通过.gitlab-ci.yml文件定义流水线。
  3. 扩展性:

    • TekTon:高度模块化和可扩展,通过CRD扩展。
    • Jenkins:通过丰富的插件系统扩展功能。
    • GitLab CI:内置多种功能,扩展性受限于GitLab平台。

联系

  1. CI/CD目标: 三者都旨在实现持续集成和持续交付,自动化构建、测试和部署流程。
  2. 流水线定义: 都使用代码来定义流水线,实现Pipeline as Code的理念。
  3. 支持容器化: 三者都可以与容器和Kubernetes集成,实现容器化应用的CI/CD。

总结

  • TekTon 适用于Kubernetes原生的CI/CD需求,提供高度模块化和可扩展的流水线定义方式。
  • Jenkins 是一个通用的自动化服务器,适用于各种平台和复杂的CI/CD需求,拥有丰富的插件生态系统。
  • GitLab CI 紧密集成在GitLab平台中,适用于使用GitLab进行代码管理的团队,提供简单易用的CI/CD功能。

六、DevOps工具该如何选型

选择合适的 DevOps 工具是确保软件开发和运维高效且可靠的关键步骤。以下是选择 DevOps 工具时需要考虑的因素、步骤和一些建议:

1. 需求分析

1.1. 项目需求

  • 应用类型:Web 应用、微服务、数据分析等。
  • 技术栈:编程语言、框架、数据库等。
  • 环境:本地、私有云、公有云、混合云等。

1.2. 团队需求

  • 团队规模:小型团队、大型团队、跨团队协作等。
  • 技能水平:是否需要易于使用的工具,或者团队是否有能力使用更复杂的工具。

1.3. 流程需求

  • CI/CD:持续集成、持续交付或持续部署的要求。
  • 自动化:自动化测试、自动化构建、自动化部署等。
  • 监控和日志:应用性能监控、日志管理等。

2. 评估工具

2.1. 功能对比

  • 集成能力:与现有系统(如版本控制系统、项目管理工具、监控工具等)的集成能力。
  • 支持的工作流:支持的 CI/CD 流水线、构建、测试、部署和监控功能。
  • 扩展性和插件:是否支持插件和扩展,以适应未来的需求变化。

2.2. 用户体验

  • 易用性:界面友好性、学习曲线、文档支持。
  • 社区支持:社区活跃程度、社区支持和资源。

2.3. 成本

  • 开源 vs 商业:开源工具的成本通常较低,但可能需要更多的自我维护;商业工具可能提供更高的支持和服务,但成本较高。
  • 许可证:工具的许可证类型(如免费、按需付费、订阅制等)。

2.4. 性能和稳定性

  • 可扩展性:工具是否能处理日益增加的工作负载。
  • 稳定性:工具的可靠性和稳定性,是否有过多的错误或问题。

2.5. 安全性

  • 权限管理:是否支持细粒度的权限管理。
  • 数据保护:工具如何处理数据保护和隐私。

3. 常见工具分类与建议

3.1. 持续集成和持续交付(CI/CD)

  • Jenkins:强大的插件生态系统,灵活且可定制。
  • GitLab CI:与 GitLab 紧密集成,易于设置和使用。
  • Tekton:Kubernetes 原生,适合云原生应用。

3.2. 版本控制

  • Git:分布式版本控制系统,广泛使用。
  • Subversion (SVN):集中式版本控制系统,适用于一些旧项目或特定需求。

3.3. 自动化配置和管理

  • Terraform:基础设施即代码,支持多云环境。
  • Ansible:配置管理和自动化,易于使用。

3.4. 容器化和编排

  • Docker:容器化平台,创建和管理容器。
  • Kubernetes:容器编排,管理大规模容器化应用。

3.5. 监控和日志

  • Prometheus:开源监控和告警系统,适用于Kubernetes。
  • Grafana:数据可视化工具,常与 Prometheus 一起使用。
  • ELK Stack:Elasticsearch, Logstash, Kibana,日志管理和分析。

4. 试用和验证

4.1. 实验环境

  • 在测试环境中部署工具,评估其与现有系统的兼容性和功能。

4.2. POC(概念验证)

  • 开展小规模的试点项目,验证工具是否满足实际需求。

4.3. 收集反馈

  • 收集团队成员对工具的反馈,评估其易用性和有效性。

5. 决策和实施

5.1. 制定决策

  • 根据需求分析、工具评估和试用结果,做出最终决策。

5.2. 实施和培训

  • 部署工具并进行必要的培训,确保团队能够有效使用新工具。

5.3. 持续改进

  • 持续监控工具的效果,定期评估和调整工具的使用,适应不断变化的需求。

示例流程

假设你需要选择一个CI/CD工具:

  1. 需求分析

    • 项目需要持续集成和交付功能。
    • 团队规模中等,具备一定的DevOps技能。
    • 当前使用Git进行版本控制。
  2. 工具评估

    • Jenkins:插件丰富,但可能需要较多的维护。
    • GitLab CI:与GitLab集成良好,易于使用。
    • Tekton:Kubernetes原生,适合云原生应用,但需要Kubernetes环境支持。
  3. 试用和验证

    • 在测试环境中部署GitLab CI、Jenkins和Teckton。
    • 对比这几个工具的功能、易用性和集成能力。
  4. 决策和实施

    • 假设选择GitLab CI,因为它与现有的GitLab环境集成良好,易于使用。
    • 实施GitLab CI,并对团队进行培训。

通过这些步骤,你可以系统性地选择适合你的DevOps工具,确保它能有效地支持你的开发和运维流程。

完。
在这里插入图片描述
希望对您有所帮助!关注锅总,及时获得更多花里胡哨的运维实用操作!

七、一个秘密

图片

锅总个人博客

https://gentlewok.blog.csdn.net/

锅总微信公众号

图片

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

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

相关文章

登录功能和校验

基础版 controller package com.web.management.controller;import com.web.management.pojo.Emp; import com.web.management.pojo.Result; import com.web.management.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.anno…

Ignis 应用: 社交 + 游戏 + 工业4.0,Ignis 构建Web3生态圈

引言 在数字经济快速发展的今天,Web3技术为我们带来了前所未有的变革。作为Ardor平台的主要子链,Ignis公链在推动Web3生态系统建设中扮演了重要角色。本文将通过介绍Vessel Chain、Mythical Beings和Bridge Champ等应用,探讨Ignis公链如何通…

html+css+js文章模板

图片 源代码在图片后面&#xff0c;点赞加关注&#xff0c;谢谢&#x1f604; 源代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width,…

停车场车牌识别计费系统,用Python如何实现?

关注星标&#xff0c;每天学习Python新技能 前段时间练习过的一个小项目&#xff0c;今天再看看&#xff0c;记录一下~ 项目结构 说明&#xff1a; datefile文件夹&#xff1a;保存车辆信息表的xlsx文件 file文件夹&#xff1a;保存图片文件夹。ic_launcher.jpg是窗体的右上角…

周下载量20万的npm包---store

https://www.npmjs.com/package/store <script setup> import { onMounted } from vue import store from storeonMounted(() > {store.set(user, { name: xutongbao })let user store.get(user)console.log(user) //对象console.log(localStorage.getItem(user)) //…

CesiumJS【Basic】- #056 绘制纹理填充多边形(Entity方式)-使用shader

文章目录 绘制纹理填充多边形(Entity方式)-使用shader1 目标2 代码2.1 main.ts绘制纹理填充多边形(Entity方式)-使用shader 1 目标 使用Entity方式绘制绘制纹理填充多边形 - 使用shader 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium…

搭建个人博客及错误记录

搭建个人博客及错误记录 文章目录 搭建个人博客及错误记录需要用到的网址2.推荐两个参考教学视频3.发布一篇博客个人主题配置的提醒localhost拒绝连接问题解决办法ssh -T gitgithub.com失败问题解决Deployer not found:git解决 可以根据目录解决遇到的相同问题 需要用到的网址 …

朋友圈运营必备!一键转发和自动转发轻松搞定!

你还在手动发布多个微信号的朋友圈吗&#xff1f; 现在&#xff0c;就教你一招&#xff0c;让你轻松实现一键转发和自动转发朋友圈&#xff01; 首先&#xff0c;我们需要在个微管理系统上登录自己的微信号&#xff0c;以便进行统一管理。这个系统可以多个微信号同时登录&…

项目经验-不同行业、不同风格的网站设计

网站UI设计的首要考虑点是布局与导航。合理的布局能够确保信息清晰呈现&#xff0c;使用户能够快速定位所需内容。同时&#xff0c;简洁明了的导航设计能够引导用户流畅浏览&#xff0c;减少迷失感。通过精心设计的布局和导航&#xff0c;可以提升用户体验&#xff0c;增强用户…

Pointnet++改进即插即用系列:全网首发GLSA聚合和表示全局和局部空间特征|即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入GLSA,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.理论介…

深入剖析Tomcat(十五、十六) 关闭钩子,保证Tomcat的正常关闭

《深入剖析Tomcat》书中第十五章讲解了如何通过配置XML的方式来配置Tomcat的各个组件&#xff0c;并通过Digester库来解析XML。我们常操作的xml文件应该就是 server.xml这个文件&#xff0c;当在一台机器上部署多个Tomcat时&#xff0c;就必须修改连接器和 [“关闭Tomcat”程序…

Spring源码九:BeanFactoryPostProcessor

上一篇Spring源码八&#xff1a;容器扩展一&#xff0c;我们看到ApplicationContext容器通过refresh方法中的prepareBeanFactory方法对BeanFactory扩展的一些功能点&#xff0c;包括对SPEL语句的支持、添加属性编辑器的注册器扩展解决Bean属性只能定义基础变量的问题、以及一些…

Netty 粘包/拆包、解码工具类

1. 概述 1.1 粘包 发送 abc def&#xff0c;接收 abcdef 原因 滑动窗口&#xff1a;假设发送方 256 bytes 表示一个完整报文&#xff0c;但由于接收方处理不及时且窗口大小足够大&#xff0c;这 256 bytes 字节就会缓冲在接收方的滑动窗口中&#xff0c;当滑动窗口中缓冲了…

模拟 ADC 的前端

ADC 的 SPICE 模拟 反复试验的方法将信号发送到 ADC 非常耗时&#xff0c;而且可能有效也可能无效。如果转换器捕获电压信息的关键时刻模拟输入引脚不稳定&#xff0c;则无法获得正确的输出数据。SPICE 模型允许您执行的步是验证所有模拟输入是否稳定&#xff0c;以便没有错误…

尝试修改苍穹外卖为”李小罗餐厅“

学习苍穹外卖后&#xff0c;将其修改为自己所需要的项目&#xff0c;也是对苍穹外卖项目的加深理解 对项目之间的连接等关系进一步清晰&#xff0c;那么便开始吧 d1_开始修改 修改名字为”李小罗餐厅“ src\views\login\index.vue src\router.ts 结果展示 修改进来之后的展示…

上海站圆满结束!MongoDB Developer Day深圳站,周六见!

在过去两个周六的北京和上海 我们见证了两站热情高涨的 MongoDB Developer Day&#xff01; 近200位参会开发者相聚专业盛会 经过全天的动手实操和主题研讨会 MongoDB技能已是Next Level&#xff01; 最后一站Developer Day即将启程 期待本周六与各位在深圳相见&#xff0…

【Docker安装】OpenEuler系统下部署Docker环境

【Docker安装】OpenEuler系统下部署Docker环境 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 检查yum仓库三、卸载Docker四、部署Docker环境4.1 配置yum仓库4.2 检查可用yum仓库4.3 安装Docker4.4 检查Docke…

Python题解Leetcode Hot100之矩阵

1. 矩阵置零 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路 题目要求进行原地更改&#xff0c;也就是不能使用额外的空间&#xff0c;因此我们可以使用第一行的元素来记录对应的…

【LeetCode】十二、递归:斐波那契 + 反转链表

文章目录 1、递归2、leetcode509&#xff1a;斐波那契数列3、leetcode206&#xff1a;反转链表4、leetcode344&#xff1a;反转字符串 1、递归 函数自己调用自己 递归的4个点&#xff1a; 递归的例子&#xff1a;给一个数n&#xff0c;在斐波那契数列中&#xff0c;找到n对应的…

科研与英文学术论文写作指南——于静老师课程

看到了一个特别棒的科研与英文学术论文写作指南&#xff0c;理论框架实例。主讲人是中科院信息工程研究所的于静老师。推荐理由&#xff1a;写论文和读论文或者讲论文是完全不一样的&#xff0c;即使现在还没有发过论文&#xff0c;但是通过于老师的课程&#xff0c;会给后续再…