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

分布式系统中的 Kafka:流量削峰与异步解耦(二)

Kafka 在分布式系统中的应用案例

电商订单系统

在电商领域,订单系统是核心业务模块之一,涉及多个复杂的业务环节和系统组件之间的交互。以常见的电商购物流程为例,当用户在电商平台上下单后,订单创建服务会首先接收到用户的订单请求,这个请求中包含了订单的基本信息,如商品种类、数量、价格,以及用户的相关信息等 。

在传统的同步处理模式下,订单创建服务需要依次调用库存服务进行库存扣减,调用支付服务进行支付处理,调用物流服务安排发货,以及调用消息服务通知用户订单状态等操作。如果其中任何一个服务出现故障或者响应延迟,都会导致整个订单创建流程的阻塞,用户可能会面临长时间的等待,甚至订单创建失败的情况 。

引入 Kafka 后,订单创建服务将订单消息发送到 Kafka 的 “order - topic” 中,然后立即返回给用户订单创建成功的响应,实现了异步处理。库存服务、支付服务、物流服务和消息服务分别从 “order - topic” 中订阅消息,并根据自身的业务逻辑进行处理。例如,库存服务在接收到订单消息后,会检查库存是否充足,如果充足则进行库存扣减操作,并将扣减结果反馈给相关系统;支付服务会处理订单的支付流程,验证用户的支付信息,完成支付操作,并更新订单的支付状态;物流服务会根据订单信息安排发货,生成物流单号,并跟踪物流状态;消息服务会向用户发送订单创建成功、支付成功、发货通知等消息,让用户及时了解订单的进展情况 。

在流量削峰方面,Kafka 同样发挥着重要作用。在电商促销活动期间,如 “双 11”“618” 等,订单请求量会呈爆发式增长,可能在短时间内达到平时的数倍甚至数十倍。如果这些请求直接涌入订单处理系统,很容易导致系统过载,无法正常响应。通过 Kafka 作为缓冲,订单请求被发送到 Kafka 的 “order - topic” 中,Kafka 可以快速接收并存储这些订单消息,即使在流量高峰期间,也能保证订单请求不会丢失。然后,订单处理系统可以根据自身的处理能力,从 Kafka 中逐步拉取订单消息进行处理,实现了对流量的有效削峰,保证了订单系统在高并发情况下的稳定运行 。

日志处理系统

在当今的分布式系统中,日志处理是一项至关重要的任务。随着业务的不断发展和系统规模的日益扩大,系统产生的日志数据量也在呈指数级增长。这些日志数据包含了丰富的信息,如系统运行状态、用户行为、业务操作等,对于系统的监控、故障排查、性能优化和业务分析都具有重要价值 。

Kafka 在日志处理系统中扮演着核心角色。它可以高效地收集来自各个应用程序、服务器节点的日志数据。例如,在一个大型互联网公司的分布式系统中,有数百台甚至数千台服务器在同时运行,每个服务器上的应用程序都会产生大量的日志。通过在这些服务器上部署 Kafka Producer,将日志数据发送到 Kafka 集群中,Kafka 可以快速地接收并存储这些日志消息,实现了日志数据的集中收集 。

Kafka 的高吞吐量和可扩展性使其能够轻松应对海量日志数据的传输和存储需求。它可以将日志消息持久化到磁盘,保证数据的可靠性,即使在系统出现故障时,日志数据也不会丢失。同时,Kafka 的分区机制可以将日志数据分散存储在多个 Broker 节点上,提高了存储的效率和可扩展性 。

在日志处理流程中,Kafka 通常会与 ELK(Elasticsearch、Logstash、Kibana)等工具集成,形成一个完整的日志处理和分析平台。Logstash 作为数据收集和处理引擎,从 Kafka 中拉取日志数据,并对数据进行过滤、清洗、转换等操作,使其符合后续处理的要求。例如,Logstash 可以从日志数据中提取关键信息,如时间戳、日志级别、日志内容等,并将其转换为结构化的数据格式 。

Elasticsearch 是一个分布式搜索引擎,它接收经过 Logstash 处理后的日志数据,并将其存储在索引中,提供高效的全文检索和数据分析功能。通过 Elasticsearch,用户可以快速地查询和分析日志数据,例如查找特定时间范围内的错误日志、统计用户行为数据等 。

Kibana 则是一个可视化平台,它与 Elasticsearch 集成,为用户提供了直观的界面,用于展示和分析日志数据。用户可以通过 Kibana 创建各种图表、报表,对日志数据进行可视化分析,从而更直观地了解系统的运行状态和业务情况 。

通过 Kafka 与 ELK 的集成,实现了日志数据的收集、传输、处理、存储和分析的全流程自动化,为企业提供了强大的日志管理和分析能力,有助于及时发现系统故障、优化系统性能、挖掘业务价值 。

实战:Spring Boot 集成 Kafka 实现流量削峰与异步解耦

环境搭建

  1. Kafka 和 Zookeeper 安装与配置:Kafka 运行依赖于 Zookeeper,从 Kafka 2.8.0 版本开始,它内置了 Zookeeper,简化了部署流程 。若使用的是低于该版本的 Kafka,则需先单独安装和配置 Zookeeper。以 Linux 系统为例,首先从 Apache Kafka 官网下载最新稳定版本的 Kafka 安装包,解压到指定目录,如 “/usr/local/kafka” 。在 “server.properties” 配置文件中,可根据实际需求调整关键参数,如 “broker.id”,每个 Kafka 节点都必须有一个唯一的标识,用于在集群中区分不同的节点;“listeners” 指定 Kafka 监听的地址和端口,默认是 9092,若部署在多台机器上,需确保端口未被占用且可被其他组件访问;“log.dirs” 指定 Kafka 日志存储目录,建议选择磁盘空间充足、I/O 性能较好的路径,以保证日志的稳定存储和读写效率 。若使用独立的 Zookeeper,需先下载 Zookeeper 安装包并解压,在 “zoo.cfg” 配置文件中设置数据存储目录、客户端连接端口等参数,启动 Zookeeper 服务后,再启动 Kafka。
  1. Spring Boot 项目创建与依赖引入:使用 Spring Initializr(https://start.spring.io/)快速创建一个基础的 Spring Boot 项目,在创建过程中,填写项目的基本信息,如 Group、Artifact 等 。在依赖选择页面,勾选 “Spring for Apache Kafka” 依赖,该依赖提供了与 Kafka 集成的核心功能,方便在 Spring Boot 项目中使用 Kafka 的生产者和消费者功能 。如果项目还需要构建 RESTful API 来与外部系统交互,可同时勾选 “Spring Web” 依赖;若涉及数据库操作,还需勾选相应的 JDBC 或 Spring Data 依赖 。创建完成后,将项目导入到常用的 IDE(如 Intellij IDEA、Eclipse 等)中 。

代码实现

  1. 生产者代码示例:在 Spring Boot 项目中,创建一个 Kafka 生产者服务类。首先,通过依赖注入获取 KafkaTemplate,KafkaTemplate 是 Spring Kafka 提供的核心类,封装了发送消息到 Kafka 的详细逻辑,提供了简单易用的 API 。例如:
 

import org.springframework.kafka.core.KafkaTemplate;

import org.springframework.stereotype.Service;

@Service

public class KafkaProducerService {

private final KafkaTemplate<String, String> kafkaTemplate;

public KafkaProducerService(KafkaTemplate<String, String> kafkaTemplate) {

this.kafkaTemplate = kafkaTemplate;

}

public void sendMessage(String topic, String message) {

kafkaTemplate.send(topic, message);

}

}

在上述代码中,KafkaProducerService 类的构造函数接收一个 KafkaTemplate 实例,并将其赋值给成员变量 kafkaTemplate 。sendMessage 方法接收两个参数,topic 表示消息要发送到的主题,message 是要发送的消息内容 。在方法内部,通过调用 kafkaTemplate 的 send 方法将消息发送到指定的主题 。在实际应用中,可在某个业务逻辑处理方法中调用该服务类来发送消息,比如在一个订单创建的 Controller 中:

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class OrderController {

private final KafkaProducerService kafkaProducerService;

@Autowired

public OrderController(KafkaProducerService kafkaProducerService) {

this.kafkaProducerService = kafkaProducerService;

}

@PostMapping("/orders")

public String createOrder(@RequestBody String orderInfo) {

// 假设这里生成订单ID

String orderId = "123456";

// 拼接消息内容

String message = "Order created: " + orderId + ", " + orderInfo;

// 发送消息到指定主题

kafkaProducerService.sendMessage("order - topic", message);

return "Order created successfully, ID: " + orderId;

}

}

在 OrderController 类中,通过依赖注入获取 KafkaProducerService 实例 。在 createOrder 方法中,当接收到创建订单的 POST 请求时,首先生成订单 ID,然后拼接包含订单信息的消息,最后调用 kafkaProducerService 的 sendMessage 方法将消息发送到 “order - topic” 主题 。

  1. 消费者代码示例:创建一个 Kafka 消费者类,通过使用 @KafkaListener 注解来监听指定的主题 。例如:
 

import org.springframework.kafka.annotation.KafkaListener;

import org.springframework.stereotype.Component;

@Component

public class KafkaConsumerService {

@KafkaListener(topics = "order - topic", groupId = "order - group")

public void receiveMessage(String message) {

// 处理接收到的消息

System.out.println("Received message: " + message);

// 这里可以添加具体的业务逻辑,如更新订单状态、通知相关系统等

}

}

在上述代码中,KafkaConsumerService 类使用 @Component 注解标记为 Spring 组件,以便 Spring 容器进行管理 。@KafkaListener 注解指定了该方法要监听的主题为 “order - topic”,消费者组为 “order - group” 。当有消息到达 “order - topic” 且属于 “order - group” 消费者组时,会自动触发 receiveMessage 方法,将接收到的消息作为参数传入该方法 。在方法内部,目前只是简单地打印消息,实际应用中可根据业务需求添加具体的处理逻辑,如解析消息中的订单信息,更新订单状态到数据库,调用其他服务通知相关人员等 。

配置优化

  1. 生产者配置参数优化:在 Spring Boot 的 application.properties(或 application.yml)文件中,可对 Kafka 生产者的配置参数进行优化 。例如:
 

# Kafka 基础配置

spring.kafka.bootstrap-servers=localhost:9092

# 生产者配置

spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer

spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

spring.kafka.producer.acks=all

spring.kafka.producer.retries=3

spring.kafka.producer.batch-size=16384

spring.kafka.producer.linger.ms=10

“acks” 参数用于控制消息的持久性,取值为 “all” 时,表示分区 leader 必须等待消息被成功写入到所有的 ISR 副本(同步副本)中才认为 produce 请求成功,提供了最高的消息持久性保证,但可能会降低吞吐量;若对消息持久性要求不高,可设置为 “1”,表示 leader 副本必须应答此 produce 请求并写入消息到本地日志,之后 produce 请求被认为成功,这样能提高一定的吞吐量,但存在消息丢失的风险 。“retries” 表示 Producer 发送消息失败重试的次数,当发送消息出现瞬时失败,如网络波动、副本数量不足等情况时,Producer 会尝试重新发送,设置合理的重试次数可提高消息发送的成功率 。“batch - size” 指定了 Producer 按照 batch 进行发送时,batch 的大小,默认是 16KB,当 batch 满了后,Producer 会把消息发送出去,适当增大该值可减少网络请求次数,提高发送效率,但也会占用更多的内存 。“linger.ms” 表示 Producer 在发送 batch 前等待的时间,默认是 0,表示不做停留,为了减少网络 IO,提升整体的性能,建议设置一个合理的值,如 5 - 100ms,这样 Producer 会在等待时间内尽量攒够更多的消息再发送,进一步提高吞吐量 。

  1. 消费者配置参数优化:同样在 application.properties(或 application.yml)文件中,优化 Kafka 消费者的配置参数:
 

# 消费者配置

spring.kafka.consumer.group-id=order - service - group

spring.kafka.consumer.auto-offset-reset=earliest

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer

spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

spring.kafka.consumer.properties.spring.json.trusted.packages=*

“group - id” 标记消费者所属的消费者组,同一消费者组内的消费者会共同消费一个或多个 Topic 中的消息,且一条消息只会被组内的一个消费者消费,通过合理设置消费者组,可实现消息的并行消费和负载均衡 。“auto - offset - reset” 用于设置当 Kafka 中没有初始偏移量或当前偏移量在服务器中不存在(如数据被删除了)时的处理策略,取值为 “earliest” 表示自动重置偏移量到最早的偏移量,即从 Topic 的开头开始消费消息;取值为 “latest”(默认值)表示自动重置偏移量为最新的偏移量,即从最新的消息开始消费;取值为 “none” 表示如果消费组原来的偏移量不存在,则向消费者抛异常 。在实际应用中,可根据业务需求选择合适的策略,如在数据监控场景中,可能需要从最早的消息开始消费,以确保不遗漏任何数据;而在一些实时性要求较高的业务场景中,可选择从最新的消息开始消费 。“key - deserializer” 和 “value - deserializer” 指定接收消息的 key 和 value 的反序列化类型,需与生产者端的序列化类型相对应,以确保消息能够正确地被解析 。“spring.json.trusted.packages” 用于设置允许反序列化的包,当消费者接收到的消息是 JSON 格式且包含自定义对象时,需要设置该参数,“*” 表示允许所有包,在生产环境中,应根据实际情况进行更细粒度的配置,以提高安全性 。

总结与展望

总结 Kafka 优势

在分布式系统的复杂生态中,Kafka 凭借其独特的设计理念和强大的功能特性,成为了解决流量削峰和异步解耦问题的关键技术。它以高吞吐量、低延迟和可扩展性为基石,构建了一个可靠的消息传递和数据处理平台 。

从流量削峰的角度看,Kafka 就像是分布式系统中的 “流量调节阀”。在面对如电商促销、社交媒体热点等场景下的突发流量时,Kafka 能够凭借其消息队列的缓冲机制,将大量的请求以消息的形式快速存储起来,避免下游服务因瞬间的高负载而崩溃。通过合理配置生产者和消费者的参数,Kafka 可以灵活地控制消息的发送和消费速率,实现对流量的有效削峰,确保系统在高并发情况下的稳定运行 。

在异步解耦方面,Kafka 则扮演着 “系统解耦器” 的角色。它打破了传统分布式系统中组件之间的强依赖关系,通过异步消息传递的方式,使生产者和消费者能够独立地进行开发、部署和扩展。这种解耦不仅降低了系统的耦合度,提高了系统的可维护性和可扩展性,还增强了系统的故障隔离能力,使得单个组件的故障不会影响整个系统的正常运行 。

未来应用趋势

展望未来,随着云计算、大数据、人工智能等技术的不断发展,Kafka 的应用前景将更加广阔。在云原生领域,Kafka 与 Kubernetes 等容器编排工具的集成将更加紧密,实现更加便捷的部署、管理和弹性扩展 。通过 Kubernetes 的自动化部署和资源管理能力,Kafka 集群可以根据实际负载动态调整节点数量,提高资源利用率,降低运维成本。同时,Kafka 也将更好地支持多租户环境,通过更细粒度的访问控制和资源隔离,满足不同租户的多样化需求 。

在大数据和人工智能领域,Kafka 将继续发挥其作为数据管道的核心作用。随着数据量的持续增长和实时性要求的不断提高,Kafka 将与 Flink、Spark 等大数据处理框架以及 TensorFlow、PyTorch 等人工智能框架进行更深入的集成 。例如,在实时机器学习场景中,Kafka 可以作为实时数据的采集和传输通道,将用户行为数据、业务事件数据等实时传递给机器学习模型,实现模型的实时训练和更新,为业务决策提供更及时、准确的支持 。同时,Kafka 还可能引入更多的智能数据路由和处理机制,利用机器学习和人工智能技术,根据数据的特征和业务需求,动态调整数据的路由和处理策略,提高数据处理的效率和准确性 。

总之,Kafka 作为分布式系统中的重要组件,在流量削峰和异步解耦方面展现出了卓越的能力。未来,随着技术的不断进步,Kafka 将不断演进和发展,为分布式系统的发展提供更强大的支持 。

相关文章:

分布式系统中的 Kafka:流量削峰与异步解耦(二)

Kafka 在分布式系统中的应用案例 电商订单系统 在电商领域&#xff0c;订单系统是核心业务模块之一&#xff0c;涉及多个复杂的业务环节和系统组件之间的交互。以常见的电商购物流程为例&#xff0c;当用户在电商平台上下单后&#xff0c;订单创建服务会首先接收到用户的订单…...

从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页

如果php.ini已经加入了如下的内容还是报错 &#xff1a; upload_max_filesize 1024M post_max_size 1024M 那就是因为阿帕奇导致&#xff1a;...

FramePack 安装指南(中文)

FramePack 安装指南&#xff08;中文&#xff09; -Windows FramePack 是最前沿的 AI 视频生成框架&#xff0c;以极小的硬件需求颠覆视频创作&#xff01;它能在仅 6GB 笔记本 GPU 内存上&#xff0c;驱动 13B 模型以 30 FPS 生成超长 120 秒视频&#xff0c;几乎无内容限制&…...

【NLP入门系列三】NLP文本嵌入(以Embedding和EmbeddingBag为例)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…...

电子电气架构 --- 软件供应商如何进入OEM体系

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

检索增强生成(RAG)领域关键数据集综述:分类、挑战与展望

检索增强生成&#xff08;RAG&#xff09;领域关键数据集综述&#xff1a;分类、挑战与展望 摘要 检索增强生成&#xff08;RAG&#xff09;通过融合外部知识库与大型语言模型&#xff0c;已成为解决知识密集型自然语言处理&#xff08;NLP&#xff09;任务的关键范式。高质量…...

CFD仿真计算革命:基于GPU的格子玻尔兹曼方法(LBM)算子优化——利用Tensor Core加速碰撞核计算(性能提升3倍实测)

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台&#xff0c;注册即送H800算力”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 在计算流体动力学领域&#xff0c;格子玻尔兹曼方法正以介观模…...

【蓝牙】Qt4中向已配对的手机发送PDF文件

在Qt 4中实现通过蓝牙向已配对的设备发送文件&#xff08;例如PDF文件&#xff09;&#xff0c;你可以使用Qt Bluetooth模块。Qt 4的蓝牙模块提供了基本的蓝牙功能&#xff0c;包括设备发现、配对管理和数据传输。下面是一些步骤和示例代码&#xff0c;帮助你通过蓝牙发送PDF文…...

Vue + AbortController 请求取消弹窗 hook 封装

背景 实际业务开发场景中&#xff0c;往往存在有些大数据请求的需求&#xff0c;一旦请求发起加载遮罩后用户就无法操作了&#xff0c;直接尬住&#xff0c;所以提供一个支持取消查询的功能还是很有必要的&#xff0c;为了在全业务接口都能使用封装一个hook。 ✋为什么要用 A…...

在小程序中实现上下左右拖动表格

在小程序的开发中&#xff0c;不可避免会出现上下左右拖动表格的类似需求&#xff0c;下面将把这个简单实现一下 其中主要使用到了overflow: scroll;来使得横向和纵向可以滚动&#xff0c;并且使用负边距 父容器截断的方法来同时隐藏横向和纵向滚动条&#xff0c;从而实现该效…...

Spark 以及 spark streaming 核心原理及实践

导语 spark 已经成为广告、报表以及推荐系统等大数据计算场景中首选系统&#xff0c;因效率高&#xff0c;易用以及通用性越来越得到大家的青睐&#xff0c;我自己最近半年在接触spark以及spark streaming之后&#xff0c;对spark技术的使用有一些自己的经验积累以及心得体会&…...

数据融合平台是什么?如何搭建数据融合平台?

目录 一、数据融合是什么 1. 定义 2. 作用 二、数据融合平台的功能是什么 1. 数据抽取 2. 数据清洗 3. 数据转换 4. 数据关联 5. 数据存储 三、如何让搭建数据融合平台 1. 需求分析 2. 选择合适的技术和工具 3. 设计平台架构 4. 开发和部署平台 5. 数据迁移和融…...

Linux之线程同步与互斥

目录 一、线程互斥 1.1、进程线程间的互斥相关背景概念 1.2、互斥量mutex 1.2.1、互斥量的接⼝ 1.3、互斥量实现原理探究 1.4、互斥量的封装 二、线程同步 2.1、条件变量 2.2、同步概念与竞态条件 2.3、条件变量函数 2.4、⽣产者消费者模型 2.4.1、为何要使⽤⽣产者…...

uniapp开发小程序,导出文件打开并保存,实现过程downloadFile下载,openDocument打开

uniapp开发小程序&#xff0c;导出文件打开并保存 实现思路 1、调用请求获取到后端接口返回的下载文件的url路径 &#xff08;注意必须是https的路径&#xff0c;域名需要配置在微信小程序后台的合法域名里面&#xff09; 2、使用 uni.downloadFile 方法 &#xff08;下载文件…...

腾讯云COS“私有桶”下,App如何安全获得音频调用流程

流程图 #mermaid-svg-Phy4VCltBRZ90UH8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-icon{fill:#552222;}#mermaid-svg-Phy4VCltBRZ90UH8 .error-text{fill:#552222;stroke:#552222;}#me…...

简单的 ​Flask​ 后端应用

from flask import Flask, request, jsonify, session import os app Flask(__name__) app.secret_key os.urandom(24) users { 123: admin, admin: admin } # 登录接口 app.route(/login, methods[POST]) def login(): data request.get_json() username data.get(usern…...

Android 中 解析 XML 字符串的几种方式

在 Android 开发中&#xff0c;解析 XML 文件有多种方式&#xff0c;每种方式都有其特点和适用场景。常见的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 1、DOM 解析 DOM&#xff08;Document Object Model&#xff09;解析是一种基于树结构的解析方式&#…...

git commit

‌git commit 是版本控制的核心操作之一&#xff0c;用于将暂存区的修改记录为新的版本提交‌。以下是关键步骤和最佳实践&#xff1a; ‌基础操作‌ ‌提交单个文件‌&#xff1a; bash Copy Code git commit -m “提交信息” ‌提交多个文件‌&#xff1a; bash Copy Code …...

【新手向】GitHub Desktop 的使用说明(含 GitHub Desktop 和 Git 的功能对比)

GitHub Desktop 是 GitHub 公司推出的一款桌面应用程序&#xff0c;旨在帮助开发人员更轻松地使用 GitHub&#xff0c;以下是其简单的使用说明&#xff1a; 安装与登录 下载 GitHub Desktop |GitHub 桌面 访问GitHub Desktop 官方网站&#xff0c;根据自己的操作系统下载对应的…...

Tomcat项目本地部署(Servlet为例)

在Windows上部署 在idea中打开项目 首先我们需要准备一个Servlet项目&#xff0c;我之前的Servlet项目是用eclipse写的&#xff0c;这种情况下如果用idea直接打开的话会出现左侧目录无法显示的情况&#xff0c;这个时候我们就需要用别的方法打开 打开项目管理 如下图&#…...

Linux——linux的基本命令

目录 一、linux的目录结构 二、绝对路径和相对路径 三、文件类型&#xff08;linux下所有东西都可看作文件&#xff09; 四、文件的权限 五、文件权限的修改&#xff08;chmod&#xff09; 六、linux常用的命令 七、文件查看命令 八、文件编辑命令 九、文件压缩与解压…...

wireshark过滤显示rtmp协议

wireshark中抓包显示的数据报文中&#xff0c;明明可以看到有 rtmp 协议的报文&#xff0c;但是过滤的时候却显示一条都没有 查看选项中的配置&#xff0c;已经没有 RTMP 这个协议了&#xff0c;已经被 RTMPT 替换了&#xff0c;过滤框中输入 rtmpt 过滤即可...

Fiddler抓包工具使用技巧:如何结合Charles和Wireshark提升开发调试效率

在开发过程中&#xff0c;网络调试工具是每个程序员的必备利器&#xff0c;特别是当涉及到Web应用和移动应用的调试时&#xff0c;抓包工具的作用尤为突出。无论是处理复杂的API调用、分析性能瓶颈&#xff0c;还是排查网络通信问题&#xff0c;抓包工具都能够帮助开发者精准地…...

LVS负载均衡群集

这里写目录标题 案例:部署Tomcat案例分析案例概述案例前置知识点Tomcat 简介应用场景 案例环境 案例实施实施准备关闭 firewalld 防火墙在安装Tomcat之前必须先安装JDK 查看JDK是否安装安装配置 TomcatTomcat 的安装和配置步骤如下:解压后生成 apache-tomcat-9.0.8文件夹&#…...

【unitrix】 3.5 类型级别的比较系统(cmp.rs)

一、源码 这段代码定义了一个类型级别的比较系统&#xff0c;主要用于在编译时比较类型并得出比较结果。它使用了 Rust 的类型系统和标记特征(trait)来实现这一功能。 use crate::sealed::Sealed; use crate::number::{Z0, P1, N1}; use core::cmp::Ordering;// 比较结果类型…...

防御式编程:防止 XSS 攻击

对用户输入进行编码和过滤是防止 XSS 攻击的关键。以下是改进后的代码示例&#xff1a; from flask import Flask, request, escape from markupsafe import Markup app Flask(__name__) app.route(/comment, methods[POST]) def comment(): user_comment escape(re…...

【Java项目设计】基于Springboot+Vue的OA办公自动化系统

介绍&#xff1a; 基于Springboot为后端&#xff0c;vue为前端的企业综合性OA办公自动化平台&#xff0c;涵盖九大核心模块&#xff0c;全方位解决企业日常办公需求&#xff0c;提升工作效率和管理水平。系统采用模块化设计&#xff0c;功能全面且易于扩展&#xff0c;从基础登…...

WebServer实现:muduo库的主丛Reactor架构

前言 作为服务器&#xff0c;核心自然是高效的处理来自client的多个连接啦&#xff0c;那问题在于&#xff0c;如何高效的处理client的连接呢&#xff1f;这里就介绍两种架构:单Reactor架构和主丛Reactor架构。 单Reactor架构 单Reactor架构的核心为&#xff0c;由一个主线程监…...

每天一个前端小知识 Day 7 - 现代前端工程化与构建工具体系

现代前端工程化与构建工具体系 1. 为什么要工程化&#xff1f;&#xff08;面试高频问题&#xff09; 问题痛点&#xff1a; 模块太多、无法组织&#xff1b;代码冗长、性能差&#xff1b;浏览器兼容性差&#xff1b;团队协作混乱&#xff0c;缺少规范与自动化。 工程化目标…...

nginx的下载与安装 mac

1. 下载 方法一&#xff1a;本地下载 链接&#xff1a;https://nginx.org/en/download.html&#xff08;可直接搜官网&#xff09; 下载到本地后&#xff0c;上传到linux的某个文件夹中 方法二&#xff1a;直接linux上下载&#xff08;推荐&#xff09; wget -c http://ngi…...

[持续集成]

学习目标 能够使用 Git 代码托管平台管理代码能够实现 jenkinspostman 的持续集成能够实现 jenkins代码 的持续集成 持续集成 概念 : 将自己工作成果持续不断地把代码聚集在一起,成员可以每天集成一次或多次相关工具 : git : 代码管理工具,自带本地仓库gitee : 远程代码管理…...

Spring Aop @AfterThrowing (异常通知): 使用场景

核心定义 AfterThrowing 是 Spring AOP 中专门用于处理异常场景的**通知&#xff08;Advice&#xff09;**类型。它的核心作用是&#xff1a; 仅在目标方法&#xff08;连接点&#xff09;的执行过程中抛出异常时&#xff0c;执行一段特定的逻辑。如果目标方法成功执行并正常…...

【赵渝强老师】Kubernetes的安全框架

Kubernetes集群的安全框架主要由以下认证、鉴权和准入控制三个阶段组成。这三个阶段的关系如下图所示。 视频讲解如下 【赵渝强老师】Kubernetes的安全框架 认证&#xff08;Authentication&#xff09; 当客户端与Kubernetes集群建立HTTP通信时&#xff0c;首先HTTP请求会进…...

【Python小练习】3D散点图

资产风险收益三维分析 背景 王老师是一名金融工程研究员&#xff0c;需要对多个资产的预期收益、风险&#xff08;波动率&#xff09;和与市场的相关性进行综合分析&#xff0c;以便为投资组合优化提供决策依据。 代码实现 import matplotlib.pyplot as plt from mpl_toolk…...

腾讯混元3D制作简单模型教程-2

以下是腾讯混元3D制作简单模型的详细教程&#xff0c;整合最新版本特性&#xff08;截至2025年6月&#xff09;&#xff0c;操作门槛低且无需专业基础&#xff1a; &#x1f5a5; 一、在线生成&#xff08;最快30秒完成&#xff09; ‌访问平台‌ 打开 腾讯混元3D创作引擎官网…...

NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术

Talk主页&#xff1a;http://qingkeai.online/ 文章原文&#xff1a;https://mp.weixin.qq.com/s/P0PIAMo1GVYH4mdWdIde_Q Fast-dLLM 是NVIDIA联合香港大学、MIT等机构推出的扩散大语言模型推理加速方案。 论文&#xff1a;Fast-dLLM: Training-free Acceleration of Diffusion…...

大白话说目标检测中的IOU(Intersection over Union)

很多同学在学习目标检测时都会遇到IoU这个概念&#xff0c;但总觉得理解不透彻。这其实很正常&#xff0c;因为IoU就像个"多面手"&#xff0c;在目标检测的各个阶段都要"打工"&#xff0c;而且每个阶段的"工作内容"还不太一样。 今天我就让IoU自…...

CentOS 8解决ssh连接github时sign_and_send_pubkey失败问题

我在一台centos8机器上安装git环境以连接到github&#xff0c;首先第一步需配置好ssh环境&#xff0c;因为我已经有一台Ubuntu机器已经配置好ssh环境&#xff0c;所以我ftp Ubuntu机器取得id_rsa id_rsa.pub known_hosts三个文件&#xff0c;然后执行命令&#xff1a; $ git …...

回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务

需要dns代理 1 配置需求或说明 1.1 适用的产品系列 本案例适用于软件平台为Comware V7系列防火墙&#xff1a;本案例适用于如F5080、F5060、F5030、F5000-M等F5000、F5000-X系列的防火墙。 注&#xff1a;本案例是在F100-C-G2的Version 7.1.064, Release 9510P08版本上进行…...

OpenCV实现二值图细化(骨架提取)

对二值图进行细化&#xff08;骨架提取&#xff09;&#xff0c;也就是把每根线条细化到一个像素的宽度。有两个比较成熟的算法实现此功能&#xff0c;分别是Zhang-Suen算法和Guo-Hall算法。 我们下面使用OpenCVSharp&#xff0c;使用C#实现上述两个算法&#xff1a; private…...

Excel常用公式大全

资源宝整理分享&#xff1a;https://www.httple.net Excel常用公式大全可以帮助用户提高工作效率&#xff0c;掌握常用的Excel公式&#xff0c;让数据处理和计算工作更加便捷高效。了解公式学习方法、用途&#xff0c;不再死记硬背&#xff0c;拒绝漫无目的。 命令用途注释说…...

在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)

言简意赅的讲解Docker Desktop for Windows搭建Kubernetes解决的痛点 目标读者&#xff1a; 对 Docker Desktop 有一定了解&#xff0c;能在 Windows 上成功安装和使用 Docker Desktop。想要在本地快速搭建一套 Kubernetes 环境进行测试或学习的开发者。 一、准备工作 安装 Doc…...

Python设计模式终极指南:18种模式详解+正反案例对比+框架源码剖析

下面我将全面解析18种Python设计模式&#xff0c;每种模式都包含实际应用场景、优缺点分析、框架引用案例、可运行代码示例以及正反案例对比&#xff0c;帮助您深入理解设计模式的价值。 一、创建型模式&#xff08;5种&#xff09; 1. 单例模式&#xff08;Singleton&#x…...

第1章: 伯努利模型的极大似然估计与贝叶斯估计

伯努利模型的极大似然估计与贝叶斯估计 import numpy as np import matplotlib.pyplot as plt from scipy.stats import beta, bernoulli from scipy.optimize import minimize_scalar# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 使用黑体 plt.rcParams[axes.…...

IPv4编址及IPv4路由基础

一、实验目的 掌握接口 IPv4 地址的配置方法理解 LoopBack 接口的作用与含义理解直连路由的产生原则掌握静态路由的配置方法并理解其生效的条件掌握通过 PING 工具测试网络层连通性掌握并理解特殊静态路由的配置方法与应用场景 二、实验环境 安装有eNSP模拟器的PC一台&#…...

基于Python的机动车辆推荐及预测分析系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

SpringBoot扩展——发送邮件!

发送邮件 在日常工作和生活中经常会用到电子邮件。例如&#xff0c;当注册一个新账户时&#xff0c;系统会自动给注册邮箱发送一封激活邮件&#xff0c;通过邮件找回密码&#xff0c;自动批量发送活动信息等。邮箱的使用基本包括这几步&#xff1a;先打开浏览器并登录邮箱&…...

啊啊啊啊啊啊啊啊code

前序遍历和中序遍历构建二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNod…...

不同程度多径效应影响下的无线通信网络电磁信号仿真数据生成程序

生成.mat数据&#xff1a; %创建时间&#xff1a;2025年6月19日 %zhouzhichao %遍历生成不同程度多径效应影响的无线通信网络拓扑推理数据用于测试close all clearsnr 40; n 30;dataset_n 100;for bias 0.1:0.1:0.9nodes_P ones(n,1);Sampling_M 3000;%获取一帧信号及对…...

C语言学习day17-----位运算

目录 1.位运算 1.1基础知识 1.1.1定义 1.1.2用途 1.1.3软件控制硬件 1.2运算符 1.2.1与 & 1.2.2或 | 1.2.3非 ~ 1.2.4异或 ^ 1.2.5左移 << 1.2.6右移 >> 1.2.7代码实现 1.2.8置0 1.2.9置1 1.2.10不借助第三方变量&#xff0c;实现两个数的交换…...