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

基于k8s系统的API网关-kong网关

1. 为什么需要 API 网关

        API网关是一个服务器,是系统的唯一入口。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。网关也是提供REST/HTTP的访问API。

        在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要在每个服务中单独实现,这使得系统维护者没有一个全局的视图来统一管理这些功能。API 网关致力于解决的问题便是为微服务纳管这些通用的功能,在此基础上提高系统的可扩展性。微服务搭配上 API 网关,可以使得服务本身更专注于自己的领域,很好地对服务调用者和服务提供者做了隔离。

        目前,比较流行的网关有:Nginx 、 Kong 、Orange等,还有微服务网关Zuul 、Spring Cloud Gateway等。对于 API Gateway,常见的选型有基于 Openresty 的 Kong、基于 Go 的 Tyk 和基于 Java 的 gateway,这三个选型本身没有什么明显的区别,主要还是看技术栈是否能满足快速应用和二次开发。

2. kong 网关简介

        Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong主要有三个组件:

  • Kong Server :基于nginx的服务器,用来接收API请求。
  • Apache Cassandra/PostgreSQL :用来存储操作数据。
  • Kong dashboard:官方推荐UI管理工具,也可以使用 restfull 方式 管理admin api。

        Kong采用插件机制进行功能定制,插件集(可以是0或n个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及nginx监控。

        Kong作为微服务的请求的网关,能通过插件提供负载均衡、日志记录、鉴权、限流、转换以及其他等功能。相对与旧的、没有使用网关的方式,Kong 把这些通用功能中心化,让微服务更加专注于业务本身。

 Kong 官网:The API Platform Powering the API World | Kong Inc. 插件介绍,帮助文档等。

Kong 源码:GitHub - Kong/kong: 🦍 The Cloud-Native API Gateway and AI Gateway.

Kong UI管理工具:GitHub - PGBI/kong-dashboard: Dashboard for managing Kong gateway 浏览器UI管理工具

Kong 桌面管理工具:GitHub - getprimate/primate: A modern dashboard for Kong Gateway admins 有linux版本,windows版本,mac版本。

 3. kong 架构

  1. 管理 API:通过 RESTful API 管理 Kong;能自动化集成;提供了API/API消费者/插件的管理;
  2. 插件:使用 Lua 脚本创建 Plugins;实现强力的定制化;与第三方服务集成;
  3. 集群和数据存储:数据存储可选择 PostgreSQL 或 Cassandra;能从单节点扩展为集群;使用内存缓存提高性能;
  4. OpenResty:拦截请求/响应生命周期;基于 NGINX 扩展;实现了请求/响应的Lua处理化;
  5. NGINX:验证过的高性能基础组件;HTTP 和反向代理服务器;处理底层操作;

         Kong集群中的节点通过gossip协议自动发现其他节点,当通过一个Kong节点的管理API进行一些变更时也会通知其他节点。每个Kong节点的配置信息是会缓存的,如插件,那么当在某一个Kong节点修改了插件配置时,需要通知其他节点配置的变更。

 4. Kong 的主要功能和特点

1、高性能和可扩展性

Kong 以其极高的性能著称,能够轻松处理每秒数万次请求,同时支持横向扩展,以适应业务增长。

2、插件化架构

Kong 提供了丰富的插件生态系统,支持开箱即用的功能扩展,如身份认证、流量控制、日志记录和分析等。开发者也可以根据需求开发自定义插件。

3、支持多种协议

Kong 支持 HTTP、HTTPS、gRPC 和 WebSocket 等多种协议,能够适配各种现代应用的通信需求。

4、多租户管理

Kong 支持多租户环境,可以为不同团队、应用或客户提供隔离的 API 管理能力。

5、强大的安全机制

内置的安全功能支持多种身份认证方式(如 OAuth2.0、JWT、API Key 等),同时可以与外部身份提供商集成。

6、容器和云原生支持

Kong 与容器化和云原生技术无缝集成,能够运行在 Kubernetes、Docker 等环境中,方便快速部署和扩展。

7、多语言支持

Kong 的插件使用 Lua 编写,但其 API 是语言无关的,任何语言的应用都可以轻松与 Kong 集成。

8、社区与企业支持

Kong 提供开源社区版(Kong Gateway)和付费的企业版(Kong Enterprise),以满足不同规模企业的需求。

5. Kong Gateway 的工作原理

        Kong 的核心是基于 Nginx 和 OpenResty 构建的高性能代理服务器。它的主要职责是接收客户端的 API 请求,将这些请求根据配置路由到后端服务,同时执行一系列预定义的功能(如认证、限流、日志记录等)。Kong 的运行可以划分为三个主要阶段:

  1. 接收请求:客户端发送请求到 Kong 网关,Kong 根据请求的 URL、方法和头信息来匹配配置的服务和路由。
  2. 执行插件:匹配成功后,Kong 会在请求和响应的生命周期中执行相关插件(如身份验证、速率限制等)。
  3. 转发请求:经过处理后,Kong 将请求转发到后端服务,并将响应返回给客户端。

这种模块化的设计使得 Kong 非常灵活,可轻松扩展功能并适应复杂的业务需求。

6. Kong 核心概念

名称

描述

Service

对应位于 Kong 后方的自身的 Upstream API 或微服务。

Route

Kong 的入口点,定义了如何把请求发送到特定 Service 的规则。一个 Service 可以有多个Route

Plugin

插件提供了模块化系统,用来修改或控制 Kong。插件提供了大量功能,比如访问控制、缓存、限流、日志记录等。

Consumer

消费者,表示使用 API 的用户,能用来对用户进行访问控制、跟踪等。

Upstream

上游对象表示虚拟主机名,可用于在多个服务(目标)上对传入请求进行负载平衡。例如,一个名为service.v1的上游。使用upstream_url=https://service.v1.xyz/some/path创建API对象。对该API的请求将被代理到上游中定义的目标。

 7. Kong 网关请求流程

 当Kong运行时,每个对API的请求将先被Kong命中,然后这个请求将会被代理转发到最终的API接口。在请求(Requests)和响应(Responses)之间,Kong将会执行已经事先安装和配置好的任何插件,授权您的API访问操作。Kong是每个API请求的入口点(Endpoint)。

8. 基于 k8s 部署 kong

8.1. 环境

服务

版本

kong

3.10

postgresql

13

K8s

v1.30.7

8.2. 部署 

  1. 给节点打标签:kong-gateway=true,设置节点调度、容器组反亲和
  2. 命名空间:kong
  3. host 网络模式
  4. 环境资源有限,只部署一个实例

参考:Overview - Kong Gateway | Kong Docs

[root@master ~]# kubectl get deploy,pods -n kong -o wide
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS     IMAGES                   SELECTOR
deployment.apps/kong-gateway   1/1     1            1           2d    kong-gateway   kong/kong-gateway:3.10   app=kong-gateway,instance=kong-gatewayNAME                                READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
pod/kong-gateway-849cc5ff89-2nkg2   1/1     Running   0          177m   192.168.100.10   master   <none>           <none>

8.3. 默认端口及描述

  • 8000: 用来接收来自客户端的 HTTP 流量的请求,并转发到上游服务
  • 8443: 用来接收来自客户端的 HTTPS 流量的请求,并转发到上游服务
  • 8001: 用来接收访问 Admin API 的 HTTP 流量的请求
  • 8444: 用来接收访问 Admin API 的 HTTPS 流量的请求
  • 8002: 用来接收访问 Admin Manager gui 的 HTTP 流量的请求
  • 8445: 用来接收访问 Admin Manager gui 的 HTTPS 流量的请求
  • 8100:健康检测

9. GUI 管理工具

管理 Kong 可以直接使用 Admin API,当然也有基于 Admin API 实现 GUI 管理工具。

Kong 官方提供了 GUI 管理工具,Kong Manager。

默认访问:http://IP:8002

      containers:- env:- name: KONG_ADMIN_GUI_URLvalue: 'http://192.168.100.10:8002'- name: KONG_ADMIN_GUI_PATHvalue: /

10. GUI 工具 使用示例

需求:

  1. 在 k8s 当中 default 空间以 deployment 部署双实例服务
  2. 在 kong 网关进行相关配置,域名:nginx.kvip.top
  3. 绑定 host 进行测试
#  服务信息如下
[root@master ~]# kubectl get deploy,pods,svc
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-app   2/2     2            2           10m53sNAME                             READY   STATUS    RESTARTS   AGE
pod/nginx-app-86bb9cfcbc-dbsld   1/1     Running   0          10m7s
pod/nginx-app-86bb9cfcbc-p8sc5   1/1     Running   0          10m5sNAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/nginx        ClusterIP   10.105.145.42   <none>        8081/TCP   8m# 测试
[root@master ~]# curl 10.105.145.42:8081
'''主机名称:nginx-app-86bb9cfcbc-p8sc5</br>
'''

10.1. 配置证书

Certificates -> + New certificate

 

10.2. 配置 SNIs

上一步配置证书时,已设置 SNIs,这里会自动创建;SNIs 是与路由进行证书绑定。

10.3. 创建 services 

 10.4. 创建 route

10.5. 绑定 host 测试 

在 host 文件添加:192.168.100.10 nginx.kvip.top

 

 

11. 通过 api 接口进行配置

需求:

  1. 在 k8s 当中 pro 空间以 deployment 部署双实例服务
  2. 在 kong 网关进行相关配置,域名:py.aivp.top
  3. 绑定 host 进行测试
[root@master ~]# kubectl get deployment,pods,svc -n pro
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/py-app   2/2     2            2           2d21hNAME                          READY   STATUS    RESTARTS   AGE
pod/py-app-59d6f5db66-pgr5g   1/1     Running   0          2d21h
pod/py-app-59d6f5db66-zpr7s   1/1     Running   0          2d21hNAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/py-app   ClusterIP   10.108.163.217   <none>        8085/TCP   2d21h[root@master ~]# curl http://10.108.163.217:8085/info | jq
{"hostname": "py-app-59d6f5db66-zpr7s","ipaddress": "10.244.219.97","time": "2025-04-30 14:14:50","traceId": "20250430.141450.10.244.219.97.1001.00013","version": "v1"
}

11.1. 配置证书

curl -X POST -H 'content-type:application/json' http://192.168.100.10:8001/default/certificates -d '{"cert": "-----BEGIN CERTIFICATE-----\nMIIEP7dLc0G6QH8SKVDC/DYcFLJqwWwpMwenB/ycbWm\n-----END CERTIFICATE-----","key": "-----BEGIN RSA PRIVATE KEY-----\nMIy50Cin690L3dge9Qrw0ceo\n-----END RSA PRIVATE KEY-----","cert_alt": null,"key_alt": null,"snis": ["*.aivp.top"],"tags": ["aivp.top"]
}'

11.2. 配置 SNIs

上一步配置证书时,已设置 SNIs,这里会自动创建;SNIs 是与路由进行证书绑定。

curl -X POST -H 'content-type:application/json' htt路由p://192.168.100.10:8001/default/snis -d '{"name": "","tags": [],"certificate": {"id": ""}
}'

11.3. 创建 services 

curl -X POST -H 'content-type:application/json' http://192.168.100.10:8001/default/services -d '{"name": "py-app","tags": ["py-app"],"protocol": "http","path": "/","read_timeout": 60000,"retries": 5,"host": "py-app.pro.svc.cluster.local","connect_timeout": 60000,"ca_certificates": null,"client_certificate": null,"write_timeout": 60000,"port": 8085
}'

 

11.4. 创建 route

curl -X POST -H 'content-type:application/json' http://192.168.100.10:8001/default/services/d591e663-93ec-47de-a6db-b256fc591f6e/routes -d '{"name": "route-py-app","protocols": ["http","https"],"https_redirect_status_code": 426,"strip_path": true,"preserve_host": false,"request_buffering": true,"response_buffering": true,"tags": ["route-py-app"],"service": {"id": "d591e663-93ec-47de-a6db-b256fc591f6e"},"methods": null,"hosts": ["py.aivp.top"],"paths": ["/"],"headers": null,"regex_priority": 0,"path_handling": "v0","sources": null,"destinations": null,"snis": ["*.aivp.top"]
}'

11.5. 绑定 host 测试

在 host 文件添加:192.168.100.10 py.aivp.top

 

相关文章:

基于k8s系统的API网关-kong网关

1. 为什么需要 API 网关 API网关是一个服务器&#xff0c;是系统的唯一入口。API网关封装了系统内部架构&#xff0c;为每个客户端提供一个定制的API。它可能还具有其它职责&#xff0c;如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点…...

8.2 GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析

GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析 GitHub Sentinel 高级功能实现:PDF 报告生成技术详解 关键词:PDF 报告生成, ReportLab 实战, 结构化数据转换, 容器化字体配置, 企业级报告模板 1. 需求分析与技术选型 PDF 报告生成需要满足以下技术要求…...

一周学会Pandas2 Python数据处理与分析-Pandas2复杂数据查询操作

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学了.loc[]等几个简单的数据筛选操作&#xff0c;但实际业务需求往 往需要按照一定的条件甚至复杂的组合条件…...

四年级数学知识边界总结思考-下册

目录 一、背景二、过程1.四则运算小学四年级课本下册《四则运算》知识点、由来、作用与意义解析**一、核心知识点****二、历史由来****三、作用与意义****四、总结** 2.运算律小学四年级课本下《运算律》知识点、由来、作用与意义解析**一、核心知识点****二、历史由来****三、…...

Git从入门到精通-第四章-更新仓库

目录 检查当前文件状态 追踪新文件 暂存已修改的文件&#xff08;git add作用总结&#xff09; 简化输出状态 忽略文件 查看已暂存和未暂存的修改 git diff 提交更新 git commit 跳过使用暂存区 前言&#xff1a;在工作区和Git仓库间设置暂存区的意义 1. ​精准控制…...

RPG8.增加武器

1.创建一个Actor的c类 2.创建武器WeaponBase的子类&#xff0c;给玩家的武器 3.进入WeaponBase&#xff0c;只留下构造函数&#xff0c;并且将bCanEventTick改为false&#xff0c;增加组件。 #pragma once#include "CoreMinimal.h" #include "GameFramework/Ac…...

力扣1128题解

记录 2525.5.4 题目&#xff1a; 思路&#xff1a; 先将dominoes[i]的二元全部变为前大后小的形式&#xff0c;再遍历该数组&#xff0c;用数组来记录。 代码&#xff1a; class Solution {public int numEquivDominoPairs(int[][] dominoes) {int [] [] cnt new int [10…...

微服务框架选型

1 Thrift&#xff0c; gRPC&#xff0c; Dubbo&#xff0c;Spring Cloud性能对比 指标ThriftgRPCDubboSpring Cloud序列化速度最快 (Binary)快 (Protobuf)中等 (Hessian2)慢 (JSON/XML)网络吞吐量最高 (无HTTP开销)高 (HTTP/2)中等 (TCP)低 (HTTP/1.1)延迟<1ms1-3ms2-5ms10…...

DeepSeek-Prover-V2模型原理速览

文章目录 prerequisite&#xff1a;Lean4研究亮点通过子目标分解实现递归证明搜索基于子目标的定理证明中的课程学习 统一非形式化推理和形式化证明通过合成数据实现冷启动以推理为导向的强化学习 DeepSeek-Prover-V2 的训练细节专家迭代监督式微调 快速使用REF DeepSeek-Prove…...

网络编程,使用select()进行简单服务端与客户端通信

这里在Ubuntu环境下演示 一般流程 服务端常用函数&#xff1a; socket()&#xff1a;创建一个新的套接字。bind()&#xff1a;将套接字与特定的IP地址和端口绑定。listen()&#xff1a;使套接字开始监听传入的连接请求。accept()&#xff1a;接受一个传入的连接请求&#xff…...

QT数据库实验

一、实验目的和要求 1、掌握Qt中掌握绘图工具和图形界面设计&#xff1b;绘制常见的图形。 2、熟悉Qt界面设计中常用的控件。 3、了解滚动条、滑动条、进度条、旋转按钮控件的用法。 二、实验内容 1、设计一个绘图软件&#xff0c;完成图像的绘制操作。 2、建立按钮的信号…...

【PyTorch完全指南】从深度学习原理到工业级实践

目录 🌟 前言技术背景与价值当前技术痛点解决方案概述目标读者说明🔍 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比🛠 二、实战演示环境配置要求核心代码实现1. 基础Tensor操作2. 神经网络构建3. 训练循环实现运行结果验证⚡ 三、性能对比测试方法…...

Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师

引言:当AI的记性比金鱼还差 你:我叫张三,很高兴认识你AI:很高兴认识你,张三! 如果你有任何问题或者需要帮助,请随时告诉我你:我叫什么AI:抱歉,我无法知道你的名字。不过你可以告诉我一些关于你的信息,如果你愿意分享的话!AI的内心OS:爱谁谁,我反正不知道 如上图所…...

工业AI质检:从传统算法到多模态大模型应用

工业AI质检:从传统算法到多模态大模型应用 引言 在制造业质量控制领域,传统人工检测的漏检率高达15%-20%,而基于规则算法的视觉检测系统仅能处理已知缺陷类型。随着多模态大模型技术的突破,工业质检正进入"认知智能"新阶段——系统不仅能识别缺陷,更能理解工艺…...

STM32智能垃圾桶:四种控制模式实战开发

简介 从零到一打造企业级智能垃圾桶系统,实现按键、语音、红外、蓝牙多模式控制。本项目采用STM32F103C8T6作为主控芯片,通过模块化设计整合多种控制方式,确保系统稳定、高效且易于维护。文章将提供完整硬件连接方案、代码实现细节及企业级开发技术,帮助开发者掌握智能垃圾…...

Python语句入门:从基础到实践

Python作为一门简洁优雅的编程语言&#xff0c;其语句结构清晰易懂&#xff0c;非常适合初学者学习。本文将全面介绍Python中的各种基本语句&#xff0c;帮助编程新手快速掌握Python编程基础。语句是计算机执行程序的最小单位。 一、Python语句概述 Python程序由一系列语句组…...

Kubernetes(k8s)学习笔记(五)--部署Ingress实现域名访问和负载均衡

Ingress是基于nginx&#xff0c;通过在k8s中部署ingress&#xff0c;可实现域名访问和pod节点间的负载均衡。 下面是实现过程&#xff1a; 一.准备一个ingress-controller.yaml文件 apiVersion: v1 kind: Namespace metadata:name: ingress-nginxlabels:app.kubernetes.io/n…...

数据库MySQL学习——day8(复习与巩固基础知识)

文章目录 1. 数据库基础概念复习2. 常用SQL命令复习2.1 SELECT 查询数据2.2 INSERT 插入数据2.3 UPDATE 更新数据2.4 DELETE 删除数据 3. 表操作复习3.1 创建表3.2 修改表3.3 删除表 4. 实践任务4.1 创建样例数据库和表4.2 插入和更新数据4.3 使用WHERE、ORDER BY、LIMIT进行查…...

【ArcGIS微课1000例】0144:沿线或多边形要素添加折点,将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段。

文章目录 增密工具介绍举例1. 圆2. 椭圆3. 折线增密工具介绍 沿线或多边形要素添加折点。还可将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段。 原理图如下所示: 用法: 通过距离参数对直线段进行增密。利用距离、最大偏转角或最大偏移偏差参数,通过增密操作对曲线段进行简化…...

python中的模块/库

python中的模块/库 什么是库/模块&#xff0c;通俗来讲是用来干啥的&#xff1f; 模块/库就是一个/多个.py的一个文件。通常是用来定义一些通用的方法&#xff0c;避免代码冗余。怎么python中自带的这些模块和库&#xff1f; 使用import进行导入&#xff0c;之后其中的内容就可…...

全面掌握 Jetpack Compose 的 State 体系:核心用法与最佳实践

Jetpack Compose 中的 State 类型全面解析 Jetpack Compose 提供了多种 State 类型来管理 UI 状态。以下是主要的 State 类型及其使用场景&#xff1a; 基础 State 类型 1. mutableStateOf 最基本的可观察状态&#xff0c;用于简单值的变化跟踪&#xff1a; var count by …...

Pyhton类方法添加装饰器案例解析

from functools import wrapsdef keep_alive(func):"""装饰器&#xff1a;为方法自动维护长连接"""wraps(func)def wrapper(self, *args, **kwargs):if not self.conn:self.conn ConnectHandler(**self.device_params)self.conn.enable()return…...

58认知干货:创业经验分享及企业形式的汇总

机会永远都是留给有眼光、能发现机会的人,而不是留给有准备的人!往往机会就在身边,普罗大众却无法发现,而真正适合创业的人,天然具备这方面的能力。 当然后天的补足也未尝不可:“故常有欲以观其微,常无欲以观其妙。””引用《道德经》 读懂这句话自然便会拥有对商业和…...

n8n 快速入门2:构建自动化工作流

n8n 快速入门2:构建自动化工作流 什么是n8n?项目目标准备工作步骤一:创建新工作流步骤二:添加触发节点步骤三:配置NASA节点与凭证1. 添加NASA节点2. 设置NASA API凭证3. 使用表达式设置时间范围步骤四:添加If条件节点1. 创建条件分支2. 测试条件逻辑步骤五:配置输出节点…...

TimSort算法解析

文章目录 1. 核心数据结构1.1 TimSort类定义1.2 关键概念&#xff1a;Run 2. TimSort解决的具体问题分析2.1 处理现实世界中的数据特性2.2 提高排序稳定性2.3 优化归并排序的空间复杂度2.4 处理特殊情况的鲁棒性2.5 适应性能力与算法自调整2.6 优化合并操作效率 3. TimSort核心…...

CATIA高效工作指南——曲面设计篇(一)

引言 在工业设计领域&#xff0c;CATIA的曲面建模与线束展开功能是构建复杂产品的核心技术。本文整合了​​曲面封闭性检查​​、​​无参数曲面创建​​、​​缝合优化策略​​等核心知识点&#xff0c;结合实战案例与高阶技巧&#xff0c;为工程师提供系统化的解决方案。 一…...

PCB叠层设计方案

1叠层处理 在设计多层 PCB 电路板之前&#xff0c; 设计者需要首先根据电路的规模、 电路板的尺寸和电磁兼容&#xff08; EMC&#xff09;的要求来确定所采用的电路板结构&#xff0c; 也就是决定采用 4 层&#xff0c;6 层&#xff0c; 还是更多层数的电路板。 这就是设计多层…...

机器人编程基础---C语言中的控制语句

C语言中的控制语句 C语言中的控制语句条件语句if 语句switch 语句循环语句for 循环while 循环do-while 循环代码示例C语言中的控制语句 控制语句是编程中用于控制程序执行流程的语句。在C语言中,控制语句包括条件语句和循环语句,它们允许程序根据条件选择不同的执行路径或重…...

13.Excel:分列

一 分列的作用 将一个单元格中的内容拆分到两个或多个单元格当中。 二 如何使用 1.常规分列使用 注意&#xff1a;分列功能一次只能拆分一列。 长度一致或者数据间有分隔符。 补充&#xff1a;快速选择一列。 CTRL shift 向下箭头。 补充&#xff1a;中英文逗号不同。 可以先通…...

理解数学概念——幂律(power law)

在统计学中&#xff0c;幂律(power law)(即按照幂的规律)是指两个量之间的函数关系&#xff0c;其中一个量的相对变化会导致另一个量以与常量指数成正比的关系产生相对变化&#xff1a;一个量随着另一个量的幂而变化。(例如&#xff0c; &#xff0c;r 的变化导致s 按照幂 的…...

Go语言chan底层原理

本篇文章内容参考小徐先生等文章&#xff0c;带有个人注解等内容&#xff0c;帮助大家更好的了解chan的底层实现&#xff0c;原文是在语雀chan底层&#xff0c;可以点击查看&#xff0c;如果感觉还不错的同学&#xff0c;不妨点一个免费的赞和关注&#xff0c;冲冲冲&#xff0…...

传感器数据处理笔记

里程计模型&#xff1a; 两轮差分地盘的运动学模型三轮全向底盘的运动学模型航迹推算&#xff08;Dead Reckoning&#xff09; 里程计标定 线性最小二乘的基本原理最小二乘的直线拟合最小二乘在里程计标定中的应用 差分底盘的优势就是&#xff1a; 结构简单便宜&#xff0…...

8.5 从零到生产:Docker+K8s+CI/CD全链路部署实战手册

从零到生产:Docker+K8s+CI/CD全链路部署实战手册 #mermaid-svg-61OPZrCvQokymEG2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-61OPZrCvQokymEG2 .error-icon{fill:#552222;}#mermaid-svg-61OPZrCvQokymEG2 .err…...

Android逆向学习(八)Xposed快速上手(上)

Android逆向学习&#xff08;八&#xff09;Xposed快速上手(上) 前言 xposed是一个用来hook的工具&#xff0c;简而言之&#xff0c;通过替换/system/bin/app_process程序控制zygote进程&#xff0c;这样的话&#xff0c;app_process在启动过程中会加载XposedBridge.jar这个j…...

Linux网络编程:套接字

目录 一 前言 二 源ip地址和目的ip地址 三 认识端口号 四 理解 "端口号" 和 "进程ID" 五 理解源端口号和目的端口号 六 认识TCP&#xff08;Transmission Control Protocol&#xff09;协议 七 UDP&#xff08;(User Datagram Protocol&#xff…...

C++八股--6--mysql 日志与并发控制

这里向大家介绍一下数据库基础&#xff1a;共分为以下章节 10前序.日志系统 这是数据库的核心。我放到首页来介绍&#xff0c;给大家一个前置概念&#xff0c;方便进行更好的学习 日志文件我们用来记录事务对数据库更新操作的文件&#xff0c;分为以记录为单位的文件和数据块…...

bc 命令

一.bc 命令概述 bc 是 Linux 系统中一个用于任意精度算术运算的计算器语言&#xff0c;它支持整数和浮点数的计算&#xff0c;还能进行复杂的数学运算。在你给出的代码里&#xff0c;bc 被用来执行数值比较和计算。 二.| bc 和 | bc -l 的作用与功能 1. | bc | 是管道符号&…...

文献分享:CH-CL配对和VL结构域的完整性影响IgG1分泌过程

背景 IgG抗体的CH1结构域通过内质网蛋白质量控制&#xff08;ERQC&#xff09;机制&#xff0c;由分子伴侣BiP介导&#xff0c;控制抗体的组装和分泌。然而&#xff0c;目前尚不清楚这一过程是否需要可变域。2024年5月2日&#xff0c;韩国亚洲大学的研究人员在Frontiersin Mol…...

【vue3】黑马程序员前端Vue3小兔鲜电商项目【八】

黑马程序员前端Vue3小兔鲜电商项目【八】登录页面 登录页面的主要功能就是表单校验和登录登出业务。 账号密码 accountpasswordcdshi0080123456cdshi0081123456cdshi0082123456cdshi0083123456cdshi0084123456cdshi0085123456cdshi0086123456cdshi0087123456cdshi0088123456 …...

spring cloud 与 cloud alibaba 版本对照表

Spring cloud的组件 spring官方提供netflix提供alibaba提供其它注册中心consuleurekanacosapache(zookeeper)、tencent(paloris北极星)负载均衡loadBalancerribbondubbo远程调用openFeignfeigndubbogoogle(grpc)熔断器cricutBreakerhystrixsentinel网关gatewayzuul第一代MSE&a…...

Rockermq的部署与使用(0-1)

​RocketMQ​ 是阿里巴巴开源的一款 ​分布式消息中间件&#xff0c;具有高吞吐、低延迟、高可用等特点&#xff0c;广泛应用于多个领域&#xff0c;包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物…...

基于SpringBoot + HTML 的宠物医院预约管理

宠物医院管理系统&#xff0c;java项目&#xff0c;springboot项目。idea能打开运行。 使用技术&#xff1a;springboot&#xff0c;mybatis&#xff0c;HTML &#xff0c;mysql 5.7 共分为三个角色&#xff1a;系统管理员、医生、用户 功能模块&#xff1a;系统管理&#xff0…...

Python的ArcPy基于Excel表格对大量遥感影像批量重分类

本文介绍基于Python中的ArcPy模块&#xff0c;以Excel表格内的信息&#xff0c;对遥感影像加以重分类的方法。 首先&#xff0c;明确一下本文的需求。现有按照文章ArcPy批量将栅格文件的属性表导出为Excel表格的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/artic…...

qml显示视频帧(QQuickImageProvider)

一、实现方式 解码视频可以选择:opencv、ffmpeg等。 显示视频可以选择:Qt Multimedia、QQuickImageProvider、ShaderEffect、自定义QQuickItem等。 本文使用opencv解码视频,QQuickImageProvider显示视频。 二、QQuickImageProvider 中,requestImage 和 requestTexture区…...

硬件工程师面试常见问题(13)

第六十一问&#xff1a;电压跟随器问题&#xff08;有待改进&#xff09; 电压跟随器主要用途在哪里&#xff1f; 答&#xff1a;电压跟随器主要用途&#xff1a;一般用于多级放大电路的输入入级、输出级&#xff0c;也可连接两电路&#xff0c;起缓冲作用。 电压跟随器电路连…...

[特殊字符] 专业角度深入讲解:大模型备案(生成式人工智能)

&#x1f3f7;️ 一、什么是大模型备案&#xff1f; 大模型备案是指 大模型产品 在向公众开放及商用之前&#xff0c;经过 国家互联网信息办公室&#xff08;网信办&#xff09; 等监管部门的 备案审批 过程。 ✅ 目的&#xff1a; 加强生成式 AI 服务的合规管理 促进 AI 技…...

机器学习的简单介绍

目录 一、发展历程与学科定位 二、核心研究方向与技术突破 三、技术挑战与瓶颈 四、未来趋势与创新方向 五、应用场景与产业影响 总结与展望 机器学习作为人工智能的核心分支&#xff0c;近年来在理论和应用层面均取得了突破性进展。本文将从发展历程、核心研究方向、…...

多语言笔记系列:Polyglot Notebooks 混合使用多语言并共享变量

混合使用多语言并共享变量 混合使用多种语言(C#、F#、Powershell、SQL、KQL、Python、Html、JavaScript、JavaScript、Mermaind等语言)&#xff0c;是多语言笔记的最大特性&#xff0c;并且支持各语言之间共享变量这一创新功能。 语言及共享变量的支持情况 语言变量共享C#支…...

操作系统结构图

操作系统组成结构 ├── 用户界面&#xff08;外壳&#xff09; │ ├── 图形用户界面&#xff08;GUI&#xff09;: 提供可视化交互&#xff08;如窗口、图标&#xff09; │ └── 命令行界面&#xff08;CLI&#xff09;: 通过文本指令操作&#xff08;如Bash、PowerShe…...

Docker 使用与部署(超详细)

目录 引入 入门使用 部署对比 镜像仓库 命令解释 基础 常见命令 示例 数据卷的使用 数据卷的概念 数据卷的使用 挂载本地目录文件 镜像 结构 Dockerfile 容器网络 部署 DockerCompose 语法 ​编辑 基础命令 引入 当我们在 Linux 上部署一个集成了很多中间件…...