我从几个消息来源获悉,Google App Engine实例有10个并发请求的硬限制.我想知道是否有人可以澄清这究竟是什么意思.
调度程序是否阻止通过10的任何请求,还是通过对并发线程的限制强制执行?
具体来说,这个限制对Go实例的影响是否与Python和Java相同?
编辑:这是功能请求,它将允许App Engine实例处理超过10个并发请求/线程.允许每个实例的可配置的并发请求限制.请加星标.
我有一个App Engine Java应用程序,它运行在自动缩放的F1实例(600 Mhz,128 MB RAM)上.预热后,仪表板显示的每个实例的内存使用量保持在220 MB左右.根据文档,这包括"运行时开销".
使用例如VisualVM的本地分析不能提供准确的图片,因为它包括开发服务器,内存版本的数据存储区和Memcache等.总共,它总共增加了8,000个加载类(包括开发服务器,我自己的类和大约85个库),得到的permgen大小为50 MB,完整垃圾回收后最小堆大小为50 MB.
关于我的问题的一些背景:调度程序有时(通常在完成常规同步作业后的前几个请求期间)启动一个新实例来处理通常仅由一个实例处理的请求加载.在多次请求之后,所有请求将被完全一致地路由到第一个实例.根据此处概述的调度程序规则集,我试图弄清楚这种行为是否可能是由于调度程序预测(临时)缺少实例内存来处理其他请求.
Google App Engine提供诸如任务队列和后端(现在的模块)之类的服务,以并行处理请求和执行"并发工作".使用Pipelines API,Fantasm等可以轻松实现典型的扇入扇出/分叉连接技术.
在配置后端/模块的硬件时,可以在B1,B2,B4,B8之间进行选择,但是它没有说明CPU配置中的内核数量.也许CPU核心数量与此无关.后端支持为每个传入请求生成"后台线程",但由于着名的GIL(全局解释器锁),Python实际上无法进行真正的并发工作.
在启动新实例之前,一个前端实例将处理8个请求(默认值,最多30个).
带有Threadsafe指令的Python 2.7据说可以在一个隔离的实例上并行处理传入的请求,这是正确的,还是仅传入跨真实并发的独立实例的传入请求?
在Google App Engine上,实际使用真正的并发技术实现了什么,另一方面,推荐的设计模式是什么获得了最真实的并发和扩展?
您可以使用10-20个驻留B8实例进行"手动扩展"后端/模块,每个实例产生10个"超出生产"的后台线程,并为I/O工作始终执行10个并发异步URL提取,或者是否应该扇动-out与动态实例创建?
python google-app-engine concurrent-programming python-multithreading