CRI-O的原理及应用详解(四)

本系列文章简介:

        随着云计算和容器技术的迅猛发展,容器化应用已经成为现代软件开发和部署的重要趋势。在这一领域中,Kubernetes作为容器编排的领军者,为开发者提供了强大的容器管理和调度能力。然而,Kubernetes本身并不直接管理容器,而是依赖于容器运行时(Container Runtime)来执行容器的创建、运行和销毁等操作。

        CRI-O(Container Runtime Interface - OCI)正是这样一个为Kubernetes设计的轻量级容器运行时工具。它遵循OCI(Open Container Initiative)标准,能够与Kubernetes无缝集成,为容器化应用提供高效、稳定且安全的运行环境。

        本系列文章旨在深入剖析CRI-O的原理及应用,帮助大家全面了解这一技术的核心机制和实践方法。我们将从CRI-O的架构与设计入手,详细解析其内部工作原理和关键组件,让大家对其运行流程有一个清晰的认识。同时,我们还将探讨CRI-O的高级特性,如安全隔离、性能优化以及插件扩展等,帮助大家充分利用其优势,提升容器化应用的性能和安全性。

        相信通过本系列文章的学习,您将对CRI-O的原理及应用有一个全面而深入的了解,能够在实践中充分发挥其优势,推动容器化应用的发展和创新。让我们共同携手,迎接容器化技术的美好未来!

        欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

第一章 前言

第二章 CRI-O的最佳实践与案例分析

2.1 CRI-O在生产环境中的部署与运维

2.1.1 部署规划与架构设计

2.1.2 运维管理与故障排除

2.2 CRI-O与其他容器的比较与选择

2.2.1 CRI-O与Docker、containerd等容器的对比

2.2.2 根据需求选择适合的容器运行时

2.3 案例分析

2.3.1 CRI-O在大型分布式系统中的应用案例

2.3.2 CRI-O在微服务架构中的实践分享

第三章 展望与未来趋势

3.1 CRI-O的发展动态与路线图

3.2 容器技术的未来趋势与挑战

3.3 CRI-O在云原生时代的角色与机遇

第四章 结语


第一章 前言

        CRI-O是一个用于运行容器的开源容器运行时项目。它是由Kubernetes社区推动的,旨在提供一个在Kubernetes集群中运行Pod时,符合Open Container Initiative (OCI) 标准的轻量级容器运行时。

        本文将跟随《CRI-O的原理及应用详解(三)》的进度,继续介绍CRI-O。希望通过本系列文章的学习,您将能够更好地理解CRI-O的内部工作原理,掌握CRI-O的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化CRI-O的潜力,为系统的高效运行提供有力保障。

第二章 CRI-O的最佳实践与案例分析

2.1 CRI-O在生产环境中的部署与运维

2.1.1 部署规划与架构设计

在将CRI-O部署到生产环境中并进行运维时,以下是一些部署规划和架构设计的考虑因素:

  1. 硬件和网络规划:确保您的硬件资源(CPU、内存、存储)和网络基础设施能够满足您的应用需求。根据您的预期负载和容器数量,预估所需的计算和存储资源,并规划适当的网络设置,以确保容器之间的通信。

  2. 高可用性:考虑将CRI-O集群部署为高可用的架构,以确保系统的持续可用性。通过在多个节点上部署CRI-O和相关组件,如etcd和Kubernetes控制平面组件,可以实现高可用性。确保有足够的节点来容纳您的容器和应用工作负载,并避免单点故障。

  3. 安全性:确保在部署CRI-O时采取适当的安全措施,以保护您的容器和应用。这包括限制容器的权限和资源访问、控制容器间的网络通信、应用适当的访问控制策略等。使用适当的主机安全措施,如防火墙和安全补丁管理,以保护宿主机和容器环境。

  4. 监控和日志:配置适当的监控和日志记录工具,以监测CRI-O的性能和运行状况。使用工具如Prometheus和Grafana来收集和展示监控数据,以及使用工具如Elasticsearch和Kibana来收集和分析日志数据。这将帮助您及时发现和解决任何问题,并进行容量规划和系统优化。

  5. 更新和升级策略:制定合适的更新和升级策略,以确保CRI-O和相关组件的安全性和稳定性。定期检查和应用最新的安全补丁和更新,同时确保与Kubernetes版本的兼容性。

  6. 应用持久化和备份:考虑如何管理和保护容器中的持久化数据。使用适当的存储解决方案(如网络存储或分布式存储系统),并实施数据备份和恢复策略,以保护重要数据免受意外删除或故障的影响。

  7. 自动化和编排:使用自动化工具和编排框架,如Ansible、Kubernetes Operator或其他运维工具,以简化CRI-O的部署和运维任务。这将帮助您更高效地管理大规模的CRI-O集群,并加快故障排除和系统维护的速度。

这些是在部署和运维CRI-O时需要考虑的一些关键因素。根据您的特定需求和应用场景,可能还需要进一步的定制和优化。


2.1.2 运维管理与故障排除

在生产环境中运维和故障排除CRI-O时,以下是一些建议的运维管理和故障排除实践:

  1. 监控和日志记录:配置适当的监控和日志记录工具,以监测CRI-O的性能和运行状况。使用工具如Prometheus和Grafana来收集和展示监控数据,以及使用工具如Elasticsearch和Kibana来收集和分析日志数据。通过监视关键指标,如容器的CPU、内存和网络使用情况,可以及时检测到异常和性能问题。

  2. 自动化和编排:使用自动化工具和编排框架来简化CRI-O的运维管理任务。例如,使用Ansible或Kubernetes Operator来自动化部署、升级和配置CRI-O集群。通过自动化工作流程,可以减少人工操作的错误,并提高运维效率。

  3. 容器和宿主机监控:除了监控CRI-O本身,还应该监控宿主机和运行在其中的容器。确保监测宿主机的CPU、内存和磁盘使用情况,以及容器的健康状态和资源利用率。这可以帮助您识别容器或宿主机层面的问题,并进行故障排除。

  4. 故障排查和日志分析:在CRI-O中发生故障时,分析相关日志以定位问题所在。查看CRI-O的日志文件,如crio.log和crio-kube.log,以及Kubernetes的事件日志。这些日志将为您提供关于容器创建、删除、状态变更等方面的有用信息,帮助您快速定位问题。

  5. 网络故障排查:如果遇到与容器网络相关的问题,如容器无法访问外部网络或容器之间的网络通信失败,可以使用工具如tcpdump和Wireshark来捕获网络流量,并分析网络包的流向和内容。这将有助于找出网络故障的原因,如DNS问题、网络策略配置错误等。

  6. 性能调优:如果CRI-O性能出现问题,如容器创建或启动缓慢、资源利用率高等,可以进行性能调优。检查宿主机的资源利用率,并确保CRI-O和容器的配置符合最佳实践。根据情况考虑调整CRI-O的配置参数,如容器内存限制、CPU配额等,以优化性能。

  7. 安全和补丁管理:定期检查并应用CRI-O和相关组件的安全补丁和更新。保持CRI-O和宿主机的操作系统和软件更新,以及其他安全措施,如防火墙和访问控制策略。

  8. 容器故障恢复和备份:制定容器的故障恢复和备份策略,以确保在发生故障时能够快速恢复并保护重要数据。考虑使用容器编排工具和容器镜像仓库来自动化容器的故障恢复和备份过程。

  9. 及时响应和紧急情况处理:在发生重要故障或安全事件时,确保有相应的响应计划和紧急情况处理流程。培训和准备团队成员,以快速响应和解决问题,最大限度地减少影响和停机时间。

以上是一些常见的CRI-O运维管理和故障排除实践。记住,最重要的是保持关注和更新相关技术和最佳实践,以确保您的CRI-O环境的稳定性和安全性。


2.2 CRI-O与其他容器的比较与选择

2.2.1 CRI-O与Docker、containerd等容器的对比

CRI-O、Docker和containerd都是常见的容器运行时,但它们在一些关键方面有所不同。以下是CRI-O与Docker和containerd之间的几个比较:

  1. 架构和目标:

    • CRI-O是专门为Kubernetes设计的,它遵循Kubernetes Container Runtime Interface (CRI)规范,旨在提供一个轻量级的、高度集成的容器运行时,以满足Kubernetes对容器管理的需求。
    • Docker是一个完整的容器解决方案,它提供了一个集成的容器引擎、镜像构建和分发工具、容器编排工具等;
    • containerd是一个轻量级的容器运行时,它是Docker的底层组件之一,旨在提供对容器生命周期管理的基本支持。
  2. 功能和特性:

    • CRI-O专注于提供Kubernetes所需的核心容器功能,如容器的创建、启动、停止、销毁等。它与Kubernetes集成紧密,并且可以与Kubernetes组件无缝配合工作。
    • Docker提供了更多的功能和工具,如Docker镜像构建、分发和版本管理,容器编排工具,网络和存储管理等。它还提供了用于构建和运行容器的命令行工具。
    • containerd提供了对容器生命周期管理的基本支持,如容器的创建、启动、停止和销毁等。它设计简单、轻量,更适合作为底层组件与其他工具和平台集成。
  3. 安全性和隔离性:

    • CRI-O和containerd都专注于提供高度安全和隔离的容器运行环境,符合Kubernetes的安全要求。它们使用Linux的命名空间和控制组等机制,实现对容器的隔离。
    • Docker也提供了一定程度的安全和隔离性,但它在默认配置下可能会提供更宽松的隔离。然而,Docker也提供了额外的安全功能,如容器镜像签名和安全扫描等。
  4. 社区和生态系统:

    • Docker拥有庞大的社区和生态系统,有大量的第三方工具和插件可供使用。它也有广泛的应用和库。由于其广泛的应用,Docker通常被认为是更成熟和稳定的容器解决方案。
    • CRI-O和containerd的社区相对较小,但它们正在快速成长,并在Kubernetes社区中得到广泛支持。

需要根据具体的使用场景和需求选择适合的容器运行时。如果您使用Kubernetes作为容器编排平台,并希望紧密集成和与Kubernetes组件无缝配合工作,那么CRI-O是一个很好的选择。如果您需要一个更全面的容器解决方案,并希望更广泛的社区支持和生态系统,那么Docker可能更适合。而如果您只需要一个简单、轻量且可靠的容器运行时,那么containerd是一个不错的选择。


2.2.2 根据需求选择适合的容器运行时

选择适合的容器运行时取决于您的具体需求和使用场景。以下是CRI-O与其他常见容器运行时(如Docker、containerd)之间的比较,以帮助您做出选择:

  1. Kubernetes集成:如果您正在使用Kubernetes作为容器编排平台,那么CRI-O是一个很好的选择。它专门为Kubernetes设计,紧密遵循Kubernetes CRI规范,并且与Kubernetes组件无缝集成。

  2. 功能和特性:如果您需要更多的功能和工具,如镜像构建、分发、版本管理、容器编排等,那么Docker可能更适合。Docker是一个完整的容器解决方案,具有强大的生态系统和广泛的支持。

  3. 轻量级和简单性:如果您只需要一个简单、轻量级的容器运行时,那么CRI-O和containerd都是很好的选择。它们都是专注于提供核心容器功能的轻量级运行时,设计简单、易于部署和管理。

  4. 安全性和隔离性:如果您对安全性和隔离性有特别的要求,CRI-O、containerd和Docker都提供了一定程度的安全和隔离性。它们使用Linux的命名空间和控制组等机制来实现容器的隔离。然而,CRI-O和containerd在默认配置下可能提供更严格的隔离。

  5. 社区和生态系统:Docker拥有庞大的社区和生态系统,有大量的第三方工具和插件可供使用。CRI-O和containerd的社区相对较小,但它们在快速成长,并且在Kubernetes社区中得到广泛的支持。

        选择适合的容器运行时应该考虑到您的实际需求、使用场景和优先级。如果您使用Kubernetes作为容器编排平台,并希望紧密集成和与Kubernetes组件无缝配合工作,那么CRI-O是一个很好的选择。如果您需要更多的功能和工具,并且对广泛的生态系统和社区支持有需求,那么Docker可能更适合。而如果您只需要一个简单、轻量且可靠的容器运行时,那么containerd是一个不错的选择。


2.3 案例分析

2.3.1 CRI-O在大型分布式系统中的应用案例

CRI-O在大型分布式系统中有很多应用案例。以下是一些常见的应用案例:

  1. 云原生应用:CRI-O是Kubernetes的官方容器运行时,因此在大规模的云原生应用中广泛使用。CRI-O与Kubernetes紧密集成,在大型分布式系统中提供高可靠性和弹性,能够有效管理和调度数千个容器。

  2. 容器编排:CRI-O可以用作容器编排工具,如Kubernetes、OpenShift等的底层容器运行时。它提供了对容器的管理和调度功能,可处理大规模的容器集群,实现自动扩缩容、负载均衡等容器编排功能。

  3. 高性能计算:CRI-O在大型分布式系统中也被用于高性能计算任务。它能够快速启动和销毁容器,有效管理计算资源,并支持容器间的网络互通,为高性能计算任务提供可扩展性和性能优化。

  4. 多租户环境:CRI-O支持多租户环境,在大型分布式系统中可以实现容器的隔离和安全性。它使用Linux的命名空间和控制组等机制实现容器间的隔离,可以为每个租户提供独立的容器运行环境。

  5. 安全敏感应用:CRI-O在大型分布式系统中能够满足安全敏感应用的需求。它提供了更严格的容器隔离和安全性,默认使用严格的SELinux策略,可以防止容器间的资源泄漏和攻击,保护系统和数据的安全。

总之,CRI-O在大型分布式系统中具有广泛的应用案例,特别是在云原生应用、容器编排、高性能计算、多租户环境和安全敏感应用等方面。它能够提供高可靠性、弹性和安全性,满足大规模分布式系统的需求。


2.3.2 CRI-O在微服务架构中的实践分享

CRI-O在微服务架构中的实践可以带来很多好处。以下是一些实践分享:

  1. 快速启动和销毁容器:微服务通常需要快速启动和销毁容器来适应不断变化的需求。CRI-O是一个轻量级的容器运行时,能够快速启动和销毁容器,减少了部署时间和资源消耗。

  2. 容器隔离和资源管理:微服务架构中可能有大量的容器同时运行,而且这些容器之间需要相互隔离。CRI-O使用Linux的命名空间和控制组等机制,提供了容器间的隔离和资源管理,确保每个微服务的资源使用不会相互干扰。

  3. 弹性和可扩展性:微服务架构需要具备弹性和可扩展性,以应对流量的变化和负载的增加。CRI-O可以与容器编排工具(如Kubernetes)紧密集成,实现自动扩缩容和负载均衡等功能,使微服务能够根据需要动态调整。

  4. 系统稳定性和容错性:微服务架构中,一个容器的故障不应该影响到整个系统。CRI-O可以在容器出现故障时自动重启容器,保证系统的稳定性和容错性。

  5. 安全性:微服务涉及到的数据和服务往往是敏感的。CRI-O提供了严格的容器隔离和安全性控制,可以设置严格的SELinux策略,防止容器间的资源泄漏和攻击,保护系统和数据的安全。

总结起来,CRI-O在微服务架构中的实践可以带来快速启动和销毁容器、容器隔离和资源管理、弹性和可扩展性、系统稳定性和容错性以及安全性等好处。它可以有效支持微服务架构的需求,提高系统的灵活性、可靠性和安全性。

第三章 展望与未来趋势

3.1 CRI-O的发展动态与路线图

CRI-O项目是一个以容器运行时为核心的开源项目,因此其发展动态和路线图与容器生态系统的发展密切相关。以下是CRI-O项目的一些发展动态和未来的路线图:

  1. 社区发展:CRI-O项目是一个开放的社区项目,吸引了来自全球范围的开发者和用户。社区的发展活跃度对于项目的成长至关重要,因此CRI-O社区致力于扩大其社区成员和贡献者的数量,通过增加开发者和用户的参与来推动项目的进一步发展。

  2. 容器标准的支持:CRI-O致力于遵循和支持容器标准。CRI-O基于Kubernetes的Container Runtime Interface(CRI)标准进行开发,确保与Kubernetes的紧密集成和互操作性。未来,CRI-O项目将继续支持和遵循容器标准的发展,以满足不断变化的容器生态系统需求。

  3. 性能和扩展性改进:CRI-O项目不断致力于提高容器运行时的性能和扩展性。项目将继续进行优化和改进,以提高容器的启动时间、资源利用率和可扩展性。同时,CRI-O还将与Kubernetes等容器编排工具更加紧密地集成,以提供更强大和稳定的容器管理能力。

  4. 安全性增强:安全性是CRI-O项目重要的关注点之一。项目将继续加强容器的隔离性和安全性控制,以提供更可靠的容器运行环境。CRI-O还将与其他容器安全工具和技术进行集成,以提供全面的容器安全解决方案。

  5. 新功能和创新:CRI-O项目将继续引入新的功能和创新,以满足不断变化的容器技术需求。这包括对新的容器特性的支持、新的容器网络和存储解决方案的集成等。CRI-O还将关注容器生态系统中其他关键技术的发展,并在必要时进行集成和支持。

总之,CRI-O项目的发展动态和路线图主要集中在社区发展、容器标准的支持、性能和扩展性改进、安全性增强以及新功能和创新等方面。通过持续的改进和创新,CRI-O将继续提供强大、稳定和安全的容器运行时环境,满足不断发展的容器技术需求。


3.2 容器技术的未来趋势与挑战

容器技术作为一种轻量级、可移植和可扩展的应用部署解决方案,已经在云计算和软件开发等领域取得了巨大成功。然而,容器技术面临着一些未来趋势和挑战,包括:

  1. 边缘计算和物联网:随着边缘计算和物联网的快速发展,容器技术将面临更多的需求和挑战。在边缘设备上部署容器化应用可以提供更快的响应时间和更好的用户体验,但同时也需要解决资源受限和网络延迟等问题。

  2. 混合云和多云环境:企业越来越倾向于采用混合云和多云战略,将应用部署在多个云平台上。容器技术在实现应用的可移植性和跨云平台部署方面具有优势,但管理和监控多个云平台上的容器化应用仍然是一个挑战。

  3. 安全性和隔离性:容器技术的安全性和隔离性一直都是关注的焦点。随着容器环境的复杂性增加和容器攻击的风险增加,建立强大的容器安全机制变得更加重要。容器运行时和容器管理平台需要不断改进和创新,以提供更强大的安全性和隔离性。

  4. 自动化和管理:容器技术的快速发展带来了大规模容器集群的管理和自动化的需求。容器编排工具如Kubernetes提供了强大的容器编排和自动化管理能力,但仍然需要解决容器网络、存储和监控等方面的挑战,以实现更高级别的自动化和管理。

  5. 应用开发和迁移:容器技术对应用开发和迁移带来了巨大的变革。未来,容器技术将继续推动应用开发的变革,如微服务架构和云原生应用开发模式。同时,容器化应用的迁移和管理仍然是一个挑战,特别是在传统应用和遗留系统的迁移方面。

总结来说,容器技术的未来趋势将围绕边缘计算、混合云、安全性、自动化和应用开发等方面展开。随着技术的不断发展和创新,我们可以期待容器技术进一步提升应用部署和管理的便利性、安全性和可靠性。然而,面对不断变化的需求和挑战,容器技术生态系统需要持续改进和创新,以满足用户和企业的需求。


3.3 CRI-O在云原生时代的角色与机遇

在云原生时代,CRI-O作为一个专注于容器运行时的项目,发挥着重要的角色并获得了机遇。以下是CRI-O在云原生时代的角色和机遇:

  1. 轻量级容器运行时:CRI-O专注于提供轻量级、高性能的容器运行时环境。在云原生时代,应用部署和管理的需求越来越多样化和复杂化,CRI-O的轻量级特性使得它成为云端和边缘环境中容器化应用的理想选择。

  2. 与Kubernetes的协同:CRI-O是Kubernetes的默认容器运行时接口(CRI)实现之一。通过与Kubernetes的协同工作,CRI-O能够与Kubernetes无缝集成,为在云原生环境中运行的应用提供高度可靠的容器运行时支持。

  3. 容器安全和隔离性:在云原生时代,容器安全和隔离性是关键的考虑因素。CRI-O通过实现容器运行时规范和严格控制容器的操作权限,提供了更高级别的容器安全和隔离性。这为云原生应用的安全性提供了重要的保障。

  4. 开放源代码社区参与和贡献:CRI-O是开放源代码项目,吸引了许多开发者和用户的参与和贡献。通过参与CRI-O社区,用户可以影响和推动CRI-O的发展,从而满足他们在云原生时代的需求。

  5. 云原生生态系统的机遇:云原生时代的兴起催生了一个庞大而复杂的云原生生态系统。CRI-O作为云原生环境中的重要组成部分,有机会与其他技术和项目进行集成和协同工作,共同推动云原生的发展。

总之,CRI-O在云原生时代中扮演着重要的角色。通过提供轻量级容器运行时、与Kubernetes的紧密集成、容器安全和隔离性等特性,CRI-O为云原生应用的部署和管理提供了机遇和支持。在不断发展的云原生生态系统中,CRI-O有机会通过参与开放源代码社区,推动云原生的创新和发展。

第四章 结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

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

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

相关文章

Unity LensFlare 入门

概述 在项目的制作过程中,太阳光的使用一定是不可缺少的部分,但是如果想实现真实太阳光眼睛看到的镜头炫光效果,那这部分的内容一定不要错过喔,接下来让我们来学习这部分的内容吧! Hale(光环效果) Color:…

TiDB中的PD--元数据管理和调度中心

目录 PD 架构etcd 的使用TiDB 的 PD(Placement Driver)组件是整个分布式数据库系统的关键部分, 是整个集群的元数据管理和调度中心,负责存储集群的元数据和进行 Region 调度。 主要包括: 元数据存储:PD 存储了整个 TiDB 集群的元数据,包括 TiKV 集群的拓扑结构、Namespa…

Vue在/public目录下访问process.env.NODE_ENV(其它通用)

总所周知,/public目录下的js文件是不会经过webpack处理的. 所以process.env.NODE_ENV 也无效.无法判断,当要根据这个去判断的时候就麻烦了. 但有个办法可以解决这个问题. 先安装 npm install --save-dev cross-env 就是在index.html里面去赋值到window变量中,如下 在 /pu…

操作系统:线程

目录 前言: 1.线程 1.1.初识线程 1.2.“轻量化”进程 1.3.线程与进程 2.线程控制 2.1.pthread原生线程库 2.2.线程控制的接口 2.2.1.线程创建 2.2.线程退出|线程等待|线程分离|线程取消 2.3.pthread库的原理 2.4.语言和pthread库的关系 2.5.线程局部…

数据可视化宝典:Matplotlib图形实战

在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotl…

Linux之sed命令(包含MacOS使用方法)

Linux之sed命令 一、概述二、用法1、文件末尾追加一行2、指定行后新增一行3、指定行前新增一行4、修改指定行5、删除指定行 一、概述 Linux下的sed命令是一种流编辑器,用于在命令行中对文本进行处理,常见的操作如:添加、修改、删除、追加等。…

模型智能体开发之metagpt-单智能体实践

需求分析 根据诉求完成函数代码的编写,并实现测试case,输出代码 代码实现 定义写代码的action action是动作的逻辑抽象,通过将预设的prompt传入llm,来获取输出,并对输出进行格式化 具体的实现如下 定义prompt模版 …

前端开发中可能出现内存泄漏的情况总结

前端开发中可能出现内存泄漏的情况主要包括以下几种: 1. 闭包引起的循环引用 当一个函数内部引用了外部作用域的变量,并且该函数的作用域链没有被适时断开,就可能形成循环引用。特别是当DOM元素的事件处理函数使用闭包访问外部变量时&#…

Oracle故障处理:正在使用的索引失效了

项目场景 昨日,五一放假前一天,项目现场有同事反应业务系统出了问题: 在数据库中用测试数据发现insert、update 等操作不可用。 在应用系统的输出日志中发现数据库抛出了如下异常: ORA-01502:索引 ‘XX.PK_IXXX’ 或这类索引的…

神经网络与深度学习--网络优化与正则化

文章目录 前言一、网络优化1.1网络结构多样性1.2高维变量的非凸优化1.鞍点2.平坦最小值3.局部最小解的等价性 1.3.改善方法 二、优化算法2.1小批量梯度下降法(Min-Batch)2.2批量大小选择2.3学习率调整1.学习率衰减(学习率退火)分段…

Android数据恢复软件快速比较:Android数据恢复的7最佳工具

您在 Android 设备上保留哪些类型的数据?如果您和大多数人一样,那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长,我们愿意打赌您拥有Android数据丢失的第一手经验。 幸运的是,我们也…

打破失联困境:门店如何利用AI智能名片B2B2C商城小程序重构与消费者的紧密连接?

在如今这个消费者行为日益碎片化的时代,门店经营者们时常感叹:消费者进店如同一场不期而遇的缘分,然而一旦离开门店,就仿佛消失在茫茫人海中,难以再觅其踪迹。这种“进店靠缘分,离店就失联”的困境&#xf…

Cisco IOS XE Web UI 权限提升漏洞复现(CVE-2023-20198)

0x01 产品简介 Web UI 是一种基于GUI的嵌入式系统管理工具,能够提供系统配置、简化系统部署和可管理性以及增强用户体验。它带有默认映像,因此无需在系统上启用任何内容或安装任何许可证。Web UI 可用于构建配置以及监控系统和排除系统故障,而无需CLI专业知识。 0x02 漏洞…

Codeforces Round 941 (Div. 2) D. Missing Subsequence Sum

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习三

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

【刷爆力扣之二叉树】107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II 这道题要求进行自底向上的层序遍历&#xff0c;可以先使用正序层序遍历的方式对树进行遍历&#xff0c;然后将每一层的遍历结果放入一个栈数据结构中&#xff0c;等遍历完成后&#xff0c;将栈数据结构中的每一层的节点再弹出加入到结果集合&#xf…

java-spring-mvc(服务端接收客户端传参)

目录 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 ✨ 声明参数接收 ✨声明pojo类来接收 &#x1f52a;小试牛刀 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 HttpServletRequest是Java Servlet规范中定义的一个接口&#xff0c;它提供了与HTTP请求…

JVM对象锁的升级过程

在Java中&#xff0c;锁升级是一个动态过程&#xff0c;JVM根据运行时的线程竞争情况自动调整锁的状态。这个过程涵盖从偏向锁到轻量级锁&#xff0c;最后可能升级到重量级锁。下面详细解释每个步骤以及它们之间的转换机制。 1. 偏向锁 偏向锁是一种针对单线程执行代码块的优…

解决Redis的键值前出现类似\xAC\xED\x00\x05t\x00*这样的字符序列

文章目录 1.问题2.解决方法3.StringRedisTemplate和RedisTemplate的区别 1.问题 在使用RedisTemplate对Redis进行操作时,发现Reids键值对前有\xAC\xED\x00\x05t\x00*这样的字符序列 如图所示: 虽说不影响使用,但是听影响观感的 2.解决方法 查找了很多方法,可以指定RedisTem…

用户中心(下)

文章目录 计划登录逻辑接口简单说明cookie和session写代码流程后端逻辑层控制层测试用户管理接口 前端简化代码对接后端代理 计划 开发完成后端登录功能 &#xff08;单机登录 > 后续改造为分布式 / 第三方登录&#xff09;✔开发后端用户的管理接口 &#xff08;用户的查询…