/Hydra

Hydra九头龙,保姆级为您打造属于您的造跨平台TB-PB级别专属搜索引擎、专属上帝之眼。Hydra-面向云计算、多任务调度、MapReduce、通信、数仓、服务化、抽象化分布式操作系统——以实现小型爬虫搜索引擎为例。

Primary LanguageJavaMIT LicenseMIT

Bean Nuts Acorn Hydra<Beta V2.1> (九头龙,分布式操作系统)

事务编排, 多域配置, 自定义线程进程模型, 服务与任务编排管理器, 分布式系统设计, 跨平台简易部署, 爬虫, 分布式爬虫, 大规模爬虫, 搜索引擎, 知识图谱, 大数据处理, 数据仓库, 云计算

简体中文文档 Update Log github stars github stars

简体中文 | English[TODO] | Nuts Projects | DragonKing | Red Nest

文档(持续增量更新): https://docs.nutsky.com/docs/hazelnut_sauron_zh_cn | 真实集群搭建过程: https://zhuanlan.zhihu.com/p/634851956

📖 Abstract

Would you like to own the "God Eyes"? Do you crave power? Do you wish to wield all information at your fingertips? Now, data is all you need!

Hydra + Radium fulfills your dreams, creating a data "Elder Brain" specifically for "TJ" individuals, 'all information all I need'. We build a unique personal TB-PB level data warehouse and search engine just for you, your exclusive "God Eyes" !

Hydra is a cloud computing-oriented, multi-task scheduling, MapReduce, communication, service-oriented, which is the distributed operating system.

📖 摘要 / 简介

你想拥有‘上帝之眼’吗?你渴望力量吗?你希望一切信息尽在掌控吗?这个时代,数据即使世界!

Hydra + Radium 成就你的梦想,专为"TJ"人打造的数据“主脑”,一切信息尽在掌握之中。为你打造独一无二的的个人TB-PB级数仓和搜索引擎,你的专属'上帝之眼',一切数据为所欲为!

简易和多种部署模式,不一定非要Linux!不一定非要K8S!不一定非要Hadoop!集成统一的丐版配置也能玩转TB-PB级数据。

不会集群?不会中间件?不会分布式?不会云计算?我是小白?Don`t worry,持续更新的保姆级教程和实例最小系统,系统可大可小,丐版技术也能玩转云和大数据。

字多不看?太高端听不懂?几个场景助你快速了解Hydra和其关联项目。

  • 构造你的私人知识库,关联任何你感兴趣的知识图谱(音乐、电影、视频、小说、美食、新闻、学术等),生成巨型知识字典和图谱,并交给GPT等大模型给你生成属于你的上帝报告
  • 海量数据,任你处置,你可以打造自己的数据天眼,甚至可以乘坐时光机,在数据世界中随意穿行。你就是上帝,历史的变迁,触手可及。
  • 打造你的个人GPT,随着算力平民化、大模型技术的平民化。未来,你不想拥有自己的GPT吗?你只需要不断收集属于你的数据集,未来打造你的专属GPT、Diffusion等。
  • 我关注业务,我只想赚钱,我只想写论文,Ah!Hydra + Radium的目标正是助你快速构建大规模爬虫引擎,打造你的专属网络数据采取系统。
  • 我对爬虫没兴趣,我想要一个分布式管理中心,快速自动化部署多种多样的服务和任务。Hydra为你最大化抽象,多种任务一个接口。

什么是 Hydra,他能干嘛?

Hydra 是由 DragonKing(undefined) 和其团队原创的,面向跨平台PB级别云计算、数据仓库、多任务调度、MapReduce、通信、服务化、抽象化分布式操作系统。

  1. 支持统一高度抽象化的任务、事务、服务等编排,一套接口,可分级、可本地、可集群。
  2. 可多级、可嵌套的编排系统,支持配置域管理、复杂配置动态解耦、可继承和重写的多域配置管理。
  3. 可事务化抽象进程、线程模型,让远端服务通过RPC或通信组件通过一套接口,像本地进程一样进行统一管理。
  4. 可事务图化编排方法论设计,就像TensorFlow,更抽象简单的服务、任务设计模式。事务和任务编排支持序列和并行两种模式,更支持性能模式。确保事务绝对执行、回滚、性能执行、并行等多种范式。
  5. 面向统一解释器模式方法论和过程化设计,事务和任务编排逻辑化,支持循环控制、条件控制、散转控制、原子化等。
  6. 抽象统一任务管理器体系,统一生命周期设计,多类任务一套“任务管理器”,就像本地系统一样简单。
  7. 抽象统一系统架构体系,可中心化、可联邦化、可链式化,一切皆有可能。
  8. 抽象统一文件系统,基于Common VFS 统一文件系统管理,从复杂底层存储中解放。
  9. 抽象统一数据处理体系,泛容器化**,抽象化DAO、DTO、Data Manipulation架构,一切皆可是Map、List、Set和Table等。
  10. 抽象化部署模式和抽象云部署,无论是任何系统、本地进程、虚拟机部署、容器部署等。Hydra为您统一,“小程序”化进程模型,就像Springboot一样简单。
  11. 基于分治和MapReduce**设计,面向大数据处理处理系统设计。
  12. 高性能RPC设计基于Netty和NIO,更好的性能呈现。
  13. 传统实例化、IOC化、C/C++风格化,多种对象生命周期模式,更有趣的系统设计。
  14. 可分级、分组、嵌套、级联的设计方法论,确保更灵活的大型系统设计,确保系统结构清晰、规整、可视、整整齐齐。
  15. 无需担心抽象,无需担心"吹牛逼",我们尽可能通过实际案例和有效代码,展示系统功能,也欢迎commit。——以实现小型爬虫搜索引擎为例。

🏆 10万行源码,3A史诗巨献

该仓库为Java 11实现版本(由C/C++版本重构),非GUI大部分不直接基于第三方框架。 此外由于本项目工程量、复杂度和工作量较大,本人精力、能力有限,错误和功能完整性不足是不可避免的,还希望各位读者大佬批评指正。
最后,由于本人精力和工作时间等问题,该公开版本为beta版本,一部分功能未完全实现,后续会不断迭代,欢迎关注。

子系统、框架和实例系统

Bean Nuts Hazelnut Sauron Radium (索伦·镭,分布式爬虫引擎)

  • 该部分为分布式爬虫引擎、爬虫大数据处理、清洗、持久化框架系统的实现。面向分布式大规模系统性爬虫设计,支持任务编排和并行流水线爬虫、支持周期和定时大规模爬虫、支持并行离线数据处理。

Bean Nuts Hazelnut Sauron Shadow (索伦·暗影,以爬虫、小型搜索引擎为例)

  • 该部分基于Pinecone、Ulfhedinn、Slime、Hydra、Radium等子框架最终设计的搜索引擎(数据采集、数据处理侧)应用实例。
  • 多个实例助你快速入门:1).维基百科全站爬取;2).Urban Dictionary全站爬取;3).imdb爬取;4).编年史子项目,每日全世界新闻采集,打造你的互联网记忆库;等。

Bean Nuts Hazelnut Sauron Eyes - The God View (索伦·之眼,数据知识图谱化与检索系统[用户侧终端应用])

更新 TODO 日历

8,9双月

  • [Major] 下一次文档全量更新:(08月15日前更新)
  • [Major] 下一次代码全量更新:(09月01日前更新)
  • [Minor] 附属项目开源,God View,Springboot 重构中。(08月10日前)
  • [Minor] 任务系统调整,增加全局列表注册器(给嵌套模型加顶级收集器)。(08月10日前)
  • [Major] 服务系统调整,全量更新系统级服务中心、服务注册等基础设施系统。(09月10日前)
  • [Minor] 消息控制组件,RPC应用层调整、规范化,增加类Thrift,统一序列化、接口化系统。(09月01日前)
  • [Major] Sparta子系统,Web 图形界面操作系统增量、灰度构建。(09月30日前)

⚔ 目录

一、📝 描述

1.1、框架组成

1.1.1、Pinecone 基础运行支持库

1.1.1.1、 扩展容器
  1. LinkedTreeMap
  2. ScopeMap (多域查找树、Map), 实现和支持类似动态语言(如JS、PHP、Python等)的底层继承数据结构,支持两类子模型(单继承、多继承), 可以实现多域查找的功能。
  3. Dictium、Dictionary(字典接口模型),实现和支持类似动态语言(如PHP、Python等)的Array、字典查找,Map和可索引对象进一步抽象化。
  4. Multi*Map (多种MultiValueMap范式),实现支持多种多值Map的实现,如MultiCollectionMap、MultiSetMap等。
  5. Top (TopN问题通用解决),实现和支持堆法、有序树法、多值有序树法三种实现。
  6. distinct (差异器),实现传统Set法、分治法、Bloom等的集合差异分析器。
  7. affinity (亲缘性器),实现和支持对亲缘抽象字典的继承、重写等。
  8. tabulate (遍历器),实现以列表式对抽象字典的内部递归,并列表化和分析亲缘关系。
1.1.1.2、工具库
  1. JSON库,BSON,JPlus(JSON++)库 (面向可二次开发、设计的自由JSON设计),可以重写JSONEncoder、JSONDecoder、JSONCompiler、JSONDecompiler、注入器等。
  2. Name命名空间库
  3. lang (Java包和扩展库),支持各类类扫描方法、包扫描方法、遍历和收集方法、加载、多域扫描等。
  4. TODO TODO

1.1.2、Hydra

1.1.2.1、系统架构、骨架设计
  1. HierarchySystem,阶级系统(Master-Slaver推广架构)
  2. FederalSystem,联邦系统(面向投票式设计) [BETA, 20250101]
  3. BlockSystem,块式系统(面向边缘、链式系统设计)。让你的每台设备都成为你专属链上节点。 [BETA, 20250101]
  4. CascadeComponent, 级联组件设计,支持亲缘性回收控制,“The Omega Device”,级联回收主键引用。
1.1.2.2、事物和统一任务编排系统
  1. Orchestration (事务、任务编排子系统),面向统一解释器模式方法论和过程化设计,事务和任务编排逻辑化,支持循环控制、条件控制、散转控制、原子化等,更支持事务完整性设计。
  2. Auto (简易命令模式,可编程自动机系统),实现支持Automaton简易生产-消费命令队列,实现支持PeriodicAutomaton可编程Timer,实现支持Marshalling流水线指令编排器。(更多Timer和算法持续更新中)
1.1.2.3、小程序系统,统一任务调度系统

Servgram,小程序系统,是的这很微信,不过是服务端的小程序哦!进一步抽象和推广进程**,任何服务介质(本地、虚拟机、容器等),一切服务、一切任务等。 一切统一和谐,一套调度、一套接口、一套操作,生命周期整整齐齐(满足你的控制欲),更可冗余确保稳定。
配合任务编排和事务编排,多个任务,一套系统全包干。 (TODO,远端进程进一步实现、实现统一分布式锁接口)

1.1.2.4、统一消息分发系统
1.1.2.5、WolfMC RPC

二进制RPC协议支持,更多RPC协议持续更新中。[TODO 分片、泳道]

1.1.2.6、统一服务注册、发现、管理系统[TODD]
1.1.2.7、统一资源管理、分配接口系统[TODO]
1.1.2.8、图形管理界面[TODO]
1.1.2.9、TODO

1.1.3、Slime 史莱姆大数据支持库

1.1.3.1、统一块抽象、管理、分配系统(泛块式、抽象页面(连续、离散、自定义)、帧、分区、簇等)
1.1.3.2、Mapper、Querier 抽象映射、查询器,统一接口多种实现(本地、数据库、缓存、数据仓库等)
  1. 优化和缓存版RDBMapper、IndexableMapper,使用多种缓存策略,泛容器化API接口使用。
1.1.3.3、统一缓存库和查询优化库、支持LRU、冷热优化、页面缓存、页面LRU、多级缓存等多策略实现。
1.1.3.4、Source抽象数据源库、支持RDB-ibatis、NoSQL、缓存、文件等扩展。
1.1.3.5、Reducer库[TODO],更多Reduce策略实现、接口

1.1.4、Radium 分布式爬虫和搜索引擎数据取回、任务编排、处理、持久化框架

1.1.4.1、一站式爬虫数据处理范式

基于Map-Reduce**,面向TB-PB级别数据处理,统一任务编号、映射、处理。 范式包含 Reaver(掠夺者,数据取回器),Stalker(潜伏者,面向批量爬虫索引嗅探),Embezzler(洗钱者,面向批处理爬虫数据处理)。

1.1.4.2、统一多任务调度、配置、编排系统

支持事务型、Best-Effort等多种任务粒度控制。 支持分组、嵌套、多级任务调度,支持子任务继承父任务关系、血缘性。 支持任务回滚、熔断等接口设计。 TODO

二、🧬 编译、使用

编译

  • 项目使用Maven管理,使用jdk11以上版本即可运行。
  • 编译得到jar包,即插即用,随意部署。
  • 或使用 IntelliJ IDEA 直接打开即可。

最小系统使用

  • 无需特意配置环境变量等信息。
  • 系统配置文件,默认位于"./system/setup/.."
    "Orchestration"         : {
      "Name": "ServgramOrchestrator",
      "Type": "Parallel", // Enum: { Sequential, Parallel, Loop }

      // Servgram-Classes scanning package-scopes
      "ServgramScopes": [
        "com.sauron.radium.heistron"
      ],

      "Transactions": [
        { "Name": "Heist", "Type": "Sequential", "Primary": true }
      ]
    }
  • 默认启动 Heist (爬虫)任务
  • 检查 Heist 小程序配置,默认位于"./system/setup/heist.json5"
    "Orchestration"    : {
        "Name": "HeistronOrchestrator",
        "Type": "Parallel", // Enum: { Sequential, Parallel, Loop }
    
        "DirectlyLoad" : {
          "Prefix": [],
          "Suffix": [ "Heist" ]
        },
    
        "ServgramScopes": [
          "com.sauron.shadow.heists",
          "com.sauron.shadow.chronicle"
        ],
    
        // 修改这里,可运行例程 'Void' , 最小系统演示
        "Transactions": [
          { "Name": "Void", "Type": "Sequential" /* Enum: { Sequential, Parallel, SequentialActions, ParallelActions, LoopActions }*/ },
        ]
    }
  • 检查 Void 小小程序配置,默认位于"./system/setup/heists/Void.json5",原则上注意大小写
    "Orchestration"         : {
        "Name": "VoidOrchestrator",
        "Type": "Parallel", // Enum: { Sequential, Parallel, Loop }
    
        "Transactions": [
          { "Name": "Jesus", "Type": "Sequential"  },
          { "Name": "Satan", "Type": "Sequential"  },
          { "Name": "Rick" , "Type": "Sequential"  }
        ]
    }
  • 正常启动,将开始本地流水线序列调度 "Jesus"、"Satan"、"Rick"三个大任务和其子任务。

    最小系统成功运行图

三、🔨 目录结构说明

  • TODO

四、🔬 使用许可

  • MIT (保留本许可后,可随意分发、修改,欢迎参与贡献)

五、📚 参考文献

(参考文献包括Nuts家族 C/C++、Java等子语言运行支持库、本项目框架、本项目等所有涉及的子项目的总参考文献、源码、设计、 专利等相关资料。便于读者了解相关技术(设计)的源头和底层方法论,作者向相关参考项目(以及未直接列出项目)作者表示崇高敬意和感谢。)

  1. C/C++ STL (容器、运行支持库设计,算法、设计模式和数据结构)
  2. Java JDK (容器、运行支持库设计,算法、设计模式和数据结构)
  3. Go SDK (容器、运行支持库设计,算法、设计模式和数据结构)
  4. PHP 5.6 Source (解释器、相关支持库设计)
  5. MySQL Source (参考多个设计**和部分**实现)
  6. Linux Kernel (参考多个设计**和部分**实现)
  7. Win95 Kernel (Reveal Edition),Win32Apis,Runtime framework
  8. WinNT 窗口事件**、回调函数注入等
  9. C/C++ Boost
  10. C/C++ ACL -- One advanced C/C++ library for Unix/Windows.
  11. Java Springframework Family (How IOC/AOP/etc works)
  12. Hadoop MapReduce (How it works)
  13. Python TensorFlow (Graph, how it orchestras)
  14. Javascript DOM 设计、CSS选择器等
  15. 其他若干个小框架、工具库、语言等(如Apache Commons、org.json、fastcgi、fastjson、libevent等),本文表示崇高敬意和感谢。

六、🐣 致谢

  • 必须感谢长江存储,不然我还要多花几倍钱买固态,感谢某东和某宝折扣~。
  • TODO

七、🐱 题外话

7.1 FQA

7.1.1. 更新时间?

很遗憾已经上班牛马了,更新速率减低到(3h/pd),但每周仍然保证更新!

7.1.2. Bean Nuts XXX是啥?

系统命名法,Bean是我第一个上网冲浪网名,Nuts是计算机领域根项目,Pinecone等坚果是子领域项目(如面向框架、面向业务等),后面是子项目。

7.1.3. 为毛用Java?

本项目一开始就是C/C++写的,但是由于该项目难度和工作量,一直找不到合适的人一起开发,且维护成本随项目迭代成指数增长,心有余而力不足,但后续根据时间可能出Go版本。

7.1.4. 这种偏底层项目Java有无性能影响?

底层上肯定有一定影响,但Java是工业界非常优秀的实践之一,且那一点点Tiny性能损失与指数级代码维护相比,以人为本,问题不大。

7.1.5. 这种项目怎么维护、学习?

数仓和这类底层项目建设是系统工程,实践中很少有个人或非商业团队愿意耗资数万搭建小数仓体系的,哪怕在公司上班的同学没有一定职级也很难接触海量真实大数据。 实践中原始爬下来的海量4K小文件(或用户采集数据)->数据结构化处理->入库入仓->大数据检索->调用大模型API或生成图谱类->并发检索等完整的数据血缘、链路是非常系统、昂贵且复杂的建设。 且我们不像大公司一样财大气粗,服务器算力和不要钱一样,因此技术选型不能直接照搬中台那一套,我们需要考虑非常多的真实场景。 本人会不断自底向上真实搭建这样一套接地气的迷你云计算、中台体系,通过代码和终端来分享、发现和真实维护。

7.1.6. 这种项目的要学习需要多少知识储备?

很多东西的建设都是系统工程,系统两字易写却难做,很多人需要一生去真正理解系统两字。 与传统业务项目的CRUD不同,这类项目是全链路的,说大是迷你搭建整个中台、云体系,说小可以说是造操作系统小玩具。 吹牛逼容易、落地困难,我要的核心是落地,"我真有一头牛",因此这里没有一堆高大上的技术概念、技术黑话,很多技术和概念我会去简化、落地化而不是去卷所谓“优化”。 最后这个问题没有答案,迭代就是学习,就是储备,小白也有资格成长。

7.2 预告

[20万行,4年+迭代工作量] Bean Nuts Pinecone Draco C/C++ Edition (松果·龙族,运行支持框架)

  • C/C++ 版运行支持框架,“盗版”JDK,参考并C++重写HashMap、LinkdedHashMap、LinkdedTreeMap、BPlusTree等若干容器。
  • JSON、XML、HTML、DOM、CSS、Lock等若干小工具个实现。
  • FastCGI版,“盗版”Spring + PHP风格。 【直接支持C/C++手搓后端,以本人个人博客网站为例,Red Nest

7.3 更多关联子系统、框架和实例系统

Bean Nuts Pinecone Ursus Java Edition (松果·熊族,运行支持框架)

底层数据结构、算法、运行支持库、框架等支持系统。(位于本项目Pinecones/Pinecone)

Bean Nuts Walnut Ulfhedinn Java Edition (核桃·狼皮狂战士,操作系统底层、第三方API封装SDK)

Java版本未完全系统化实现,本欲迁移C/C++版本下的实现,但JVM和JDK把大部分都实现了,很尴尬。Java下使用涉及第三方API的封装将由该模块职能负责。(位于本项目Pinecones/Ulfhedinn)

Bean Nuts Walnut Sparta (核桃·斯巴达,图形界面交互系统)

本双月疯狂构建中。构建完将支持本系统以及与其他子系统的的图形界面、控制台双交互,系统将基于Springboot实现构建。(位于本项目Walnuts/Sparta)

7.4 ☣ 技术债声明, Acknowledgement ⚠

非严谨说明,由于本人技术栈杂、本人习惯等,且涉及项目历史长、本项目工程量巨大。可能导致部分概念、设计、不一定是当前Java技术栈体系下最优实现或最紧扣概念的设计。

  • 举个栗子:本人学习方法是先脑补,再补过程和概念,且先保业务开发进度的方法论(先验和迁移学习,说人话就是快速混用其他技术栈概念或实践,而非完美调研,反正不影响结果和功能)。 因此可能存在概念出错、不严谨,后续再还技术债的现象,但这不影响我们持续认真检查以确保最终质量。
  • 永无止境、实践出真知:Rome was not built in a day, 项目涉及的技术门类较多,这个项目是我本科和研究生期间的业余爱好项目。 虽然已尽可能搭建真实平台、实践、学习,但本人工作经验有限,因此不能保证不犯错误(甚至低级错误),欢迎批评指正,持续迭代。

📈 项目活跃表

Alt