在Google Cloud Platform(GCP)上,我的Java应用程序在标准App Engine(GAE)上运行。昨天我部署了该应用程序。作为该应用程序的唯一用户(直到正式上线),我注意到启动时间(也称为“热身”)在发出第一个请求时大约在15到30秒之间。如果我每隔几秒钟继续发出请求,则响应时间很快(大约一秒钟或更短)。但是,如果我在大约10秒钟后未提出任何请求,则下一个请求通常需要15到30秒钟才能返回。这告诉我,GAE识别出超过10秒的空闲时间,并决定终止该实例。
这当然是不好的。即使该应用程序上线了,最初的用户数量也很少,两次请求之间的时间肯定会超过10秒。
我决定向该应用程序添加一些代码,以保持每个微服务的生命。为此,我在任务队列中创建了一个任务,该任务将调用一个方法,该方法又将对每个微服务进行HTTP调用。这些是每个服务中的伪方法,但是它们迫使Java加载类。完成所有HTTP调用后,我将等待5秒钟,然后将另一个任务放入队列中并重复相同的过程。这工作了。我注意到我不再看到15到30秒的预热时间。
我在下午晚些时候启动了该应用程序,并使其运行了一整夜,以查看第二天早晨的响应。第二天早上,我注意到响应速度很快,尽管不像以前那样快。但是大约一个小时后,当我突然收到可怕的“配额已达”响应并且该应用不再可用时,我感到非常惊讶。
然后,我检查了我的帐单,发现自己已经支付了$ 1.50。但是我的预算设置为$ 100。那么,为什么要达到我的配额而应用程序停止接受请求呢?毕竟,即使我已达到配额,我的预算仍设置为100美元,最低警报阈值设置为50%。
然后我查看帐单并看到以下内容:
前端:2,857.24分钟(1.03美元) 后端:574.99分钟($ 0.03)
因此2857小时(约47小时)。由于它们免费为您提供28小时,这意味着我要支付约20个小时的费用。 $ 0.05的20倍大约是$ 1.00,这就是我所看到的。
那么当应用程序运行约12个小时后,为什么还要使用47个小时?一种可能的原因是GAE启动了多个实例。不幸的是,我没有在“实例”页面上查看它使用了多少实例,并且由于它每天都会重置它,所以我不知道。
如果我的“保持活动”代码使实例每5秒保持活动,那么GAE为什么还要费心启动另一个实例?我的意思是,每隔5秒的请求时间就很长。这绝不应该给GAE算法以某种迹象,表明该实例正在大量使用并且需要启动另一个实例。
我决定停用我的“保持活动”代码,并在GAE中进行设置,以将实例数限制为一个,但我也选择将最小实例数也设置为一个。我认为这将使实例保持活动状态并处理我的所有请求,并且每天28小时将永远不会用完。还是我误会了这些实例的工作时间?
答案 0 :(得分:1)
To answer the 47 instance hours question, there are a few factor controlling instance usage cost:
1) Instance size. The bigger instances are counted in multiplier of the smallest instances - so a F2 for an hour is the same as a F1 for 2 hours.
2) If you are scaling up and down with automatic scaling, sometimes multiple instances can be started up if your request suddenly spikes. It will take 15 minutes of idling to turn down the instance.
3) Each service has its own instances
So basically, don't rely on your traffic pattern to keep your cost consistent. If you need stricter control, you can either use manually scaled instances or max-instances configuration
As for your quota issue, we would need the error message to see which quota you are hitting, there's no "instance hour" quota so you are probably hitting something else. Quota and budgets are independent concepts, even if you have unlimited budget, some quota still apply (unless you get us to raise them through a request).