Akka 阿克卡的管理问题

Akka 阿克卡的管理问题,akka,Akka,我是Akka的新手,我们正在为多个事务构建一个健壮的系统,可以扩展到每分钟5000个请求 调度器将列表或请求推送到Akka主参与者 Akka的主要参与者有子组件的引用,在子组件上说“询问”,并等待未来,子组件与“webservice适配器”交互,适配器在其中调用Web服务 在“webservice适配器”中,我们存储对数据库的请求和响应 一旦响应可用,适配器将结果返回给Subactor,然后返回给Future,以便在Actor中进行进一步处理 问题是: 由于我们在主参与者中使用“Ask”来调用子

我是Akka的新手,我们正在为多个事务构建一个健壮的系统,可以扩展到每分钟5000个请求

  • 调度器将列表或请求推送到Akka主参与者

  • Akka的主要参与者有子组件的引用,在子组件上说“询问”,并等待未来,子组件与“webservice适配器”交互,适配器在其中调用Web服务

  • 在“webservice适配器”中,我们存储对数据库的请求和响应

  • 一旦响应可用,适配器将结果返回给Subactor,然后返回给Future,以便在Actor中进行进一步处理

  • 问题是:

    由于我们在主参与者中使用“Ask”来调用子参与者,如果响应没有在预期时间内返回,主参与者将等待一段时间并超时

    由于适配器正在将请求和响应写入数据库,而数据库可能无法获得足够的连接,因此会发生响应延迟,因为主参与者一次会产生更多并行请求,这会导致数据库连接拥塞

    为了解决这个问题,我又创建了一个子组件(DBActor),它具有将请求和响应保存到DB的逻辑,子组件的引用在mainactor的子组件中创建,并将引用传递给“Webservice Adapters”。在适配器中,我正在调用DBActor
    Reference.tell(request,ActorRef.noSender())
    ,这是一个异步调用。现在,适配器不再等待数据库事务并以非常少的时间将响应返回给子组件,而且由于DBActor负责消息,现在也没有数据库拥塞

    我想知道,在subactor中通过在subactor的preStart()中创建DBActor的引用来调用DBActor是不是一件好事

    当我使用main actors dispatcher和默认的无界邮箱时,我看到很多死信


    你能建议一个更好的方法吗?我看到上面可能会有错误。

    再添加一层间接层就可以了。我认为你最好的模式应该是这样的:

    1) 入口点参与者接收请求并为其分配唯一id

    2) 入口点参与者生成一个worker,并将请求与id一起传递给它(tell)

    3) 工作者参与者等待连接,执行其行为,并响应主参与者(告诉)他已完成该请求(id)+可选结果值

    4) 主参与者完成外部请求

    这将完全删除任何ask模式。缺点:不保证排序(您可以通过在主入口点缓存响应并对其排序来实现排序)


    如果您仍然需要超时(web连接),您可以将worker actor上的计时器设置为在一段时间后停止。

    您对有序处理请求有什么要求吗?