演员模型(akka)适合我的申请吗?

演员模型(akka)适合我的申请吗?,akka,scalability,actor,akka-stream,akka-cluster,Akka,Scalability,Actor,Akka Stream,Akka Cluster,我读博客,听播客,读Akka文档已经有一段时间了,但我仍然不能说我真的理解演员模型是否适合我试图解决的问题 让我们以构建一个应用程序为例,该应用程序告诉您什么样的狗最适合一个人(实际上不是我正在制作什么,而是用于描述我想要制作什么)。 我每秒都会收到大量的信息,人们想知道买什么狗,系统应该根据我所掌握的有关此人的信息来决定他们应该买什么狗 事件: 一个人想要一条狗 我的订户: 好的,一个人想要一只狗,让我们检查一下给他们买什么狗->让我的应用程序来解决这个问题 应用程序: 获取请求 从其

我读博客,听播客,读Akka文档已经有一段时间了,但我仍然不能说我真的理解演员模型是否适合我试图解决的问题

让我们以构建一个应用程序为例,该应用程序告诉您什么样的狗最适合一个人(实际上不是我正在制作什么,而是用于描述我想要制作什么)。 我每秒都会收到大量的信息,人们想知道买什么狗,系统应该根据我所掌握的有关此人的信息来决定他们应该买什么狗

  • 事件: 一个人想要一条狗

  • 我的订户: 好的,一个人想要一只狗,让我们检查一下给他们买什么狗->让我的应用程序来解决这个问题

  • 应用程序:

    • 获取请求
    • 从其他系统收集更多关于此人的数据(他们住在哪里、拥有的空间、时间、运动程度等)
    • 要求线程/演员/诸如此类的人使用一套规则来检查他们应该得到什么样的狗
    示例:
    • 此人是否居住在这些区域中的任何一个(检查缓存中适合大狗的区域)(大多数检查将在列表中查找内容)
    • 这个人的房子比x大还是比x小
    • 这个人工作时间长吗
    所有这些检查都会向应用程序返回一个结果,应用程序会收集所有答案,直到完成所有操作,然后根据这些结果决定结果

    现在请记住,将有很多消息的所有时间,我想同时运行这些检查,以便能够尽快回答。应用程序将在Kubernetes集群中的容器中运行,我希望能够在出现峰值负载或将来消息量增加时扩展应用程序

    到目前为止,我的工作进展顺利 actor模型似乎适合于我的应用程序的第一部分(获取一个为某人找到合适狗的请求),因为它有自己的状态,它根据从其子actor/threads/which获得的回复来管理

    但是:实际执行检查的工作人员不需要内部状态,因为他们只是检查有关此人的某些信息是否在列表XYZ中,或者此人的房子是否大于X。(因此,不适合使用演员)

    因此:对于我的应用程序来说,演员模型是不是太过了?我应该用什么来代替?只是未来?如果我使用actor模型,我应该使用Akka集群吗?Akka streams是另一种选择吗


    我太糊涂了

    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集群很好地服务于某些用例(例如,保持节点之间的数据同步),但它肯定会引入复杂性和学习曲线。享受冒险吧!顺便问一下,你介意接受这个答案吗?谢谢