首页 > 解决方案 > Play Framework - AWS 的生产配置线程/数据库连接

问题描述

我们有一个 Play Framework 应用程序,但我们遇到了生产问题。我很好奇人们在您的 production.conf 上使用了哪些设置来确保您的 Web 服务器不会变慢。我们有一个基本的 Web 应用程序,它与 Mysql 通信、发送电子邮件、文本消息,并有一个登录门户。

如果您使用的是 AWS EC2 实例(例如 t2.large),您在线程池上设置了多少线程,在数据库连接池上设置了多少连接,以及您的 Xms 和 Xmx 内存设置是多少?

谢谢你。

标签: amazon-web-servicesplayframework

解决方案


如果您使用的是 AWS EC2 实例(例如 t2.large),您在线程池中设置了多少线程

我认为这可能是您面临问题的可能根本原因之一。拥有一个ThreadPool,或者更准确地说ExecutionContext是包装一些ExecutorService(例如FixedThreadPoolExecutorService)被认为是不好的做法,因为它EC在应用程序内部的相同实例可用于阻塞操作,如数据库访问 - 例如在您的情况下是 MySql,这最终会导致整个线程其他应用程序部分中的阻塞和性能问题,例如新的连接处理或响应呈现。

您需要做的是使用不同EC的实例进行阻塞和非阻塞操作 - 我们称它们frontend EC为(用于非阻塞)和backend EC(用于阻塞)。

  • frontend EC您需要在视图和服务级别(API 控制器、业务逻辑等)中使用;
  • backend EC您需要在 DAO 应用程序级别或任何可能的阻塞解析中使用;

在这两者之间分配资源的方式EC实际上取决于上下文。您可以从例如 80% 的线程frontend EC和其他 20%的线程开始backend EC,然后继续调整,直到您获得所需的性能结果。

但总的来说,您提出的问题取决于很多背景——工程领域通常没有灵丹妙药。

希望这可以帮助!


推荐阅读