Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?
Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?最近整理了一下项目的术语表。今天就谈谈为什么起了 Claptrap 和 Minion 两个名字。
Claptrap
Claptrap 是本框架定义的一种特殊 Actor。除了上文中提到 Actor 两种特性之外,Claptrap 还被定义为具有以下特性:
状态由事件进行控制。Actor 的状态在 Actor 内部进行维护。Claptrap 同样也是如此,不过改变 Claptrap 的状态除了在 Actor 之外,还限定其只能通过事件进行改变。这就将事件溯源模式与 Actor 模式进行了结合。通过事件溯源模式保证了 Actor 状态的正确性和可追溯性。这些改变 Claptrap 状态的事件是由 Claptrap 自身产生的。事件产生的原因可以是外部的调用也可以是 Claptrap 内部的类触发器机制产生的。
Claptrap 是 newbe36524 曾经玩过的一款老游戏中的经典角色。点击此处了解
Minon
Minion 是本框架定义的一种特殊 Claptrap 。是在 Claptrap 基础上做出的调整。其具备以下特性:
从对应的 Claptrap 读取事件。与 Claptrap 相同,Minion 的状态也由事件进行控制。不同的是,Minion 就像其字面意思一样,总是从对应的 Claptrap 处获取事件,从而改变自身的状态。因此,其可以异步的处理 Claptrap 产生事件之后的后续操作。
Minion 一词出自 newbe36524 玩的一款运气游戏《炉石传说》,其中 “随从” 在英文版中的描述即为 “minion”。
Claptrap 故事化描述
以下是关于 Claptrap 的故事化描述,用于辅助理解。不必太过在意。
Claptrap 是一种结构简单、功能简单的机器人。虽然它能够完成各种各样的任务,但是它却有一些限制。
Claptrap 是一种单线程的机器人,它每次只能进行一个任务。如果你想要交给它多个任务的话,它会按照事情安排的先后顺序逐个处理。
Claptrap 工作的时候大概的过程是这样的。当他接受到一个任务时,他会先考虑这个事情是否是他能够百分之百完成的。如果这件事情他能够百分之百完成,那么那就将这件事情写入到他的备忘录当中,然后完成这件事情。然后接下来处理下一个事情。
每天早上一起来,Claptrap 做的第一件事情就是找回迷失的自我。找回昨天那个棒棒的自己。首先它会尝试看看有没有昨天的靓照,如果有的话,它将复刻昨天的样貌。接下来,从手中的备忘录当中阅读昨天拍照之后发生的种种事情,逐渐的恢复自己的记忆。这样就成功的找回的自己。
Claptrap 是一种标准化的机器人。它们都产出于 Claptrap 工厂的生产线。工厂会按照 Claptrap 设计图使用标准化的组件来组装一个 Claptrap 机器人。这些必要的组件主要包括了:内存、手持型备忘录、多功能任务处理器和内存打印机。
内存。Claptrap 配备有一个定制化大小的内存,用于保存当前整机的状态数据。由于内存数据的断电易失性,所以假如 Claptrap 断电了,那么内存中的数据也就丢失了。
多功能任务处理器。基于成本的考虑,每个 Claptrap 配备的多功能任务处理器都是为了特种的任务定制过的。例如:专门用于消防的 Claptrap ,在它们的多功能任务处理器中基本上包含的都是和消防有关的功能。但是它就无法处理家政相关的任务。
手持型备忘录。Claptrap 在做每件任务之前都会用手持型备忘录记录任务相关的一切细节,来确保任务的每个细节都准确无误。
内存打印机。可以将内存当中的数据打印成一份可以持久化保存的物理格式,在实际生产中用的比较多的是 DNA 记忆体。由于内存数据的断电易失性,所以重启之后内存当中的数据只能通过备忘录记录来逐个找回。但由于备忘录数据有可能很大,这样恢复起来会比较的缓慢。有了内存打印机的帮助,便可以将某一时刻的内存状态完全打印出来,这样在重启恢复时将加快内存数据恢复的速度。
Minon 故事化描述
以下是关于 Minion 的故事化描述,用于辅助理解。不必太过在意。
对于较为复杂的任务来说单个 Claptrap 完成起来会比较困难。因此,在设计此类 Claptrap 的时候会按照需求给这个 Claptrap 追加几个小弟来协助它完成手头的任务。这些小弟被称为 Minion 。Minion 的本质也是一台 Claptrap 机器人,但是它们相对于完整版的 Claptrap 来说,减少了手持型备忘录这个设备。这是源于其工作方式和 Claptrap 略有不同的原因。
Minion 只能通过协同 Claptrap 来完成任务,它们不能决定是否要做某个任务。所以记录任务详细信息的手持型备忘录只要有 Claptrap 持有就可以了。
当 Claptrap 完成一件任务时,它会通知他的 Minion 们关于此次任务的细节。这样 Minion 便可以同步的获得任务内容,并借此来更新自己的记忆。以下我们来通过一个例子来解释这种工作模式。
假设我们现在在某个小区投放了一台 Claptrap 机器人来作为门卫机器人。它的工作职责包括有以下这些:
- 负责对门房的车辆进行检查和放行
- 负责对付来自路人的各种询问
我们现在知道,Claptrap 机器人在工作的时候只能同时处理一件事情。也就是说,假如它正在为某台车辆进行检查和放行,那么它就无法处理路人的询问。同样地,假如它正在接受路人的询问,那么它就无法处理车辆的检查和放行。这么做效率并不高。因此,我们为这台 Claptrap 增加一台 Minion 来协助其完成接受路人询问的任务。
具体的工作方式是这样的:每天,Claptrap 都会对小区周围的情况进行检查并且将具体的信息全部都记录在手持型备忘录当中。并且它会将这些任务的细节通知给它的 Minion 。于是 Minion 就也知道了关于这个小区的所有细节,因此它就能够轻松的应付路人的询问了。
通过这样的合作,就能使得 Claptrap 更加高效的专注于车辆的检查和放行,而路人的询问则交给 Minion 来处理就可以了。
不过,对于一些细节还需要进行补充解释以便读者理解:
为什么不直接增加一台新的 Claptrap 来直接处理路人的询问呢?一台新的 Claptrap 意味着一个新的主体,它能够独立的完成任务,这样会增加管理的成本。但是如果只是新增一台 Minion ,它则可以由它所属的 Claptrap 来负责管理,相较而言更容易管理。当然为了增加一点代入感,还可以这么理解:Minion 相比于常规的 Claptrap 缺少了手持型备忘录这个设备。这个设备的成本占总硬件成本的 99%。减少成本来完成相同的任务,何乐不为呢?
Claptrap 将任务细节通知给 Minion 的成本会不会很高?不会的。Claptrap 和 Minion 一般都是团伙作业,随着现在无线网络技术的不断改善,这种成本将会越来越小。5G 赋能,未来可期。
现在,我们在额外考虑一个场景:假如物业经理希望 Claptrap 每天定时汇报小区的车辆出入情况。同样,为了增加代入感,我们不妨假设这个小区非常忙碌,一天 24 小时都有车辆进进出出。因此如果让它拿出时间来汇报车辆出入情况的话,由于 Claptrap 的单线程特性,那么很可能小区门口就堵成长安街了。
有了前面的经验,我们同样可以为这台 Claptrap 配备一台新的 Minion 来处理向物业经理汇报的这个任务。因为 Claptrap 在进行车辆出去检查的时候会将相关的细节通知给 Minion。所以 Minion 也就知道了关于今日车辆出入情况的所有细节,做出报表,那就是分分钟的事情。
我们再来增加一个场景:我们需要普查一下人口数量。那么只需要在小区门卫 Claptrap 检查出入人员时,对人员的信息进行记录。同样的,我们添加一台 Minion 来专门汇总那些核的数据,并且将上级部门。正巧,上级部门也是通过一台 Claptrap 机器人来接收下级的数据汇报,并且正好其也有一台 Minion 用来汇总下级汇报上来的数据,并且汇报给它的上级。就这样 Claptrap1 -> Minion1 -> Claptrap2 -> Minion2 -> Claptrap3 …… 一层一层的向上。于是我们就完成了全国乃至全球的数据汇总。
因此,我们可以总结一下。有了 Minion 的加持,可以为 Claptrap 更好的完成至少三类事情:
- 协助分担原有的查询类任务
- 协助完成一些统计、通知等等可以异步处理的任务
- 协助完成和其他 Claptrap 的协同来完成规模更大的任务
最后但是最重要!
最近作者正在构建以反应式
、Actor模式
和事件溯源
为理论基础的一套服务端开发框架。希望为开发者提供能够便于开发出 “分布式”、“可水平扩展”、“可测试性高” 的应用系统 ——Newbe.Claptrap
本篇文章是该框架的一篇技术选文,属于技术构成的一部分。如果读者对该内容感兴趣,欢迎转发、评论、收藏文章以及项目。您的支持是促进项目成功的关键。
如果你对该项目感兴趣,你可以通过 github issues 提交您的看法。
如果您无法正常访问 github issue,您也可以发送邮件到 newbe-claptrap@googlegroups.com 来参与我们的讨论。
点击链接 QQ 交流【Newbe.Claptrap】:https://jq.qq.com/?_wv=1027&k=5uJGXf5。
您还可以查阅本系列的其他选文:
- Newbe.Claptrap - 一套以 “事件溯源” 和 “Actor 模式” 作为基本理论的服务端开发框架
- 十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验
- 谈反应式编程在服务端中的应用,数据库操作优化,从 20 秒到 0.5 秒
- 谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert
- docker-mcr 助您全速下载 dotnet 镜像
- Newbe.Claptrap 项目周报 1 - 还没轮影,先用轮跑
- Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车
- Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?
GitHub 项目地址:https://github.com/newbe36524/Newbe.Claptrap
Gitee 项目地址:https://gitee.com/yks/Newbe.Claptrap
开发文档:http://claptrap.newbe.pro/
- 本文作者: newbe36524
- 本文链接: https://www.newbe.pro/Newbe.Claptrap/Why-Claptrap-And-Minion/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?的更多相关文章
- 轻松应对并发问题,Newbe.Claptrap 框架中 State 和 Event 应该如何理解?
Newbe.Claptrap 框架中 State 和 Event 应该如何理解?最近整理了一下项目的术语表.今天就谈谈什么是 Event 和 State. Newbe.Claptrap 是一个用于轻松 ...
- golang gin框架中使用protocol buffers和JSON两种协议
首先,我使用protobuf作为IDL,然后提供HTTP POST + JSON BODY的方式来发送请求. 能不能使用HTTTP POST + PB序列化后的二进制BODY呢? 做了一下尝试,非常简 ...
- Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车
接上一篇 Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开始尝试使用 ...
- 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析
Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...
- Newbe.Claptrap 框架如何实现多级生命周期控制?
Newbe.Claptrap 框架如何实现多级生命周期控制?最近整理了一下项目的术语表.今天就谈谈什么是 Claptrap Lifetime Scope. 特别感谢 kotone 为本文提供的校对建议 ...
- 轻松应对并发,Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单
接上一篇 Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开 ...
- laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法
laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...
- Collection框架中实现比较要实现什么接口?
Java集合框架中需要比较大小的集合包括TreeMap.TreeSet,其中TreeMap会根据key-value对中key的大小进行排序,而TreeSet则会对集合元素进行排序. 因此TreeMap ...
- 十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验
Newbe.Claptrap 项目是笔者正在构建以反应式.Actor模式和事件溯源为理论基础的一套服务端开发框架.本篇我们将来了解一下框架在水平扩展方面的能力. 前情提要 时隔许久,今日我们再次见面. ...
随机推荐
- FWT,FST入门
0.目录 目录 0.目录 1.什么是 FWT 2. FWT 怎么做 2.1. 或卷积 2.2.与卷积 2.3.异或卷积 2.4.例题 3. FST 3.1. FST 怎么做 3.2.例题 1.什么是 ...
- Docker巨轮的航行之路-基础知识篇
一.什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中 ...
- Kubernetes-subpath的使用
一.什么是subpath 为了支持单一个pod多次使用同一个volume而设计,subpath翻译过来是子路径的意思,如果是数据卷挂载在容器,指的是存储卷目录的子路径,如果是配置项configMap/ ...
- 并发系列(一)——线程池源码(ThreadPoolExecutor类)简析
前言 本文主要是结合源码去线程池执行任务的过程,基于JDK 11,整个过程基本与JDK 8相同. 个人水平有限,文中若有表达有误的,欢迎大伙留言指出,谢谢了! 一.线程池简介 1.1 使用线程池的优点 ...
- LR字符串处理函数-lr_save_var
int lr_save_var ("截取的字符串"+start,len,options,param_name) start:表示从第几位截取 len:表示截取长度 option ...
- mybatis 多表联查,多个实体类,如何返回一个List?(表太多,字段太多的问题)
原文:https://ask.csdn.net/questions/674166 自己重新定义一个实体类 把查询结果放到这个实体类中,实体类包含所有的查询结果的字段 一个更好的办法,我发现你这关联表所 ...
- 安装allure测试报告
必须安装jdk1.8,配置环境变量 一.环境准备 Windows10 jdk-9.0.1 二.下载并安装JDK 到Java的官网下载JDK安装包,地址:http://www.oracle.com/te ...
- tcpdump抓包工具的基本使用
为了更好的深入理解计算机网络等相关知识,例如TCP\UDP\IP等,我们就必须利用tcpdump.Wireshark等工具对网络进行分析.本篇博文主要记录一下tcpdump这个网络分析利器的一些基本使 ...
- C# 加密、解密PDF文档(基于Spire.Cloud.SDK for .NET)
Spire.Cloud.SDK for .NET提供了接口PdfSecurityApi可用于加密.解密PDF文档.本文将通过C#代码演示具体加密及解密方法. 使用工具: Spire.Cloud.SDK ...
- Java Jar 包加密 -- XJar
Java Jar 包加密 一.缘由 Java的 Jar包中的.class文件可以通过反汇编得到源码.这样一款应用的安全性就很难得到保证,别人只要得到你的应用,不需花费什么力气,就可以得到源码. 这时候 ...