Bean Nuts Hazelnut Sauron Legion
Java部分重点总述

提示

由于C++版本和Java 技术大致相同,已阐述的不再重复阐述。

框架架构

Nonjron使用Maven维护

宏观结构


根目录只放Nonjron、Pinecone、Saurye、system、Ulfhedinn和框架基本项目和目录。


Nonjron包括Heistron、Heists、System、utils:
其中: Heistron为Heist组,主要是项目系统文件,包括设计模式设计、核心代码等。
Heists:

包括具体的爬虫任务,可以用Maven写子项目,Heistron采用工厂模式动态创建
其他都为一些系统文件。

爬虫类结构

其中主要设计接口:
Heist: “抢劫任务” 一个具体的任务类,任务管理器
Crew:“队员”,顶级抽象接口,主要是爬虫的执行者,一个具有线程,模板模式、责任链模式、策略模式
Stalker:“潜伏者/追猎者”,继承Crew,用于分析网站的索引,一般为单线程任务,也可以多线程,用于得到索引表
Reaver:“掠夺者”,继承Crew,用于下载和缓存页面
Embezzler:“挪用者/洗钱者”,继承Crew,用于分析网站的缓存页面,进行数据清洗、建模、最终写入数据库

系统有多个Heist(如XX百科,XX音乐),因此需要动态调度,上级调度器:Heistron(抢劫机器人),基于工厂模式,根据Heist名字来动态执行具体的Heist.

NonjronBoot:项目启动类
Nonjron:项目系统类

查询器结构 (后端查询服务系统)


控制器类结构,采用模板模式层层封装,通过工厂模式全自动进行调度。


组合模式,实现对不同Token类型的递归封装。


通过策略模式、适配器模式、装饰器模式对UI组件、插件功能(如验证码、上传文件等)进行高度封装,采用完全统一的开发范式。

任务分配

信号量抢占调度

原子变量实现基于信号量的抢占调度。

基于CountDownLatch、ExecutorService等技术实现单节点并行爬虫的进行。

亮点技术1-WolfMC (基于Netty、NIO的支持负载均衡的多路Channel组件)

支持发送异步、同步消息,类似Ajax。

公平、可定制的Channel池

Channel池(支持策略模式和适配器自定义优先策略)、基于LinkedTreeMap, 支持同时优先队列、顺序队列和去重操作,在非确定生产者-消费者条件下,同时完成去重、PriorityQueue、LinkedQueue, 支持强制同步和异步消息

优先队列 + 先来先到 + 自定义策略的选择调度

支持IO计数的负载均衡

亮点技术2-类操作系统,进程统一内部线程管理

设计了统一任务和控制模型,类似操作系统把可执行单元按:系统->进程->线程进行进一步划分和统一包装。
如某一大型分布式服务运行了RabbitMQ、HTTP消息控制、其他消息控制(如Socket通道)、异步控制器、异步分布式爬虫服务(>1e7)等,其中爬虫服务受多个控制器控制。这里进行如上模型包装,把不同必要子服务(含若干工作子线程)按“进程”打包,每个进程又隶属于若干进程组/系统(System)。支持级联控制,如通知(凋亡)、强制结束或重启一个进程,进程对应的所有线程都可以被安全关闭,而不影响当前应用的其他子服务,相当于进程中的小容器。
其中进程和系统模型相当于一个可控线程池对线程进行包装,并支持类似任务管理器的查询、创建、结束、挂起等操作。

其中“任务管理器”支持关键资源“VitalResource”的注册,进程、系统等运行单元异常结束(如强制结束、未捕获的异常)时可以自动调用回调函数,自动完成资源、事件等关键资源的紧急保存,并支持级联操作,如某一系统运行失败将自动级联触发下属的所有进程完成。
支持重启和强行恢复操作、任何终末异常都可以被强制捕获,并自动完成级联的子单元重启操作。

Author:undefined  Create time:2023-07-29 00:56
Last editor:undefined  Update time:2024-09-26 13:40