微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。