如何进行一次业务代码的流式重构优化?

2026-05-23 02:210阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1429个文字,预计阅读时间需要6分钟。

利用流程式思维解决内存问题,逐步细化而非水库泛滥。涉及业务场景、目标、调度、MQ、引擎等,即生产者消费者模型,非常简单。为提升性能,调度需将大目标为多个子任务。

利用流式思想解决爆内存问题,涓涓细流而不是水库泄洪~

业务场景

目标 ~> 调度 ~> MQ ~> 引擎,就是生产者消费者模型,非常简单。

为了提高性能,调度需要将一个大目标拆分为多个子任务,启动多个引擎并发地去执行。

举个例子,用户输入一个 A 段目标 1.0.0.0/8(2^24=16,777,216),设置了全端口(1-65535)三种协议(ICMP UDP TCP)扫描,假定引擎每次处理 10W 目标,200 个端口时效率最佳。

老代码

SpiltTargets ~> SpiltPorts ~> SpiltProtocol ~> MQ,代码抽象为三个函数,顺序执行,每个阶段执行完才能进入下个阶段,中间产生的所有数据都保存在内存中,然后全部推送到 MQ。

阅读全文

本文共计1429个文字,预计阅读时间需要6分钟。

利用流程式思维解决内存问题,逐步细化而非水库泛滥。涉及业务场景、目标、调度、MQ、引擎等,即生产者消费者模型,非常简单。为提升性能,调度需将大目标为多个子任务。

利用流式思想解决爆内存问题,涓涓细流而不是水库泄洪~

业务场景

目标 ~> 调度 ~> MQ ~> 引擎,就是生产者消费者模型,非常简单。

为了提高性能,调度需要将一个大目标拆分为多个子任务,启动多个引擎并发地去执行。

举个例子,用户输入一个 A 段目标 1.0.0.0/8(2^24=16,777,216),设置了全端口(1-65535)三种协议(ICMP UDP TCP)扫描,假定引擎每次处理 10W 目标,200 个端口时效率最佳。

老代码

SpiltTargets ~> SpiltPorts ~> SpiltProtocol ~> MQ,代码抽象为三个函数,顺序执行,每个阶段执行完才能进入下个阶段,中间产生的所有数据都保存在内存中,然后全部推送到 MQ。

阅读全文