演员模型(akka)适合我的申请吗?
我读博客,听播客,读Akka文档已经有一段时间了,但我仍然不能说我真的理解演员模型是否适合我试图解决的问题 让我们以构建一个应用程序为例,该应用程序告诉您什么样的狗最适合一个人(实际上不是我正在制作什么,而是用于描述我想要制作什么)。 我每秒都会收到大量的信息,人们想知道买什么狗,系统应该根据我所掌握的有关此人的信息来决定他们应该买什么狗演员模型(akka)适合我的申请吗?,akka,scalability,actor,akka-stream,akka-cluster,Akka,Scalability,Actor,Akka Stream,Akka Cluster,我读博客,听播客,读Akka文档已经有一段时间了,但我仍然不能说我真的理解演员模型是否适合我试图解决的问题 让我们以构建一个应用程序为例,该应用程序告诉您什么样的狗最适合一个人(实际上不是我正在制作什么,而是用于描述我想要制作什么)。 我每秒都会收到大量的信息,人们想知道买什么狗,系统应该根据我所掌握的有关此人的信息来决定他们应该买什么狗 事件: 一个人想要一条狗 我的订户: 好的,一个人想要一只狗,让我们检查一下给他们买什么狗->让我的应用程序来解决这个问题 应用程序: 获取请求 从其
- 获取请求
- 从其他系统收集更多关于此人的数据(他们住在哪里、拥有的空间、时间、运动程度等)
- 要求线程/演员/诸如此类的人使用一套规则来检查他们应该得到什么样的狗
- 此人是否居住在这些区域中的任何一个(检查缓存中适合大狗的区域)(大多数检查将在列表中查找内容)
- 这个人的房子比x大还是比x小
- 这个人工作时间长吗
- 等
我太糊涂了 akka演员非常适合在应用程序中管理状态。在您的用例中,状态可以缓存为来自以下请求的结果: 。。。来自其他系统的关于此人的数据(他们居住在哪里、拥有的空间、时间、运动能力等) 如果您想尽快执行这些任务,将这些数据缓存在应用程序内存中并使用actors处理这些内存中的数据听起来很有用 要执行检查,akka streams和graph DSL是您的最佳选择
val ask1=Flow[Req].mapsync(1){Req=>
someActorRef?req
}
val ask2=。。。
val bcast=b.add(广播[Req](N))
val zip=b.add(zip(…)
bcast.out(0)~>ask1~>zip.in0
b广播输出(1)~>ask2~>zip.in1
...
请随意阅读,了解更多关于阿克卡溪流的信息。它可以很容易地与akka actors和akka http集成
Akka集群与否是另一个问题,肯定需要更多信息才能做出决定,例如用户群有多大。谢谢您的输入!我将研究akka流并绘制DSL图。我对akka cluster的印象是,当您将拥有多个节点时,最好使用它,这样akka cluster就可以为您管理这些节点,而不必自己管理它们。假设我想运行我的应用程序的3个副本,我想让他们根据自己的容量进行工作。假设我每秒会有20个请求,每个请求都会导致100个检查。另外:在狗被确定之后,所有参与者都可以丢弃人的状态。Yah-Akka集群很好地服务于某些用例(例如,保持节点之间的数据同步),但它肯定会引入复杂性和学习曲线。享受冒险吧!顺便问一下,你介意接受这个答案吗?谢谢