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

Apollo中间件技术:从入门到精通

一、引言

在Java开发的微服务架构中,配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化,传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,成为了众多Java开发者的首选。本文将带你全面了解Apollo中间件技术,从入门到精通,让你轻松掌握Apollo的使用。

二、Apollo简介

2.1 什么是Apollo

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置。配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

2.2 Apollo的主要特性

  1. 统一管理不同环境、不同集群的配置:Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。同一份代码部署在不同的集群,可以有不同的配置,比如ZooKeeper的地址等。
  2. 配置修改实时生效(热发布):用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。
  3. 版本发布管理:所有的配置发布都有版本概念,从而可以方便地支持配置的回滚。
  4. 灰度发布:支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。
  5. 权限管理:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
  6. 操作审计:所有的操作都有审计日志,可以方便地追踪问题。
  7. 客户端配置信息监控:可以方便地看到配置在被哪些实例使用。
  8. 多语言支持:提供了Java和.Net的原生客户端,方便应用集成。同时提供了Http接口,非Java和.Net应用也可以方便地使用。

三、Apollo的架构设计

3.1 Apollo的整体架构

Apollo的整体架构包含以下几个核心组件:

  1. Apollo Portal(管理界面):提供Web界面供管理员进行配置管理,包括查看、编辑、发布配置等。
  2. Apollo Admin Service(管理服务):负责配置的修改、发布等功能,服务对象是Apollo Portal。
  3. Apollo Config Service(配置服务):负责配置的读取、推送等功能,服务对象是Apollo客户端。
  4. Apollo Client(客户端):集成在各个应用中,负责与Apollo Config Service进行通信,获取最新的配置。
  5. Eureka:提供服务注册和发现功能,用于Apollo的各个组件进行服务注册和发现。
  6. Meta Server:对Eureka的服务发现接口进行封装,提供统一的服务访问入口。

3.2 Apollo的工作流程

  1. 用户在Apollo Portal上添加或修改配置信息:比如数据库的连接参数等。
  2. Apollo Portal调用Apollo Admin Service的接口进行配置的修改和发布:Apollo Admin Service将配置信息存储到数据库中,并写入数据库消息表ReleaseMessage中。
  3. Apollo Config Service通过定时任务扫描ReleaseMessage表:获取最新的配置发布消息,并通知对应的Apollo Client。
  4. Apollo Client接收到配置更新通知后:从Apollo Config Service拉取最新的配置信息,并更新本地缓存。
  5. Apollo Client将最新的配置信息通知到应用程序:应用程序根据最新的配置信息进行相应的处理。

四、Apollo的安装与配置

4.1 准备工作

在安装Apollo之前,需要确保已经安装了以下软件:

  1. Java:Apollo服务端需要Java 1.8+,Apollo客户端需要Java 1.7+。
  2. MySQL:Apollo需要MySQL 5.6.5+来存储配置信息和元数据。

4.2 下载Apollo源码或安装包

可以从Apollo的GitHub仓库下载源码进行编译,也可以下载官方提供的编译好的安装包。

4.3 创建数据库

Apollo需要两个数据库:ApolloPortalDB和ApolloConfigDB。可以从Apollo的GitHub仓库下载对应的SQL脚本,导入到MySQL中。

4.4 配置Apollo

在Apollo的源码或安装包的config目录下,找到application.properties文件,进行相关的配置,包括数据库连接信息、服务端口等。

4.5 启动Apollo服务

在Apollo的源码或安装包的scripts目录下,找到启动脚本(如demo.sh),执行启动命令即可启动Apollo服务。

五、Apollo的使用

5.1 Apollo Portal的使用

5.1.1 登录Apollo Portal

在浏览器中访问Apollo Portal的地址(如http://localhost:8070),输入用户名和密码进行登录^[2][3][9][12]^。

5.1.2 管理配置
  1. 创建应用:在Apollo Portal上创建一个新的应用,指定应用名、负责人等信息。
  2. 添加环境:为应用添加不同的环境(如DEV、TEST、PROD等)。
  3. 添加集群:为应用的不同环境添加集群(如上海集群、北京集群等)。
  4. 添加命名空间:为应用添加命名空间,用于管理不同的配置项。Apollo支持多种命名空间类型,如public(公共命名空间)、private(私有命名空间)、application(应用命名空间)等。
  5. 添加配置项:在指定的命名空间下添加配置项,包括配置项名、配置项值、数据类型等信息。
  6. 发布配置:在添加或修改完配置项后,点击发布按钮将配置发布到指定的环境和集群中。

5.2 Apollo Client的使用

5.2.1 引入Apollo Client依赖

在需要使用Apollo配置的应用中,引入Apollo Client的依赖。以Maven项目为例,可以在pom.xml文件中添加以下依赖:

xml复制代码
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>最新版本号</version>
</dependency>
5.2.2 配置Apollo Client

在应用的配置文件中(如application.properties或application.yml),配置Apollo Client的相关参数,包括应用ID、环境、Meta Server地址等。例如:

properties复制代码
app.id=your-app-id
env=DEV
apollo.meta=http://localhost:8080
5.2.3 获取配置

在应用程序中,可以通过Apollo Client提供的API获取配置。例如:

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
public class ApolloConfigExample {
public static void main(String[] args) {
// 获取默认namespace的配置
Config config = ConfigService.getAppConfig();
String someKey = config.getProperty("some.key", "defaultValue");System.out.println("some.key = " + someKey);
// 获取指定namespace的配置
Config customNamespaceConfig = ConfigService.getConfig("customNamespace");
String anotherKey = customNamespaceConfig.getProperty("another.key", "defaultValue");System.out.println("another.key = " + anotherKey);}
}
5.2.4 监听配置变化

Apollo Client还提供了监听配置变化的功能,当配置发生变化时,可以自动通知应用程序进行相应的处理。例如:

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import com.ctrip.framework.apollo.spring.boot.ApolloApplicationInitializer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableApolloConfig
public class ApolloConfigChangeListenerExample {
public static void main(String[] args) {SpringApplication.run(ApolloConfigChangeListenerExample.class, args);}
@Bean
public ApolloApplicationInitializer apolloApplicationInitializer() {
return new ApolloApplicationInitializer();}
@Bean
public ConfigChangeListener configChangeListener() {
return new ConfigChangeListener() {
@Override
public void onChange(ConfigChangeEvent changeEvent) {
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);System.out.println(String.format(
"Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s",change.getPropertyName(), change.getOldValue(),change.getNewValue(), change.getChangeType()));}}};}
}

六、Apollo的高级特性

6.1 灰度发布

Apollo支持配置的灰度发布,即发布的配置信息对一部分服务器生效,对一部分服务器不生效。灰度发布可以通过IP地址、应用实例ID等方式进行限制。例如,在发布配置时,可以选择只对某个IP地址范围内的应用实例生效,观察一段时间没有问题后再推给所有应用实例。

6.2 权限管理

Apollo提供了完善的权限管理机制,对配置的管理分为了编辑和发布两个环节。管理员可以为不同的用户或用户组分配不同的权限,从而确保配置的安全性和合规性。

6.3 操作审计

Apollo记录了所有的操作日志,包括配置的增删改查、发布、回滚等操作。管理员可以通过审计日志追踪问题的根源,确保配置的安全性和可追溯性。

6.4 客户端配置信息监控

Apollo提供了客户端配置信息监控功能,可以方便地看到配置在被哪些实例使用。这对于故障排查和性能优化非常有帮助。

七、Apollo与Spring Cloud Config的对比

7.1 功能对比

功能点ApolloSpring Cloud Config
配置管理界面提供统一的Web界面需要结合Git等工具使用
配置实时推送支持(1秒内)不支持(需要轮询)
灰度发布支持不支持
权限管理完善需要结合Spring Security等使用
操作审计提供需要结合其他日志系统使用
客户端语言支持Java、.Net等Java(Spring Cloud生态)

7.2 性能对比

在性能方面,Apollo和Spring Cloud Config各有优劣。Apollo通过长轮询和消息队列的方式实现了配置的实时推送,性能较高;而Spring Cloud Config则需要客户端定期轮询配置服务器,性能相对较低。但是,在实际应用中,性能的差异可能并不会对大多数场景产生显著影响。

7.3 生态对比

Spring Cloud Config作为Spring Cloud生态的一部分,与Spring Cloud的其他组件(如Eureka、Zuul等)有着良好的集成和兼容性。而Apollo虽然也提供了对Spring Cloud的支持,但在生态方面相对较弱。不过,Apollo凭借其强大的功能和灵活的架构,在越来越多的企业中得到了广泛的应用。

八、Apollo的常见问题与解决方案

8.1 无法连接到Apollo服务器

可能的原因包括Apollo服务器未启动、网络问题、配置错误等。解决方案包括检查Apollo服务器的启动状态、检查网络连接、检查Apollo Client的配置等。

8.2 发布配置时出现问题

可能的原因包括权限不足、配置格式错误、数据库连接问题等。解决方案包括检查用户的权限、检查配置的格式、检查数据库的连接状态等。

8.3 客户端无法获取最新配置

可能的原因包括Apollo服务器未推送最新配置、客户端缓存未更新、客户端配置错误等。解决方案包括检查Apollo服务器的日志、检查客户端的缓存策略、检查客户端的配置等。

8.4 灰度发布未生效

可能的原因包括灰度发布规则配置错误、客户端未正确识别灰度发布规则等。解决方案包括检查灰度发布规则的配置、检查客户端的日志等。

九、Apollo的未来展望

随着微服务架构的普及和复杂度的增加,配置管理的重要性日益凸显。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,在越来越多的企业中得到了广泛的应用。未来,Apollo将继续优化和完善其功能,提高性能和稳定性,为开发者提供更加便捷、高效的配置管理服务。

同时,随着人工智能、大数据等技术的不断发展,Apollo也将积极探索与这些技术的结合点,为开发者提供更加智能、全面的配置管理解决方案。例如,通过引入机器学习算法对配置进行智能分析和预测,提高配置的准确性和可靠性;通过大数据技术对配置的使用情况进行实时监控和分析,为开发者提供更加精准的运维支持等。

十、总结

通过本文的介绍,相信你已经对Apollo中间件技术有了全面的了解。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,在微服务架构中发挥着越来越重要的作用。作为Java开发者,掌握Apollo的使用将大大提高你的开发效率和系统的可维护性。希望本文能够对你有所帮助,如果你在使用过程中遇到任何问题或疑问,欢迎随时向我提问。

相关文章:

Apollo中间件技术:从入门到精通

一、引言 在Java开发的微服务架构中&#xff0c;配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化&#xff0c;传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心&#xff0c;凭借其强大的功能和灵活的架构&#xff0c;成为…...

汽车行业的MES系统方案(附案例资料合集)

针对汽车行业的MES系统方案&#xff0c;以下是一些关键点和实施案例&#xff1a; 核心功能&#xff1a; 实时监控&#xff1a;MES系统通过传感器和物联网技术实时监控生产线上的每一个环节&#xff0c;确保信息的及时传递。数据分析&#xff1a;系统对收集的数据进行深度分析&a…...

Python入门:7.Pythond的内置容器

引言 Python 提供了强大的内置容器&#xff08;container&#xff09;类型&#xff0c;用于存储和操作数据。容器是 Python 数据结构的核心部分&#xff0c;理解它们对于写出高效、可读的代码至关重要。在这篇博客中&#xff0c;我们将详细介绍 Python 的五种主要内置容器&…...

单片机与MQTT协议

MQTT 协议简述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布 / 订阅&#xff08;publish/subscribe&#xff09;模式的 “轻量级” 通讯协议&#xff0c;该协议构建于 TCP/IP 协议上&#xf…...

记录命令行操作树莓派Wifi的方式

打开WiFi rfkill unblock wlan 关闭WiFi rfkill block wlan 设置可连接的WiFi 方法一&#xff08;bullseye及以前版本才可用&#xff0c;bookworm版本&#xff09; sudo nano /etc/wpa_supplicant/wpa_supplicant.conf network{ssid"wifi_name"psk"wifi_pas…...

Docker 安装mysql ,redis,nacos

一、Mysql 一、Docker安装Mysql 1、启动Docker 启动&#xff1a;sudo systemctl start dockerservice docker start 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)

文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步&#xff1a;计算 (a*c) (-b*d)i2.1.4 第2步&#xff1a;计算 (a*d) (b*c)i2.1.5 第3步&#xff1a;计算结果合并 2.2 算法实现&#xff08;UseVectors&#xff09;2.…...

curl 放弃对 Hyper Rust HTTP 后端的支持

curl 放弃了对使用 Rust 编写 Hyper HTTP 后端的支持&#xff0c;因为用户和开发者对此功能的需求很少。 curl 创始人兼核心开发者 Daniel Stenberg 表示&#xff0c;尽管这项工作最初由 ISRG 赞助并且看起来很有希望&#xff0c;但 Hyper 支持多年来一直处于实验阶段&#xf…...

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中&#xff0c;选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片&#xff0c;凭借其卓越的能效比、多功能扩展性和优秀的实时性能&#xff0c;已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…...

RBAC权限控制

1、Spring Security 是一个功能强大的Java安全框架&#xff0c;它提供了全面的安全认证和授权的支持。 2 SpringSecurity配置类&#xff08;源码逐行解析&#xff09; Spring Security的配置类是实现安全控制的核心部分 开启Spring Security各种功能&#xff0c;以确保Web应…...

Linux高并发服务器开发 第六天(rwx 对于目录和文件的区别 gcc编译器 动态库静态库)

目录 1.rwx 对于目录和文件的区别 2.gcc 编译器 2.1编译过程 2.2gcc 的其他参数 3.动态库和静态库 3.1函数库 1.rwx 对于目录和文件的区别 r 文件的内容可以被查看。支持cat、more、head...vim &#xff1b;目录的内容可以被查看。ls、tree …...

如何使用远程控制工具管理你的计算机系统

在现代工作环境中&#xff0c;远程控制技术越来越重要&#xff0c;尤其是对于系统管理员、技术支持人员以及需要远程工作的人来说。远程控制不仅仅是便捷&#xff0c;更是提高工作效率、快速解决问题的重要手段。今天&#xff0c;我们将讨论一些常见的远程控制工具&#xff0c;…...

在K8S中,CNI有什么作用?

在kubernetes中&#xff0c;Container Network Interface(CNI)起着至关重要的作用&#xff0c;主要解决了容器网络配置及通信的问题&#xff0c;确保了Pod间网络连通性及其外部世界的通信。CNI的具体作用包括但不限于以下几个方面。 1. 网络配置自动化&#xff1a; 当kuberne…...

C语言性能优化:从基础到高级的全面指南

引言 C 语言以其高效、灵活和功能强大而著称&#xff0c;被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而&#xff0c;要写出高性能的 C 语言代码&#xff0c;需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术&#xff0c;并通过…...

JS中Symbol (符号)数据类型详解和应用场景

JavaScript中Symbol数据类型详解 Symbol是ES6引入的一种原始数据类型&#xff0c;表示唯一的标识符。它是通过Symbol()函数生成的&#xff0c;每次调用都会返回一个独一无二的值。Symbol值的主要用途是为对象的属性提供唯一标识&#xff0c;以避免属性名冲突。 特点 唯一性 每…...

Go gin框架(详细版)

目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go?改动的地方 index.html?改动的地方 style.css?改…...

Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid

目录 1. 进程的等待 1.1 为什么需要等待 2. 进程等待的方法 1. wait 2. waitpid 3. 获取子进程status 4. 阻塞与非阻塞等待 续接前文&#xff1a; Linux系统 —— 进程控制系列 - 进程的创建与终止 &#xff1a;fork与exit-CSDN博客https://blog.csdn.net/hedhjd/artic…...

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述&#xff1a;在blender中合并的模型导出为glb&#xff0c;在threejs中导入仍显示多个mesh&#xff0c;并不是统一的整体&#xff0c;导致需要整体高亮或者使用DragControls等不能统一控制。 原因&#xff1a;模型有多个材质&#xff0c;在blender中合并的时候&#xff0c;…...

探索多模态大语言模型(MLLMs)的推理能力

探索多模态大语言模型&#xff08;MLLMs&#xff09;的推理能力 Multimodal Large Language Models (MLLMs) flyfish 原文&#xff1a;Exploring the Reasoning Abilities of Multimodal Large Language Models (MLLMs): A Comprehensive Survey on Emerging Trends in Mult…...

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

wireshark 下载链接&#xff1a;https://pan.quark.cn/s/eab7f1e963be 提取码&#xff1a;rRAg 链接失效&#xff08;可能会被官方和谐&#xff09;可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中&#xff0c;在wireshark…...

单片机实物成品-007 汽车防盗系统(代码+硬件+论文)

汽车尾气监测系统&#xff08;温度震动传感器 红外热释电GPS三个指示灯蜂鸣器正常模式防盗模式wifi传输控制送APP源码 &#xff09; 把该系统划分为两个不同设计主体&#xff0c;一方面为硬件控制主体&#xff0c;通过C语言来编码实现&#xff0c;以STM32开发板为核心控制器&a…...

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…...

windows系统下使用cd命令切换到D盘的方法

windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端&#xff0c;使用 cd d:命令&#xff0c;无法将当前目录切换到D盘 解决方法 方法一&#xff1a;使用下面这条命令 cd /d d:运…...

word参考文献第二行缩进对齐

刚添加完参考文献的格式是这样&#xff1a; ”段落“—>缩进修改、取消孤行控制 就可以变成...

Springboot关于格式化记录

日期格式化 返回前端日期需要格式化 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version> </dependency>JsonFormat(pattern "yyyy-MM-dd…...

1.business english--build rapport

build rapport with someone 建立融洽关系 Salespeople often try to build rapport with customers to boost sales. user a variety of appropriate questions. answer the question according to your experience. Do you know how to make a good connection with others…...

发明专利与实用新型专利申请过程及自助与代办方式对比

申请专利&#xff08;发明专利、实用新型专利、外观设计专利&#xff09;有两种方式&#xff1a;1、自己直接向国家知识产权局申请。2、通过专利代办处申请。以下是对这两种专利类型&#xff08;发明专利、实用新型专利&#xff09;申请过程及两种申请方式的详细介绍和对比,参考…...

设计模式-创建型-工厂方法模式

什么是工厂方法模式&#xff1f; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是 创建型设计模式之一&#xff0c;目的是通过定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪个类。简而言之&#xff0c;工厂方法模式通过延迟对象的创建过程到子类来…...

如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?

目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们&#xff0c;学术论文写作的旅程是不是感觉像是走进了迷雾森…...

Linux驱动开发--字符设备驱动开发

一、概述 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 Linux 应用程序对驱动程…...

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…...

828华为云征文|使用sysbench对Flexus X实例对mysql进行性能测评

目录 一、Flexus X实例概述 1.1?Flexus X实例 1.2?在mysql方面的优势 二、在服务器上安装MySQL 2.1 在宝塔上安装docker 2.2 使用宝塔安装mysql 2.3 准备测试数据库和数据库表 三、安装sysbench并进行性能测试 3.1 使用yum命令sysbench 3.2?运行?sysbench 并进行…...

数据结构:堆

目录 1.堆的概念 2.堆的结构 3.堆的初始化 4.堆的销毁 5.堆的插入 6.堆的删除 7.判断堆是否为空 1.堆的概念 堆的性质&#xff1a; 堆中某个结点的值总是不大于或不小于其父结点的值&#xff1b; 堆总是一棵完全二叉树。 以下堆的结构默认大堆 &#xff1a; 2.堆的结…...

洪水灾害多智能体分布式模拟示例代码

1. 环境定义&#xff1a;支持灾害动态、地理数据和分布式架构 import numpy as np import random import matplotlib.pyplot as plt# 新疆主要城市及邻接关系 XINJIANG_CITIES {Urumqi: [Changji, Shihezi],Changji: [Urumqi, Shihezi, Turpan],Shihezi: [Urumqi, Changji, K…...

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…...

Selenium实践总结

1.使用显示等待而不是隐式等待 隐式等待可能会导致不可预测的测试行为&#xff0c;尤其是在动态 Web 应用程序中。显式等待&#xff0c;它允许您 等待特定条件发生后再继续测试&#xff0c;这种方法提供了更多的控制和可靠性。 WebDriverWait wait new WebDriverWait(drive…...

华为麦芒5(安卓6)termux记录 使用ddns-go,alist

下载0.119bate1 安卓5和6版本,不能换源,其他源似乎都用不了,如果root可以直接用面具模块 https://github.com/termux/termux-app/releases/download/v0.119.0-beta.1/termux-app_v0.119.0-beta.1apt-android-5-github-debug_arm64-v8a.apk 安装ssh(非必要) pkg install open…...

Springboot jar包加密加固并进行机器绑定

获取机器码&#xff0c;通过classfinal-fatjar-1.2.1.jar来获取机器码 命令&#xff1a;java -jar classfinal-fatjar-1.2.1.jar -C 对springboot打包的jar进行加密功能 java -jar classfinal-fatjar-1.2.1.jar -file lakers-ljxny-3.0.0.jar -packages com.lygmanager.laker…...

【Microi吾码】开源力量赋能低代码创新,重塑软件开发生态格局

我的个人主页 文章专栏&#xff1a;Microi吾码 一、引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;软件开发的需求呈现出爆发式增长。企业为了在激烈的市场竞争中脱颖而出&#xff0c;不断寻求创新的解决方案以加速数字化转型。传统的软件开发方式往往面临着开发周期长、技…...

系统思考—冰山模型

“卓越不是因机遇而生&#xff0c;而是智慧的选择与用心的承诺。”—— 亚里士多德 卓越&#xff0c;从来不是一次性行为&#xff0c;而是一种习惯。正如我们在日常辅导中常提醒自己&#xff1a;行为的背后&#xff0c;隐藏着选择的逻辑&#xff0c;而选择的根源&#xff0c;源…...

Java读取InfluxDB数据库的方法

本文介绍基于Java语言&#xff0c;读取InfluxDB数据库的方法&#xff0c;包括读取InfluxDB的所有数据库&#xff0c;以及指定数据库中的measurement、field、tag等。 首先&#xff0c;创建一个Java项目&#xff0c;用于撰写代码。如果大家是基于IDEA来创建项目&#xff0c;则可…...

【mybatis-plus问题集锦系列】在mybatisplus中无法autowired的原因排查及解决

mybatisplus简化了我们做数据操作&#xff0c;大大提升了我们的开发速度&#xff0c;但是今天在做测试的时候&#xff0c;突然报了这么个错误&#xff0c;排查好久才找到解决方案&#xff0c;特此记录下 问题复现 这里的测试方法报错&#xff0c;通过不了测试 org.springf…...

python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作

步骤 1&#xff1a;安装必要的库 首先&#xff0c;安装 pywin32 和 selenium&#xff1a; pip install pywin32 selenium 如果使用的是 macOS&#xff0c;可以安装 pyobjc&#xff1a; pip install pyobjc 步骤 2&#xff1a;使用 pywin32 复制图像到剪贴板 在 Windows 系统中…...

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档&#xff1a; chooseMessageFile 微信小程序读取文件&#xff0c;请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…...

点亮核心板小灯 STM32U575

将核心板上的运行状态指示灯点亮 任务分析 灯如何点亮 如何看开发板原理图 开发板上的灯硬件组成 原理图 原理图&#xff08;Schematic Diagram&#xff09;&#xff0c;也称为电路图或电气图&#xff0c;是一种图形表示方法&#xff0c;用于展示电子系统或电路的工作原理和…...

“图书馆服务自动化”:基于SSM框架的图书借阅系统开发

3.1系统的需求分析 需求分析阶段是设计系统功能模块的总方向&#xff0c;可以这样来说&#xff0c;系统的整个的开发流程以及设计进度&#xff0c;基本上都是以需求分析为基本依据的[10]。需求分析阶段可以确定系统的基本功能设计&#xff0c;以及在最后的系统验收阶段&#xf…...

顶顶通呼叫中心中间件的三种呼叫方式(mod_cti基于FreeSWITCH)

顶顶通呼叫中心共有三种呼叫方式&#xff1a; 手拨呼叫点击呼叫自动外呼 联系我们 有意向了解呼叫中心中间件的用户&#xff0c;可以点击该链接添加工作人员&#xff1a;https://blog.csdn.net/H4_9Y/article/details/136148229 手拨呼叫 手拨呼叫属于常规的呼叫方式&…...

HCIA笔记9--NAT、ACL与链路聚合

1. ACL ACL: 访问控制列表, Access Control List。 通过定义规则来允许或拒绝流量的通过。 1.1 ACL分类 1.2 配置实例 如图所示&#xff0c;对R2的访问只允许192.168.1.0/24网段。 我们可以配置基本acl来限制 acl 2000 acl number 2000 rule 5 permit source 192.168.1.0 0…...

【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器

&#xff08;配置出来的web服务器又叫虚拟主机……&#xff09; 下载apache2 sudo apt update sudo apt install apache2 &#xff08;一&#xff09;ip相同 web端口不同的web服务器 进入 /var/www/html 创建站点一和站点二的目录文件&#xff08;目录文件名自定义哈&#x…...

“校园健康数据管理”:疫情管控系统的信息收集与分析

3.1可行性分析 通过对系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1 技术可行性 1.硬件可行性分析 校园疫情管控系统系统的硬件要求方面不存在特殊的要求&#xff0c…...