0%

消息一致性保障:从发送到消费的全链路解决方案

消息一致性是分布式系统中消息队列使用的核心挑战,指业务操作与消息传递的状态保持一致:业务成功时消息必须正确发送并被处理,业务失败时消息不应被发送或需被撤回。本文从消息发送一致性消息消费一致性两方面,解析问题根源与解决方案。

消息发送一致性:确保业务与消息的原子性

消息发送一致性的核心目标是:业务操作成功 ↔ 消息必须发送成功,避免 “业务成功但消息丢失” 或 “业务失败但消息发送” 的矛盾场景。

消息发送可能出现的问题

(1)业务成功但消息未发送
  • 场景 1:业务逻辑执行完成后,应用在发送消息前宕机(如 JVM 崩溃),导致消息未发送。
  • 场景 2:业务成功后,消息发送时消息中间件宕机(如 Broker 崩溃),消息未被持久化。
(2)业务失败但消息已发送
  • 场景:消息先发送成功,但后续业务逻辑执行失败(如数据库事务回滚),导致无效消息被消费。

解决方案:基于 “消息预存 + 状态确认” 的两阶段方案

用户提到的方案本质是 “预发送消息→执行业务→确认消息可用” 的两阶段模式,确保业务与消息状态同步。具体流程如下:

步骤拆解:
  1. 预存消息:业务应用先向消息中间件发送 “待确认” 消息(状态标记为未处理),消息中间件仅存储消息但不投递。
    • 目的:先确保消息能被中间件持久化,避免后续业务成功后消息发送失败。
  2. 消息中间件反馈存储结果:中间件返回 “消息存储成功 / 失败”。
    • 若失败:业务直接终止(避免业务成功但消息无法存储)。
  3. 执行业务逻辑:仅当消息存储成功后,才执行核心业务(如订单创建、库存扣减)。
  4. 确认消息状态:业务执行完成后,向中间件发送 “业务结果”:
    • 业务成功:中间件将消息状态改为可投递,并向消费者投递。
    • 业务失败:中间件删除预存消息(或标记为废弃),避免无效消息。
阅读全文 »

HBase复杂查询解决方案:二级索引与集成搜索引擎

HBase 作为分布式列存储数据库,擅长基于 RowKey 的快速单点查询和范围扫描,但对多条件组合查询、聚合计算(如 GROUP BYORDER BY)的支持较弱。本文将详细解析 HBase 复杂查询的痛点,以及通过二级索引集成搜索引擎实现复杂查询的解决方案。

HBase 复杂查询的痛点

HBase 的查询能力受限于其分布式存储设计,主要痛点包括:

  1. 查询维度单一:仅支持基于 RowKey 的精确查询或前缀范围查询,无法直接通过多列条件过滤(如 WHERE age > 30 AND city = 'Beijing')。
  2. 缺乏聚合能力:不支持 GROUP BYCOUNTSUM 等聚合操作,需通过 MapReduce 或 Spark 离线计算,延迟较高。
  3. 无事务支持:多表写入时无法保证原子性,易导致数据不一致(如二级索引表与主表数据不匹配)。

解决方案一:二级索引表

二级索引是 HBase 实现多条件查询的传统方案,核心思路是将查询条件映射为索引表的 RowKey,通过索引表快速定位主表数据。

二级索引表设计原理

  • 主表:存储原始数据,RowKey 为主键(如用户 ID)。
  • 索引表:以 “查询条件组合” 为 RowKey,值存储主表的 RowKey,实现 “条件 → 主表 RowKey” 的映射。

示例

阅读全文 »

文件上传攻击与防御详解

文件上传功能是许多网站常见的交互设计,但也潜藏着被恶意利用的风险。下面将从攻击原理、常见手段到防御策略进行详细说明,帮助更好地理解和防范这类攻击。

文件上传攻击的原理与危害

文件上传攻击的核心在于绕过服务器的文件校验机制,上传恶意文件(如可执行脚本、木马程序等),并通过该文件获取服务器权限或危害用户。

  • 常见攻击场景
    • 上传.php.asp等可执行脚本,通过访问该脚本直接操控服务器(如读取敏感文件、执行系统命令)。
    • 上传伪装成图片的病毒文件(如将.exe改为.jpg),诱导其他用户下载运行,窃取信息或破坏设备。
    • 利用上传功能存储大量无关文件,占用服务器存储空间,导致服务瘫痪。
  • 典型案例
    某网站仅通过文件后缀判断类型,攻击者将恶意脚本命名为image.jpg.php,若服务器优先识别.php后缀,访问该文件时就会执行脚本,获取数据库权限。

文件上传攻击的防御策略

防御的核心是严格校验上传文件的合法性,并通过多重机制阻断恶意文件的执行和访问。

1. 采用白名单校验文件类型

  • 核心原则:只允许指定的安全文件类型(如.jpg.png.pdf)上传,而非禁止黑名单中的类型(黑名单易被绕过,如新型后缀或特殊格式)。
  • 实现方式
    在服务器端预设允许的 MIME 类型(如image/jpegapplication/pdf)和文件后缀,上传时同时校验这两项,缺一不可。
阅读全文 »

DDoS 攻击与防御详解

DDoS(分布式拒绝服务攻击)是目前网络安全领域最具破坏性的攻击方式之一,其核心是利用大规模分布式节点向目标发起流量冲击,耗尽目标资源(带宽、CPU、内存等),导致合法用户无法访问服务。本文将从攻击原理、常见类型到防御策略进行全面解析。

DDoS 攻击的核心原理

从 DoS 到 DDoS

  • DoS(拒绝服务攻击):单一节点向目标发送大量请求,占用目标资源(如带宽、连接数),使目标无法响应合法请求(如早期的 “ping 洪水” 攻击)。但随着服务器性能提升(如千兆带宽、高并发处理),单一节点的 DoS 攻击效果已大幅减弱。
  • DDoS(分布式拒绝服务攻击):攻击者通过控制大量 “肉鸡”(被入侵的计算机、物联网设备等)组成 “僵尸网络”,协同向目标发起攻击。由于攻击流量来自海量分布式节点,规模可达数百 Gbps 甚至 Tbps,远超单一服务器的承载能力,因此破坏力极强。

攻击目标

DDoS 攻击的核心目标是耗尽目标的关键资源,包括:

  • 网络带宽(如通过海量数据包占满链路);
  • 服务器连接数(如通过大量 TCP 连接耗尽系统的文件描述符);
  • 计算资源(如通过复杂请求消耗 CPU / 内存);
  • 应用层服务(如通过高频次业务请求拖垮数据库)。

常见 DDoS 攻击类型

网络层攻击:利用协议缺陷发起流量冲击

阅读全文 »

XSS 攻击与防御详解

XSS(Cross Site Scripting,跨站脚本攻击)是 Web 应用中常见的安全漏洞,其核心是攻击者在网页中注入恶意脚本,当用户访问该页面时,脚本在用户浏览器中执行,从而窃取信息、篡改页面或执行其他恶意操作。以下从攻击原理、类型、防御措施等方面进行详细说明。

XSS 攻击的本质

XSS 攻击的根本原因是Web 应用未对用户输入进行严格过滤,导致攻击者输入的恶意脚本被浏览器当作合法代码执行。
例如:用户在输入框中提交<script>alert('窃取cookie')</script>,若应用直接将该内容嵌入页面并返回,浏览器会执行其中的script代码,造成攻击。

XSS 攻击的三大类型

1. 反射型 XSS(非持久型 XSS)

  • 特点:恶意脚本通过 URL 参数等方式传入,Web 应用直接 “反射” 给浏览器,不存储在服务器,需诱使用户主动点击恶意链接才能触发。
  • 攻击流程:
    1. 攻击者构造含恶意脚本的 URL(如http://example.com/search?key=<script>恶意代码</script>);
    2. 诱导用户点击该 URL;
    3. 服务器将 URL 中的恶意脚本作为响应内容返回给用户浏览器;
    4. 浏览器执行恶意脚本,完成攻击(如盗取 cookie)。
  • 场景:搜索框、URL 参数展示页面等。

2. 存储型 XSS(持久型 XSS)

  • 特点:恶意脚本被永久存储在服务器(如数据库、评论区、日志等),所有访问包含该脚本页面的用户都会受到攻击,危害范围更广。

阅读全文 »