当你说SF我假设你的意思是SF Actors对吗?
您可以按照自己的方式使用它们,但在这两种情况下都不适合您的问题,因为:
- 演员是单线程的,如果您计划与多个客户端共享同一个实例,则每个客户端必须等待前一个客户端开始处理任何内容。如果您需要监视正在运行的actor的状态,则必须让actor向外部订阅者发布更新。
- Actor状态是孤立的,所以你无法访问其他actor的状态,这样做的方法是提供一个返回它的方法,但是如果actor正在运行命令你必须等待完成,除非你创建一个单独的状态服务来保存已处理的数据。
- 您不能限制actor所需的资源,在服务结构中指定服务所需的资源,但是您不能为actor执行此操作,并且您不能限制他们使用的资源,当他们使用时达到极限,服务结构将尝试为您平衡资源,但没有什么能阻止进程消耗更多内存而不是请求。
- 两个actor服务都使用ask方法进行通信,因此它们会“阻止”调用者等待答案,它是异步的,但你仍然需要让调用者“等待”。 (阻止和等待是因为没有火灾的想法而忘记了使用Tell方法的Akka,它传递信息并忘记。)
醇>
根据您的一些要求,我认为容器是更好的方法。这是因为:
- 您可以限制每个容器的资源消耗
- 数据在容器内被隔离,其他人看不到
醇>
但是在容器上你必须自己管理复制和分区,所以在这种情况下我会推荐两全其美:
- 创建SF服务以托管用户之间的共享数据集
- SF Service + Actor仅存储用户模拟的结果。
- 运行模拟并向演员发送更新的容器
这只是一个例子,它将取决于您的要求,架构以及数据如何相互隔离。