分布式事务编排, Adhoc, OLAP, 微服务, 服务与任务编排管理器, 分布式系统设计, 资源树, 跨平台简易部署, 爬虫, 分布式爬虫, 大规模爬虫, 搜索引擎, 知识图谱, 大数据处理, 数据仓库, 云计算, 中台
简体中文 | English[TODO] | Nuts Projects | Dragon King | Ken 老板 | Genius 老板 | Welsir 老板
文档(持续增量更新): https://docs.nutsky.com/docs/hazelnut_sauron_zh_cn | 真实集群搭建过程: https://zhuanlan.zhihu.com/p/634851956
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,持续更新的保姆级教程和实例最小系统,系统可大可小,丐版技术也能玩转云和大数据。
- 构造你的私人知识库,关联任何你感兴趣的知识图谱(音乐、电影、视频、小说、美食、新闻、学术等),生成巨型知识字典和图谱,并交给GPT等大模型给你生成属于你的
上帝报告
。 - 海量数据,任你处置,你可以打造自己的数据
天眼
,甚至可以乘坐时光机,在数据世界中随意穿行。你就是上帝,历史的变迁,触手可及。 - 打造你的个人GPT,随着算力平民化、大模型技术的平民化。未来,你不想拥有自己的GPT吗?你只需要不断收集属于你的数据集,未来打造你的专属GPT、Diffusion等。
- 我关注业务,我只想赚钱,我只想写论文,Ah!Hydra + Radium的目标正是助你快速构建大规模爬虫引擎,打造你的专属网络数据采取系统。
- 我对爬虫没兴趣,我想要一个中台系统,快速自动化部署多种多样的服务和任务。Hydra为你最大化抽象,多种任务一个接口。
- Hydra 是由 DragonKing(undefined) 和其团队原创的,面向跨平台PB级别云计算、数据仓库、多任务调度、MapReduce、通信、服务化、抽象化分布式操作系统。
- 其设计理念是基于对中台架构的创新和一体化,并尝试构造更一致的操作内核, 目前的设计尝试由一个迷你中台和云系统(豆子坚果云)不断自底向上迭代。
- 支持统一高度抽象化的任务、事务、服务等编排,一套接口,可分级、可本地、可集群。
- 抽象统一分布式资源树系统,场景树、服务树、任务树、部署树、配置树、存储树等。
- 可多级、可嵌套的编排系统,支持配置域管理、复杂配置动态解耦、可继承和重写的多域配置管理。
- 可事务化抽象进程、线程模型,让远端服务通过RPC或通信组件通过一套接口,像本地进程一样进行统一管理。
- 可事务图化编排方法论设计,就像TensorFlow,更抽象简单的服务、任务设计模式。事务和任务编排支持序列和并行两种模式,更支持性能模式。确保事务绝对执行、回滚、性能执行、并行等多种范式。
- 面向统一解释器模式方法论和过程化设计,事务和任务编排逻辑化,支持循环控制、条件控制、散转控制、原子化等。
- 抽象统一任务管理器体系,统一生命周期设计,多类任务一套“任务管理器”,就像本地系统一样简单。
- 抽象统一系统架构体系,可中心化、可联邦化、可链式化,一切皆有可能。
- 抽象统一文件系统,基于Common VFS 统一文件系统管理,从复杂底层存储中解放。
- 抽象统一数据处理体系,泛容器化思想,抽象化DAO、DTO、Data Manipulation架构,一切皆可是Map、List、Set和Table等。
- 抽象化部署模式和抽象云部署,无论是任何系统、本地进程、虚拟机部署、容器部署等。Hydra为您统一,“小程序”化进程模型,就像Springboot一样简单。
- 基于分治和MapReduce思想设计,面向大数据处理处理系统设计。
- 高性能RPC设计基于Netty和NIO,更好的性能呈现。
- 传统实例化、IOC化、C/C++风格化,多种对象生命周期模式,更有趣的系统设计。
- 可分级、分组、嵌套、级联的设计方法论,确保更灵活的大型系统设计,确保系统结构清晰、规整、可视、整整齐齐。
- 无需担心抽象,无需担心"吹牛逼",我们尽可能通过实际案例和有效代码,展示系统功能,也欢迎commit。——以实现小型爬虫搜索引擎为例。
该仓库为Java 11实现版本(由C/C++版本重构),非GUI大部分不直接基于第三方框架。
此外由于本项目工程量、复杂度和工作量较大,本人精力、能力有限,错误和功能完整性不足是不可避免的,还希望各位读者大佬批评指正。
最后,由于本人精力和工作时间等问题,该公开版本为beta版本,一部分功能未完全实现,后续会不断迭代,欢迎关注。
- 该部分为分布式爬虫引擎、爬虫大数据处理、清洗、持久化框架系统的实现。面向分布式大规模系统性爬虫设计,支持任务编排和并行流水线爬虫、支持周期和定时大规模爬虫、支持并行离线数据处理。
- 该部分基于Pinecone、Ulfhedinn、Slime、Hydra、Radium等子框架最终设计的搜索引擎(数据采集、数据处理侧)应用实例。
- 多个实例助你快速入门:1).维基百科全站爬取;2).Urban Dictionary全站爬取;3).imdb爬取;4).编年史子项目,每日全世界新闻采集,打造你的互联网记忆库;等。
- 数据检索引擎演示实例参考SauronEyes (https://god.nutsky.com | http://www.godview.net)
- LinkedTreeMap
- ScopeMap (多域查找树、Map), 实现和支持类似动态语言(如JS、PHP、Python等)的底层继承数据结构,支持两类子模型(单继承、多继承), 可以实现多域查找的功能。
- Dictium、Dictionary(字典接口模型),实现和支持类似动态语言(如PHP、Python等)的Array、字典查找,Map和可索引对象进一步抽象化。
- Multi*Map (多种MultiValueMap范式),实现支持多种多值Map的实现,如MultiCollectionMap、MultiSetMap等。
- Top (TopN问题通用解决),实现和支持堆法、有序树法、多值有序树法三种实现。
- distinct (差异器),实现传统Set法、分治法、Bloom等的集合差异分析器。
- affinity (亲缘性器),实现和支持对亲缘抽象字典的继承、重写等。
- tabulate (遍历器),实现以列表式对抽象字典的内部递归,并列表化和分析亲缘关系。
- ShardList (非复制式共享数组),由 @Geniusay 贡献。
- TrieMap (前缀树Map),支持非递归迭代器,类文件系统完整功能前缀树,Symbolic Reparse 引用挂载点。
- JSON库,BSON,JPlus(JSON++)库 (面向可二次开发、设计的自由JSON设计),可以重写JSONEncoder、JSONDecoder、JSONCompiler、JSONDecompiler、注入器等。
- Name命名空间库
- lang (Java包和扩展库),支持各类类扫描方法、包扫描方法、遍历和收集方法、加载、多域扫描等。
- GUID (由@kenssa4eedfd贡献),统一分布式ID,魔改百度Uid,GUID64、GUID72,支持随机混淆。
- TODO TODO
- HierarchySystem,阶级系统(Master-Slaver推广架构)
- FederalSystem,联邦系统(面向投票式设计) [BETA, 20250101]
- BlockSystem,块式系统(面向边缘、链式系统设计)。让你的每台设备都成为你专属链上节点。 [BETA, 20250101]
- CascadeComponent, 级联组件设计,支持亲缘性回收控制,“The Omega Device”,级联回收主键引用。
- 分布式容器(分布式多域树等)
- 分布式微内核
借鉴WinNT、Unix,支持KernelObject、挂载点、统一内核对象管理。
Unix风格内核句柄路径化,如分布式挂载 /proc/、/dev/ 等。
- Orchestration (事务、任务编排子系统),面向统一解释器模式方法论和过程化设计,事务和任务编排逻辑化,支持循环控制、条件控制、散转控制、原子化等,更支持事务完整性设计。
- Auto (简易命令模式,可编程自动机系统),实现支持Automaton简易生产-消费命令队列,实现支持PeriodicAutomaton可编程Timer,实现支持Marshalling流水线指令编排器。(更多Timer和算法持续更新中)
Servgram,小程序系统,是的这很微信,不过是服务端的小程序哦!进一步抽象和推广进程思想,任何服务介质(本地、虚拟机、容器等),一切服务、一切任务等。
一切统一和谐,一套调度、一套接口、一套操作,生命周期整整齐齐(满足你的控制欲),更可冗余确保稳定。
配合任务编排和事务编排,多个任务,一套系统全包干。
(TODO,远端进程进一步实现、实现统一分布式锁接口)
- 基于Netty设计的原创消息控制中间件,支持RPC模式。
- 二进制RPC协议支持,更多RPC协议持续更新中。[TODO 分片、泳道]
- 支持JSON、二进制协议。
- 类似AJAX,支持同步、异步消息回调。
- 配合MessageExpress, 支持类似 SpringController 式消息控制。[BETA]
- 服务树
支持多级分类的服务树,可以设置多级命名空间,如Name1.Name2.应用1.服务1
。
支持元信息继承、多引用、节点回收、支持复杂服务管理分类。
-
配置树、分布式注册表
"盗版" Apollo,支持分布式配置管理。一个配置中心,就像 Windows注册表一样。- 统一DOM / 前缀树 抽象化,支持自定义节点(插件设计),文件系统式设计。
- 支持配置继承
- 支持Hard Link 引用(标记法引用计数,有循环引用检测 / inode 表设计)
- 支持选择器 (路径选择器、XPath)
- 支持大数据(数据库基准)
- 路径缓存设计
- 改进非递归DFS路径寻址算法
- 兼容Windows 配置表风格
- 支持移动、复制(支持递归级联,复制 / 移动文件夹和配置项)
- 支持 JSON、XML 等原始文本或动态数据格式,支持 JSON、XML 与注册表混转。
- 支持配置动态渲染(EL表达式、逻辑循环支持)
- 数据库操作和底层分离,支持数据库、内存、Redis等任意数据源
-
任务树
任务、进程分类、分组和编排系统。
对一级挂载点/proc/${proc_guid}/task
的二级挂载和分类。 -
部署树、部署管理器
多种部署模式(如容器、虚拟机、PaaS等),分类、分组和编排系统,类似 Windows 设备管理器。
抽象部署设备类似传统操作系统的物理设备,通过编写驱动,实现对部署子系统的管理。 -
场景树
功能分类、分组和编排系统。
- 优化和缓存版RDBMapper、IndexableMapper,使用多种缓存策略,泛容器化API接口使用。
基于Map-Reduce思想,面向TB-PB级别数据处理,统一任务编号、映射、处理。 范式包含 Reaver(掠夺者,数据取回器),Stalker(潜伏者,面向批量爬虫索引嗅探),Embezzler(洗钱者,面向批处理爬虫数据处理)。
支持事务型、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" }
]
}
- TODO
- MIT (保留本许可后,可随意分发、修改,欢迎参与贡献)
(参考文献包括Nuts家族 C/C++、Java等子语言运行支持库、本项目框架、本项目等所有涉及的子项目的总参考文献、源码、设计、 专利等相关资料。便于读者了解相关技术(设计)的源头和底层方法论,作者向相关参考项目(以及未直接列出项目)作者表示崇高敬意和感谢。)
- C/C++ STL (容器、运行支持库设计,算法、设计模式和数据结构)
- Java JDK (容器、运行支持库设计,算法、设计模式和数据结构)
- Go SDK (容器、运行支持库设计,算法、设计模式和数据结构)
- PHP 5.6 Source (解释器、相关支持库设计)
- MySQL Source (参考多个设计思想和部分思想实现)
- Linux Kernel (参考多个设计思想和部分思想实现)
- Win95 Kernel (Reveal Edition),Win32Apis,Runtime framework
- WinNT 窗口事件思想、回调函数注入等
- C/C++ Boost
- C/C++ ACL -- One advanced C/C++ library for Unix/Windows.
- Java Springframework Family (How IOC/AOP/etc works)
- Hadoop MapReduce (How it works)
- Python TensorFlow (Graph, how it orchestras)
- Javascript DOM 设计、CSS选择器等
- 其他若干个小框架、工具库、语言等(如Apache Commons、org.json、fastcgi、fastjson、libevent等),本文表示崇高敬意和感谢。
- 必须感谢长江存储,不然我还要多花几倍钱买固态,感谢某东和某宝折扣~。
- TODO
很遗憾已经上班牛马了,更新速率减低到(3h/pd),但每周仍然保证更新!
系统命名法,Bean是我第一个上网冲浪网名,Nuts是计算机领域根项目,Pinecone等坚果是子领域项目(如面向框架、面向业务等),后面是子项目。
本项目一开始就是C/C++写的,但是由于该项目难度和工作量,一直找不到合适的人一起开发,且维护成本随项目迭代成指数增长,心有余而力不足,但后续根据时间可能出Go版本。
底层上肯定有一定影响,但Java是工业界非常优秀的实践之一,且那一点点Tiny性能损失与指数级代码维护相比,以人为本,问题不大。
数仓和这类底层项目建设是系统工程,实践中很少有个人或非商业团队愿意耗资数万搭建小数仓体系的,哪怕在公司上班的同学没有一定职级也很难接触海量真实大数据。 实践中原始爬下来的海量4K小文件(或用户采集数据)->数据结构化处理->入库入仓->大数据检索->调用大模型API或生成图谱类->并发检索等完整的数据血缘、链路是非常系统、昂贵且复杂的建设。 且我们不像大公司一样财大气粗,服务器算力和不要钱一样,因此技术选型不能直接照搬中台那一套,我们需要考虑非常多的真实场景。 本人会不断自底向上真实搭建这样一套接地气的迷你云计算、中台体系,通过代码和终端来分享、发现和真实维护。
很多东西的建设都是系统工程,系统两字易写却难做,很多人需要一生去真正理解系统两字。 与传统业务项目的CRUD不同,这类项目是全链路的,说大是迷你搭建整个中台、云体系,说小可以说是造操作系统小玩具。 吹牛逼容易、落地困难,我要的核心是落地,"我真有一头牛",因此这里没有一堆高大上的技术概念、技术黑话,很多技术和概念我会去简化、落地化而不是去卷所谓“优化”。 最后这个问题没有答案,迭代就是学习,就是储备,小白也有资格成长。
[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】
底层数据结构、算法、运行支持库、框架等支持系统。(位于本项目Pinecones/Pinecone)
Java版本未完全系统化实现,本欲迁移C/C++版本下的实现,但JVM和JDK把大部分都实现了,很尴尬。Java下使用涉及第三方API的封装将由该模块职能负责。(位于本项目Pinecones/Ulfhedinn)
本双月疯狂构建中。构建完将支持本系统以及与其他子系统的的图形界面、控制台双交互,系统将基于Springboot实现构建。(位于本项目Walnuts/Sparta)
非严谨说明,由于本人技术栈杂、本人习惯等,且涉及项目历史长、本项目工程量巨大。可能导致部分概念、设计、不一定是当前Java技术栈体系下最优实现或最紧扣概念的设计。
- 举个栗子:本人学习方法是先脑补,再补过程和概念,且先保业务开发进度的方法论(先验和迁移学习,说人话就是快速混用其他技术栈概念或实践,而非完美调研,反正不影响结果和功能)。 因此可能存在概念出错、不严谨,后续再还技术债的现象,但这不影响我们持续认真检查以确保最终质量。
- 永无止境、实践出真知:Rome was not built in a day, 项目涉及的技术门类较多,这个项目是我本科和研究生期间的业余爱好项目。 虽然已尽可能搭建真实平台、实践、学习,但本人工作经验有限,因此不能保证不犯错误(甚至低级错误),欢迎批评指正,持续迭代。