apisix的原理及作用,跟spring cloud gateway有什么区别?
apache APISIX 是一个高性能、可扩展的开源 API 网关,它主要用于处理 API 请求、流量管理、安全控制和服务治理。APISIX 可以将复杂的服务架构中的不同服务通过统一的网关来进行管理和监控,为微服务架构提供了便捷的流量入口管理方式。
APISIX 的原理
APISIX 的核心功能是作为 API 网关,它接收客户端的请求,处理路由、鉴权、限流、负载均衡等操作,并将请求转发给后端服务。它的原理主要包括以下几个关键点:
1. API 路由:
APISIX 的路由功能是其核心之一,它根据请求的 URL、方法(GET、POST等)、请求头、参数等多种条件,将请求转发到对应的后端服务。
路由过程的具体步骤:
- 客户端向 APISIX 发起请求。
- APISIX 根据预设的路由规则匹配请求,路由规则可以基于多种维度,如路径、请求方法、主机名、请求参数等。
- 匹配成功后,APISIX 将请求转发到相应的后端服务。
路由的灵活性是 APISIX 的重要特性,用户可以根据业务需要自由设置路由规则。
2. 插件机制:
APISIX 通过插件(Plugin)来实现各种扩展功能,这也是它的核心架构之一。插件是 APISIX 中的独立模块,用于提供额外的功能,如身份验证、限流、监控、日志记录等。插件可以在不同的请求阶段(如请求到达前、请求处理后等)进行执行,灵活性极高。
常见的插件有:
- 身份验证(Authentication):支持多种鉴权机制,如 key-auth、JWT、OAuth 等。
- 限流(Rate Limiting):控制单位时间内 API 的请求数量,保护后端服务。
- 负载均衡(Load Balancing):在多个后端服务之间分发流量,支持多种负载均衡策略,如轮询、最小连接数等。
- 监控与日志(Monitoring and Logging):如 Prometheus、Apache SkyWalking 插件,支持集成第三方的监控和日志系统,便于运维和问题排查。
插件可以动态加载和热更新,不需要重启 APISIX 实例,这大大提高了灵活性和可维护性。
在 Apache APISIX 中,对后端服务进行限流(Rate Limiting)可以通过配置限流插件来实现。APISIX 提供了灵活的限流方式,支持根据请求频率、用户、IP 地址等多种维度来限制后端流量。以下是使用 APISIX 进行后端限流的具体步骤和原理:
1. 启用 Rate Limiting 插件
APISIX 提供的限流插件主要是 limit-count
和 limit-req
。这两个插件有不同的限流策略:
- limit-count:基于请求数量的限流,限制一段时间内的总请求次数。
- limit-req:基于请求速率的限流,限制每秒允许的请求次数。
2. 配置 limit-count 插件
假设我们使用 limit-count
插件进行限流,配置示例如下:
{"plugins": {"limit-count": {"count": 100, // 每个时间窗口内允许的最大请求次数"time_window": 60, // 时间窗口大小,单位为秒"rejected_code": 503, // 当请求超过限制时返回的HTTP状态码"key": "remote_addr", // 根据请求的唯一标识来进行限流,比如IP、用户ID"policy": "local" // 限流策略,可以选择 'local'(单节点限流)或 'redis'(分布式限流)}},"upstream": {"nodes": {"http://backend-service": 1},"type": "roundrobin"},"uri": "/api/v1/*"
}
- count:设置在
time_window
时间段内允许的最大请求数量。在该例子中,表示每分钟最多允许 100 个请求。 - time_window:指定限流时间窗口,单位是秒。
- key:设置限流依据的标识字段。例如可以选择根据
remote_addr
(客户端 IP)来限流,也可以根据consumer_name
来按用户限流。 - policy:选择限流策略。
local
适用于单节点限流,redis
支持分布式限流(需要配置 Redis)。
3. 配置 limit-req 插件
limit-req
插件适合需要对请求速率进行更精细控制的场景。示例配置如下:
{"plugins": {"limit-req": {"rate": 10, // 每秒允许的请求数量"burst": 5, // 突发请求允许的数量"rejected_code": 429, // 超过速率限制后返回的HTTP状态码"key": "consumer_name" // 限流的依据,可以是 IP、用户ID等}},"upstream": {"nodes": {"http://backend-service": 1},"type": "roundrobin"},"uri": "/api/v1/*"
}
- rate:每秒允许的请求数量。在此配置中,每秒最多允许 10 个请求。
- burst:突发请求数。当请求速率在瞬间超过
rate
的时候,允许一定的缓冲。 - key:与
limit-count
一样,用于限流的依据。可以选择remote_addr
或consumer_name
。
4. 配置分布式限流(使用 Redis)
如果 APISIX 是多实例部署的场景,为确保限流策略在多个节点间一致,可以使用 Redis 作为限流数据的存储:
在 limit-count
或 limit-req
插件的 policy
设置为 redis
后,还需要在 conf/config.yaml
中配置 Redis:
plugin_attr:limit-count:redis_host: "127.0.0.1" # Redis服务器地址redis_port: 6379 # Redis端口redis_password: "" # Redis密码redis_timeout: 1000 # 连接Redis的超时时间(毫秒)
这样,各个 APISIX 实例会将限流信息存储在 Redis 中,以保证分布式限流的一致性。
5. 测试与调整
- 部署配置后,可以使用测试工具如
curl
或Apache Benchmark (ab)
模拟大量请求,验证限流配置是否生效。 - 根据后端服务的承载能力,合理调整
count
、rate
、time_window
和burst
等参数。
总结
通过配置 APISIX 的 limit-count
或 limit-req
插件,可以方便地对后端服务进行限流控制,以防止过多请求影响服务稳定性。使用 Redis 可以实现多实例下的一致限流,适用于分布式系统的流量管理。
3. 负载均衡:
APISIX 支持多种负载均衡算法,包括:
- 轮询(Round Robin):请求按照顺序轮流分配到后端服务器。
- 一致性哈希(Consistent Hashing):基于请求内容(如 IP、参数等)进行哈希,确保同一类型的请求路由到相同的后端服务器。
- 最小连接数(Least Connections):将请求转发到当前连接数最少的后端服务器,适用于连接较长的场景。
负载均衡在分布式系统中非常重要,它可以提升系统的吞吐量和服务的可用性。
4. 高性能架构:
APISIX 基于 Nginx 和 OpenResty 实现,具备极高的性能。Nginx 是一个轻量级、高性能的 HTTP 服务器,OpenResty 则是基于 Nginx 扩展的开发框架,能够运行 Lua 脚本。因此,APISIX 可以在 Nginx 上执行 Lua 脚本,处理 API 请求,具有高并发和低延迟的特点。
APISIX 通过 Nginx 的事件驱动架构,能够高效处理大量的 API 请求,并支持 LuaJIT 的 Just-In-Time 编译技术,进一步提升了系统的执行效率。
5. 服务发现:
APISIX 支持与多种服务发现系统集成,如 Consul、Nacos、Eureka 等。它可以自动从这些服务注册中心获取可用的服务实例信息,并根据路由规则将请求转发到适当的服务实例。
服务发现过程通常如下:
- APISIX 定期从服务注册中心获取服务列表,并更新本地缓存。
- 根据路由规则,将客户端的请求转发到服务发现的某个实例。
- 实现无缝的服务扩展和故障转移。
6. 配置管理和热加载:
APISIX 支持动态配置更新,无需重启服务。所有的路由规则、插件配置、服务发现等配置都可以通过 API 动态更新,这种特性确保了系统的高可用性。
配置更新的过程:
- 用户通过管理接口(REST API 或 Dashboard)发送配置变更请求。
- APISIX 接收到变更请求后,立即生效,且不需要重新启动服务或中断当前流量。
APISIX 的作用
APISIX 主要用作 API 网关,帮助开发者和运维人员处理和管理 API 请求,具体的作用如下:
1. 统一的流量入口管理:
在微服务架构中,不同服务可能运行在不同的服务器或数据中心。通过 APISIX,所有服务的流量可以通过一个统一的入口进行管理。API 请求经过 APISIX 后,它可以根据请求内容(如路径、参数、请求头等)路由到不同的服务。
- 流量控制:APISIX 可以为不同的服务配置流量策略,限制单位时间内的请求数量,从而避免后端服务过载。
- 负载均衡:APISIX 可以将请求分配到多个服务实例,实现高可用和可扩展。
2. 安全控制:
APISIX 提供多种安全机制,确保 API 的安全性:
- 身份验证:APISIX 支持多种认证机制,如 JWT、OAuth、API Key 等,保证只有合法的用户可以访问 API。
- SSL 终止:APISIX 可以处理 HTTPS 请求,在网关处终止 SSL 连接,并将流量安全地转发到后端服务。
3. API 日志与监控:
APISIX 提供丰富的监控和日志记录功能。通过集成 Prometheus、Grafana 等监控工具,APISIX 可以对 API 请求进行实时监控和报警。
- 实时监控:跟踪 API 的请求率、错误率、延迟等关键指标。
- 日志记录:可以记录详细的请求日志,便于问题的定位和故障排查。
4. 跨平台支持:
APISIX 支持多种协议,包括 HTTP、gRPC、WebSocket、Dubbo 等,适合多种场景下的服务通信。它可以作为不同协议之间的桥梁,帮助进行协议转换。
5. 插件扩展性:
APISIX 提供了一个丰富的插件机制,用户可以根据需求开发自定义插件。例如,您可以开发一个专用的日志记录插件或请求过滤插件,并将其应用到 API 流量中。插件可以动态加载,不影响网关的运行时性能。
6. 服务治理:
在微服务架构中,APISIX 通过负载均衡、限流、熔断等手段帮助治理服务,保证高可用性和可扩展性。此外,它还能与 Consul、Nacos 等服务发现工具集成,实现服务的自动注册与发现。
APISIX 与其他 API 网关的比较
与其他 API 网关(如 Kong、Traefik)相比,APISIX 具有以下优势:
- 高性能:基于 Nginx 和 LuaJIT,APISIX 的吞吐量极高,延迟极低,适合大规模流量处理。
- 动态配置:APISIX 支持所有配置的热更新,极大地提升了系统的可用性和维护效率。
- 丰富的插件系统:APISIX 提供了丰富的插件库,且支持用户开发自定义插件,灵活扩展。
- 多协议支持:APISIX 支持多种协议(HTTP、gRPC、WebSocket、Dubbo),适应不同的应用场景。
- 社区活跃:作为 Apache 基金会的项目,APISIX 具有强大的社区支持,功能迭代快速,问题响应及时。
总结
Apache APISIX 是一个功能强大、高性能的 API 网关,主要用于微服务架构中流量管理、服务治理和安全控制。通过其强大的插件机制、动态配置、负载均衡、服务发现、日志和监控功能,APISIX 帮助开发者和运维人员更好地管理
跟spring cloud gateway有什么区别?
Apache APISIX 和 Spring Cloud Gateway 都是用于微服务架构中的 API 网关解决方案,但它们在设计目标、架构、功能、性能、扩展性等方面有明显的区别。以下是它们的核心差异:
1. 架构与设计理念
-
APISIX:
- APISIX 是基于 Nginx 和 OpenResty 的高性能 API 网关。它使用 LuaJIT 提供极低的延迟和高并发性能。APISIX 是一个独立的 API 网关,不依赖于特定的编程语言和框架。
- APISIX 支持通过插件机制扩展,插件可以在不同的请求阶段执行,允许用户灵活地配置网关功能。
-
Spring Cloud Gateway:
- Spring Cloud Gateway 是基于 Spring Framework 构建的 API 网关,专为与 Spring Cloud 微服务生态系统无缝集成而设计。它依赖于 Spring 的核心组件和 Reactor(响应式编程模型),并与 Spring Boot、Spring Cloud Config、Eureka、Zuul 等工具紧密结合。
- Spring Cloud Gateway 强调在 Spring 生态系统中的使用,非常适合已有的 Spring 微服务开发者。
2. 性能
-
APISIX:
- 由于 APISIX 基于 Nginx 和 LuaJIT 实现,具有极高的性能,能够处理高并发请求并保持低延迟。Nginx 的事件驱动架构和 LuaJIT 的即时编译(JIT)技术使得 APISIX 在高性能环境中表现出色,非常适合需要处理大量 API 请求的场景。
-
Spring Cloud Gateway:
- Spring Cloud Gateway 是基于 Java 和 Reactor 的响应式编程模型,虽然性能也较好,但在高并发下的表现通常不如基于 Nginx 的解决方案(如 APISIX)。因为 Java 虚拟机的性能瓶颈以及 Reactor 的复杂性,Spring Cloud Gateway 更适合中等规模的 API 流量场景,而不是超大规模流量。
3. 生态系统与集成
-
APISIX:
- APISIX 是语言无关的,可以与各种技术栈(Java、Python、Go、Node.js 等)集成。它通过 REST API 或 GUI(如 Dashboard)进行配置管理,并且支持 Consul、Nacos、Eureka 等服务发现系统。
- APISIX 还支持多种协议(如 HTTP、gRPC、WebSocket、Dubbo),适合异构架构的多协议集成。
-
Spring Cloud Gateway:
- Spring Cloud Gateway 是 Spring 生态系统的一部分,特别适合已经基于 Spring Cloud 构建的微服务系统。它与 Spring Cloud Netflix 组件(如 Eureka、Zuul、Ribbon、Hystrix 等)无缝集成,提供了良好的支持。
- 如果你的微服务已经使用 Spring Cloud 构建,那么 Spring Cloud Gateway 是天然的选择,因为它能与现有的 Spring 组件无缝结合。
4. 插件机制与扩展性
- APISIX:
- APISIX 有一个强大的 插件机制,插件可以动态加载和热更新。APISIX 提供了丰富的官方插件库(如鉴权、限流、负载均衡、监控等),并且用户可以自定义插件。由于 APISIX 是基于 Lua 开发的,插件开发可以非常灵活且高效,动态更新无需重启服务。
- Spring Cloud Gateway:
- Spring Cloud Gateway 也支持过滤器机制(Filters),这些过滤器与 Spring WebFlux 的请求处理管道集成。虽然可以通过自定义过滤器扩展功能,但由于它基于 Java 和 Spring 框架,插件开发可能相对较复杂,且通常需要重新启动服务才能生效。
5. 配置管理
- APISIX:
- APISIX 支持 动态配置,所有配置可以通过 API 或 Web 界面(Dashboard)实时更新,无需重启。这使得在生产环境中能够快速响应配置更改,确保高可用性和持续集成。
- Spring Cloud Gateway:
- Spring Cloud Gateway 的配置管理依赖于 Spring Cloud Config 或者 静态配置文件(如
application.yml
)。虽然可以通过 Spring Cloud Config 动态更新配置,但动态更新的灵活性和实时性不如 APISIX 强。
- Spring Cloud Gateway 的配置管理依赖于 Spring Cloud Config 或者 静态配置文件(如
6. 协议支持
-
APISIX:
- APISIX 支持多种协议,包括 HTTP、HTTPS、gRPC、WebSocket、Dubbo 等。其多协议支持使得 APISIX 能够处理多样化的流量场景,不仅限于 Web API,还可以处理微服务之间的 RPC 调用(如 gRPC)。
-
Spring Cloud Gateway:
- Spring Cloud Gateway 主要支持 HTTP 和 WebSocket 协议。虽然它基于 WebFlux 的响应式编程模型,也支持一些异步的 Web 协议,但相比 APISIX 的多协议支持能力略显不足。
7. 高可用与扩展性
-
APISIX:
- APISIX 具有高度的可扩展性和高可用性,支持水平扩展,特别是在处理大规模流量场景下表现优越。它通过负载均衡和健康检查功能确保流量能够在多个后端服务之间高效分配。此外,APISIX 的分布式架构使得它适合多节点部署,支持高可用的集群方案。
-
Spring Cloud Gateway:
- Spring Cloud Gateway 也支持水平扩展和高可用部署,依赖于 Spring Cloud 生态中的 Eureka、Ribbon 等组件来实现服务发现和负载均衡。虽然可以满足一般的扩展需求,但在极高流量和低延迟要求的场景下,扩展性和性能不如 APISIX 高效。
8. 日志与监控
-
APISIX:
- APISIX 提供了丰富的监控与日志功能,可以集成 Prometheus、Grafana 等监控系统,并支持访问日志、请求量、延迟等多种数据指标的收集和展示。通过这些集成,APISIX 可以实时监控系统状态,提供强大的可观测性。
-
Spring Cloud Gateway:
- Spring Cloud Gateway 也支持与 Spring Boot Actuator、Micrometer 等监控工具集成,能够提供基本的监控和健康检查功能。虽然它在 Spring 生态中集成度较高,但相比 APISIX 的实时监控能力,灵活性和可定制性稍显不足。
9. 使用场景
- APISIX:
- APISIX 更适合需要高性能、低延迟、支持多协议以及多语言的异构系统。它适用于处理超大规模流量的场景,比如需要高吞吐量的 API 请求、需要灵活的负载均衡和流量治理的微服务架构。
- Spring Cloud Gateway:
- Spring Cloud Gateway 更适合 Spring 生态系统中的微服务架构,特别是已经使用 Spring Cloud 构建的应用。对于中等规模的 API 请求流量和与 Spring Cloud 生态紧密集成的需求,Spring Cloud Gateway 是一个不错的选择。
总结
-
APISIX 适合高性能、需要多协议支持、对扩展性和动态配置有更高要求的场景。它通过 Nginx 的强大性能、LuaJIT 的即时编译以及丰富的插件生态,在高并发、低延迟的情况下具有显著优势。
-
Spring Cloud Gateway 则适合 Spring Cloud 生态中的微服务系统,它与 Spring Cloud 的其他组件无缝集成,对于熟悉 Spring 的开发者来说非常友好,适合中小型企业和 Spring Cloud 用户。
两者的选择取决于系统的架构需求、性能要求以及技术栈。对于需要极高性能和多协议支持的大型系统,APISIX 是更好的选择;而如果已有的系统依赖于 Spring Cloud 生态,Spring Cloud Gateway 是更自然的选择。
相关文章:
apisix的原理及作用,跟spring cloud gateway有什么区别?
apache APISIX 是一个高性能、可扩展的开源 API 网关,它主要用于处理 API 请求、流量管理、安全控制和服务治理。APISIX 可以将复杂的服务架构中的不同服务通过统一的网关来进行管理和监控,为微服务架构提供了便捷的流量入口管理方式。 APISIX 的原理 …...
华为HarmonyOS实现实时语音识别转文本
场景介绍 将一段音频信息(短语音模式不超过60s,长语音模式不超过8h)转换为文本,音频信息可以为pcm音频文件或者实时语音。 开发步骤 在使用语音识别时,将实现语音识别相关的类添加至工程。 import { speechRecogni…...
DIY可视化-uniapp悬浮菜单支持拖动、吸附-代码生成器
在Uniapp中,悬浮菜单支持拖动和吸附功能,可以为用户带来更加灵活和便捷的操作体验。以下是对这两个功能的详细解释: 悬浮菜单支持拖动 提高用户体验:用户可以根据自己的需要,将悬浮菜单拖动到屏幕上的任意位置&#x…...
HTTP cookie 与 session
一.Cookie 定义: 是服务器发送到用户浏览器并保存在浏览器上的一小块数据, 它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。 通常, 它用于告知服务端两个请求是否来自同一浏览器, 如保持用户的登录状态、 …...
智慧停车场导航系统架构及反向寻车系统解决方案
一、系统概述: 随着当前室内定位导航技术在大型公共场所如政务中心、商业综合体、车站中的应用越来越多,人们对智慧停车场的需求也日益凸显出来,并且智慧停车场对大型公共场所智慧化的整体建设起到重要作用。如何更有效提高停车效率…...
【小程序上传图片封装2024,支持多图,带进度,上传头像】
import config from ./config;// 支持多图,显示进度 export function uploadImages(count 1, sourceType, onLoading null, showProgress false, fileKey file) {return new Promise((resolve, reject) > {wx.chooseMedia({count: count, // 可以选择的图片数…...
[A-14]ARMv8/ARMv9-Memory-内存模型的类型(Device Normal)
ver0.1 [看前序文章有惊喜。] 前言 前面花了很大的精力把ARM构建的VMSA中的几个核心的议题给大家做了介绍,相信大家已经能够理解并掌握ARM的内存子系统的工作原理大致框架。接下来我们会规划一些文章,对ARM内存子系统的一些细节做一下介绍,使ARM的内存子系统更加的丰满。本…...
驾校管理系统|基于java和小程序的驾校管理系统设计与实现(源码+数据库+文档)
驾校管理系统平台 目录 基于java和小程序的驾校管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#…...
@Mapper使用中遇到的问题解法汇总
最近终于有时间写点代码相关的文章了,工作真的太忙了,果然又要测试又要开发的人最🐂🐴。 1.查询数据库有数据,但是代码中写select语句的时候查出为null Select("SELECT * FROM xx_manager order by id limit 1&q…...
深度学习:YOLO V3 网络架构解析
引言 YOLO V3(You Only Look Once Version 3)是YOLO系列算法的第三个版本,相比之前的版本,它在多个方面进行了优化和改进,不仅提升了检测精度,还保持了较快的检测速度。本文将详细介绍YOLO V3的主要改进以…...
SpringCloudAlibaba-Sentinel-熔断与限流
版本说明 <spring.boot.version>3.2.0</spring.boot.version> <spring.cloud.version>2023.0.0</spring.cloud.version> <spring.cloud.alibaba.version>2023.0.1.2</spring.cloud.alibaba.version>是什么 能干嘛 面试题 服务雪崩 安装使…...
mysql中的mvcc理解
是什么:MVCC指的是在读已提交、可重复读这两种隔离级别下的事务在执行普通的select操作时,访问记录的版本链的过程,可以使不同事务的读写操作并发执行,提高性能。 MVCC 隐藏字段 undo log 版本链 ReadView 1.隐藏字段…...
ETF申购赎回指南:详解注意事项与低费率券商推荐!
ETF 申购&赎回 ETF申购赎回是个啥业务? 01 ETF申购、赎回是一种交易委托方式,指投资者通过申购方式(买入方向)获得ETF份额,通过赎回的方式(卖出方向)换掉/卖出ETF份额。ETF申购,通常是通过一篮子成…...
List<T>属性和方法使用
//author:shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …...
记一次:使用使用Dbeaver连接Clickhouse
前言:使用了navicat连接了clickhouse我感觉不太好用,就整理了一下dbeaver连接 0、使用Navicat连接clickhouse 测试连接 但是不能双击打开,可是使用命令页界面,右键命令页界面,然后可以用sql去测试 但是不太好用&#…...
Java面向对象编程进阶(四)
Java面向对象编程进阶(四) 一、equals()方法的使用二、toString()方法的使用三、复习 一、equals()方法的使用 适用性:任何引用数据都可以使用。 自定义的类在没有重写Object中equals()方法的情况下,调用的就是Object类中声明的…...
【51单片机】第一个小程序 —— 点亮LED灯
学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 单片机介绍LED灯介绍练习创建第一个项目点亮LED灯LED周期闪烁 单片机介绍 单片机,英文Micro Controller Unit࿰…...
如何通过自动化有效地简化 Active Directory 操作?
我们都知道规模稍微大一点的企业为了便于计算机的管理,基本都上了微软的AD域控制器。 那么肯定就会存在这么一个问题, 不断的会有计算机加入或者是退出域控制器,批量的创建、修改、删除AD域用户,如果企业的架构需要改变ÿ…...
Java-POI导出EXCEL(动态表头)
1、主要功能 导出excel,表头有固定的和动态的。动态表头之间不能穿插固定表头。 2、使用方法 引入下方两个工具类,定义excel固定表头类。调用方法即可。 调用方法: ExcelDynamicHeader<MajorNameChangeReport> ledgerSafetyProblemEx…...
利用 Direct3D 绘制几何体—9.流水线状态对象
到目前为止展示过编写输入布局描述、创建顶点着色器和像素着色器,以及配置光栅器状态组这 3 个步骤。接下来讲如何将这些对象绑定到图形流水线上,用以实际绘制图形。大多数控制图形流水线状态的对象被统称为流水线状态对象(Pipeline State Ob…...
【开源项目】libfaketime安装、使用——小白教程
项目 Github:GitHub - wolfcw/libfaketime: libfaketime modifies the system time for a single application libfaketime安装 01.切换路径,目标路径:/usr/local (在/usr/local路径下git clone 开源项目) 切换路径指令: cd …...
java.util.concurrent包
java.util.concurrent包是Java中用于并发编程的重要工具集,提供了丰富的并发原语和组件,以简化多线程编程的复杂性,并帮助开发者编写高效、可伸缩和线程安全的并发程序。其主要功能包括以下几个方面: 一、线程池和任务执行框架 …...
Django创建项目模块+创建映射类+视图
确保你的项目已经正确链接数据库 链接数据库的工具有很多,数据库的种类也有很多,我使用的数据库是mysql,工具是pmysql,使用pymysql链接数据库,在settings文件中这么设置: DATABASES {# default: {# ENGINE: dja…...
使用AMD GPU和LangChain构建问答聊天机器人
Question-answering Chatbot with LangChain on an AMD GPU — ROCm Blogs 作者:Phillip Dang 2024年3月11日 LangChain是一个旨在利用语言模型强大功能来构建前沿应用程序的框架。通过将语言模型连接到各种上下文资源并基于给定的上下文提供推理能力,L…...
2024年808数据结构答案
1.已知带头结点单链表,H为头指针。设计一个算法,查找到链表的第m个结点(不包含头结点),并将元 素值为X的结点插入到该结点后,形成一个新的链表。 // 定义单链表节点结构 typedef struct Node {int data;struct Node* next; } Nod…...
Amazon Linux 2023 安装 Docker
Amazon Linux 2023 安装 Docker 1. 简介 在公司需要将代码部属到 Amazon Linux 2023 系统上时,去 Docker 官方文档里面看也没有针对该系统的部属文档。虽然有通用的 Linux 部属方案但不能应用包管理工具。 首先执行yum、dnf、apt,执行yum和dnf都有正确…...
接口测试(八)jmeter——参数化(CSV Data Set Config)
一、CSV Data Set Config 需求:批量注册5个用户,从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果...
GGD证明推导学习
GGD证明推导学习 这篇文章,建议先看相关的论文。这篇是我读证明的感悟,因此,不会论文的主体内容 首先,给出命题: DGI的sumary向量是一个常数 给定一个图: G { X ∈ R N D , A ∈ R N N } \mathcal{G…...
Flink难点和高频考点:Flink的反压产生原因、排查思路、优化措施和监控方法
目录 反压定义 反压影响 WebUI监控 Metrics指标 backPressureTimeMsPerSecond idleTimeMsPerSecond busyTimeMsPerSecond 反压可视化 资源优化 算子优化 数据倾斜优化 复杂算子优化 背压机制 反压预防 性能调优 内置工具 第三方工具 反压定义 在探讨Flink的性…...
Swarm - Agent 编排工具
文章目录 一、关于 Swarm(实验性、教育性)为什么选择蜂群文档 二、安装使用安装基本用法其它示例 三、Running Swarmclient.run()ArgumentsResponse字段 四、AgentFields Agent指令函数切换和更新上下文变量函数模式 流媒体评估工具 一、关于 Swarm&…...
爱站权重/百度识别图片找图
mysql自动关闭,日志看不懂,希望大神解读下Version: 5.5.48 socket: /tmp/mysql.sock port: 3306 Source distribution160515 14:15:17 mysqld_safe Number of processes running now: 0160515 14:15:17 mysqld_safe mysqld restarted160515 14:15:17 [Wa…...
企业263邮箱登录入口/深圳搜狗seo
一、方法的重构 二、静态方法和普通方法 public class demo01 {//静态方法与普通方法static void fangfa01(){System.out.println("这是一个静态方法");}void fangfa02(){System.out.println("这是一个普通方法");}public static void main(String[] args)…...
wordpress右侧悬浮插件/如何注册自己的网站
描述为输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。以下我的代码:public int FindGreatestSumOfSubArray(int[] array) {int max array[0];int temp array[…...
太原seo代理商/哈尔滨推广优化公司
最近脑子比较乱,一直昏昏沉沉的。昨天加班,突然想吃葡萄。我(可能,其实我忘了。)跟我对面的同事嘀咕了一句: 我让阿姨去买点葡萄。然后就一溜小跑的到阿姨房间跑去。回来后。我:喂,*…...
网站后缀org/百度网页翻译
Oracle基本操作(登陆、用户、表空间、exp/imp、权限)1. 登陆 (在windows上CMD下执行)1.1. 登陆sys帐户SQLPLUS sys AS SYSDBA1.2. 登陆普通用户SQLPLUS 用户名/密码SQLPLUS 用户名/密码111.111.111.111:1521/test2. 创建用户一般分为四步2.1. 创建临时表空间CREATE TEMPORARY T…...
询价网站哪个好/世界排名前十位
#include<stdio.h> int main() {char str[20];int i;scanf("%s",str);//输入数组 for (i0;i<20;i) { if (str[i]\0)//检测是否为字符数组的末尾,如果是,执行下面操作 { if (str[i-1]y)//如果是以y结尾,变y为i,…...