0%

消息队列的核心使用场景与权衡

消息队列(如 RabbitMQ、Kafka、RocketMQ)作为分布式系统的关键中间件,通过异步通信模式解决了服务解耦、流量削峰等核心问题。但同时也引入了系统复杂性和可用性风险,需根据业务场景合理使用。本文将详细解析消息队列的典型应用场景、优势及潜在挑战。

核心使用场景

应用解耦:降低系统依赖

问题:传统架构中,服务间通过直接调用耦合(如订单系统调用库存系统、支付系统),若某一服务故障(如库存系统宕机),会导致整个流程失败,且新增服务需修改调用方代码。

解决方案:引入消息队列作为中间层,服务间通过消息异步通信:

  • 生产者(如订单系统)完成自身业务后,将消息写入队列,无需关心消费者(库存、支付系统)是否可用。
  • 消费者从队列中获取消息并处理,新增服务只需订阅队列即可,无需修改生产者代码。

示例

  • 订单创建后,订单系统向 order.created 队列发送消息。
  • 库存系统、物流系统、通知系统分别订阅该队列,各自处理库存扣减、物流创建、短信通知等逻辑。

优势

  • 服务间无直接依赖,某一服务故障不影响其他服务。
  • 扩展性提升,新增业务只需新增消费者,无需修改核心流程。

异步处理:提升响应速度

问题:同步调用场景中,一个业务流程可能包含多个耗时操作(如订单创建后需发送短信、推送通知、更新统计),导致接口响应时间过长(如 1 秒 → 3 秒),影响用户体验。

阅读全文 »

使用 ojAlgo 求解线性规划(LP)问题

ojAlgo 是一个专注于数值计算和优化的 Java 开源库,提供了简洁直观的 API 来求解线性规划(LP)、整数规划(IP)等问题。相比其他工具,ojAlgo 的代码可读性强,配置灵活,特别适合在 Java 项目中集成。本文以具体示例介绍如何使用 ojAlgo 求解 LP 问题。

问题定义

我们需要求解以下整数线性规划问题(变量为整数):
目标函数minimize 5x₁ + 6x₂ + 23x₃ + 5x₄ + 24x₅ + 6x₆ + 23x₇ + 5x₈(最小化加权和)
约束条件

  1. 2x₁ + x₂ + x₃ + x₄ ≥ 100
  2. 2x₂ + x₃ + 3x₅ + 2x₆ + x₇ ≥ 150
  3. x₁ + x₃ + 3x₄ + 2x₆ + 3x₇ + 5x₈ ≥ 100
    变量约束:所有变量为非负整数(xᵢ ≥ 0且为整数)

环境配置

引入 ojAlgo 依赖

在 Maven 项目的pom.xml中添加依赖:

1
2
3
4
5
<dependency>
<groupId>org.ojalgo</groupId>
<artifactId>ojalgo</artifactId>
<version>51.4.1</version>
</dependency>

代码实现与解析

核心步骤

阅读全文 »

Nginx 搭建文件服务器:快速实现文件共享与管理

Nginx 不仅是高性能的 Web 服务器和反向代理,还能通过简单配置搭建轻量级文件服务器,用于共享文档、图片、安装包等资源。本文详细讲解 Nginx 文件服务器的配置方法、功能优化及上传限制设置,帮助快速构建实用的文件共享服务。

基础配置:开启目录浏览

Nginx 默认不显示目录结构,需通过autoindex系列指令开启目录浏览功能,核心配置如下:

1
2
3
4
5
6
7
8
9
10
11
server {
listen 9090; # 监听端口(如9090)
server_name _; # 匹配任意域名(可改为具体域名如file.example.com)
root /share/file; # 文件存储的根目录(需提前创建)
charset utf-8; # 支持中文文件名显示

# 开启目录浏览核心配置
autoindex on; # 启用目录列表显示(默认关闭)
autoindex_exact_size on; # 显示文件精确大小(单位为字节),off则显示KB/MB等
autoindex_localtime on; # 显示文件的本地修改时间(默认显示GMT时间)
}

配置说明

  1. root /share/file
    • 指定文件服务器的根目录,所有文件需存放在该目录下(如/share/file/docs//share/file/images/);
    • 需确保 Nginx 进程对该目录有读取权限(可执行chmod 755 /share/file)。
  2. 目录浏览优化
    • autoindex_localtime on:让文件修改时间显示为服务器本地时间(更直观);
    • charset utf-8:避免中文文件名乱码(关键配置)。

访问效果与目录结构

配置完成后,重启 Nginx(nginx -s reload),通过http://服务器IP:9090访问:

阅读全文 »

SCP 命令详解:跨机器文件传输的高效工具

scp(Secure Copy)是基于 SSH 协议的跨机器文件传输命令,具有安全性高、使用简单的特点,常用于服务器之间或本地与服务器之间的文件同步。本文将详细介绍 scp 的用法、参数及实战技巧。

scp 基本语法与核心参数

基本语法

1
scp [参数] 源文件 目标路径
  • 源文件 / 目标路径格式:
    • 本地路径:直接使用绝对路径(如 /home/user/file.txt)或相对路径(如 ./docs)。
    • 远程路径:用户名@主机地址:文件路径(如 root@192.168.1.100:/var/log)。

核心参数

参数 作用
-r 递归复制目录(必须用于目录传输,否则仅复制文件)
-v 显示详细传输过程(便于调试)
-P 端口 指定 SSH 端口(默认 22,非默认端口需指定)
-i 私钥文件 使用指定的 SSH 私钥进行认证(适用于密钥登录)
-l 限速 限制传输速率(单位:Kbit/s,如 -l 800 限制为 100KB/s)
-p 保留文件的修改时间、权限等元数据

常见传输场景示例

本地文件 → 远程服务器

阅读全文 »

yarn日志聚集详解:配置、原理与实战

在 Hadoop YARN 中,日志聚集(Log Aggregation)是一项关键功能,用于收集分布式集群中各个节点的任务日志并集中存储,解决了分散日志难以管理和排查问题的痛点。本文将详细解析日志聚集的作用、配置方法、实现原理及最佳实践。

日志聚集的核心作用

在未启用日志聚集时,YARN 任务日志分散存储在各个 NodeManager 节点的本地磁盘(如 $HADOOP_HOME/logs/userlogs/),存在以下问题:

  • 日志分散:需逐个节点登录查看日志,排查问题效率低;
  • 存储风险:NodeManager 节点磁盘空间有限,日志可能被清理或覆盖;
  • 权限问题:用户可能没有节点登录权限,无法直接访问日志。

日志聚集功能通过以下方式解决上述问题:

  • 任务完成后,自动将分散在各节点的日志上传至 HDFS 集中存储;
  • 支持通过 YARN Web UI 或命令行统一查看日志;
  • 可配置日志保留时间,自动清理过期日志,节省存储空间。

日志聚集的配置方法

日志聚集功能需在 yarn-site.xml 中配置,核心参数如下:

核心配置参数

参数 说明 默认值 推荐配置
yarn.log-aggregation-enable 是否开启日志聚集 false true(启用)
yarn.log-aggregation.retain-seconds 日志在 HDFS 中的保留时间(秒) -1(永久保留) 604800(7 天)
yarn.log-aggregation.retain-check-interval-seconds 日志清理检查间隔(秒) -1(由 YARN 自动决定) 86400(1 天)
yarn.nodemanager.remote-app-log-dir 日志在 HDFS 中的存储根目录 /tmp/logs /var/log/hadoop-yarn/apps(自定义路径)
yarn.nodemanager.remote-app-log-dir-suffix 日志目录后缀(通常为用户名) logs logs(保持默认)

完整配置示例

$HADOOP_HOME/etc/hadoop/yarn-site.xml 中添加以下配置:

阅读全文 »