Scala Akka HTTP 后端服务器 - 执行上下文 系统设计

问题描述

我们有一个在 Scala 中实现的后端服务器,它基于 Akka HTTP 并为我们系统中的不同实体公开 API。

API 调用包含业务逻辑的不同服务(每个实体一个),而每个服务又使用一个使用 Mongo 的数据访问层(DAL 在实体之间也是分离的)。

目前,我们对所有 API 使用相同的执行上下文,每个 API 调用继续调用适当的服务,每个服务调用适当的 Mongo DAL,并且可能涉及调用其他服务。

Mongo DAL 使用与 API 不同的执行上下文来运行查询,但对于所有不同的 DAL 类使用相同的执行上下文。 DAL 阻塞它的操作,只有在操作完成后才返回到服务。

我正在考虑分离用于每个实体的执行上下文,这意味着每个 API 将具有不同的执行上下文。而且 DAL 将为每个实体提供不同的执行上下文。这样做的原因是,当系统负载过重时,我们会开始收到来自 DAL 的未来超时。

我们希望对在任何给定时间存在的不同线程进行可见性和监控,以便我们可以准确判断系统中的瓶颈在哪里。因此,例如,我们可能会看到一个实体受到请求的轰炸,而瓶颈在该特定实体的 DAL 中。然后我们可以增加该执行上下文的最大线程数,或者我们可以理解为什么系统中有这么多对该实体的请求并进行处理。

为每个实体设置不同的执行上下文是否有意义,或者甚至为每个实体设置两个执行上下文——一个用于 API 和服务,另一个用于 DAL?有没有更好的方法来了解系统中大部分线程的使用位置?

是否有一些推荐的方法来监视不同执行上下文中的线程数?我们想到的一种方法是向 Prometheus 报告每个执行上下文中的线程数,Prometheus 已经是系统中正在使用的组件。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...