当 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
开发文档: