我知道GAE调度程序是受到严格审查和关注的主题。我也知道它对我的应用程序的性能至关重要。我花了最后一周优化和分析我的应用程序。
我也理解调度程序设计用于跨越各种应用程序大小,并且就并发用户而言,算法可能不会针对我的相对较小规模的应用程序进行优化。
我认为以下对待决延迟的描述是错误的,这导致不可避免的延迟:
Pending Latency滑块控制请求在其中花费的时间 在由默认实例提供服务之前的待处理队列 您的应用程序的版本。如果最小挂起延迟很高 App Engine将允许请求等待而不是启动新实例 处理它们。这可以减少您的实例小时数 应用程序使用,但可能导致更多用户可见的延迟。
如果可能出现15秒的等待延迟和2个空闲实例,当我连续执行10个请求时,所有需要1-3秒(启用多线程),它会旋转新的情况?
我为什么在意?我可以把我所有的初始化放在我的热身代码中吗?错误。我正在使用GAE / J和JDO。似乎第一次每个实例都会在第一次触发ENTITY TYPE时发出几秒钟的“验证”开销。大多数情况下,除非将JDO日志记录设置为INFO级别,否则您甚至不知道这种情况正在发生。
我的问题如下:
是否有其他人遇到过与调度程序行为有关的以下情况,以及与DS初始化的相互作用,如果是,您是否可以建议解决方案以避免产生此类延迟?
具体来说,情况是:
请注意,我已经考虑过以下补救措施:
答案 0 :(得分:0)
是的,JDO会在您第一次访问时导致延迟。这是由于JDO规范要求实现能够提供只能通过内省数据库收集的信息;即使你不想要这些信息,它仍然需要收集它。对于在App Engine上使用Java的任何人来说,我的建议是不使用JDO - 使用更适合App Engine的东西,比如Objectify。
待处理的延迟设置不太可能导致新情况在您的情况下被启动;更有可能是Min Idle实例;如果它大于0,则只要实例占用了请求,调度程序就会启动一个额外的实例。