GAE push 대기열의 작업 실행 속도 제어 정보
실제로 이용해 보면 상정대로의 동작을 해주지 않았으므로, 조사해 보았습니다.
시험 환경
토큰 버킷이란?
네트워크에 흐르는 트래픽을 일정량 이하가 되도록 조정하는 알고리즘입니다.
먼저 움직이기
우선 bucket_size=5로 rate=5/m의 queue를 작성
queue.yaml
queue:
- name: gae-study-push-queue
mode: push
rate: 5/m
target: gae-study
bucket_size: 5
retry_parameters:
task_retry_limit: 1
appengine-web.xml
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>XXXXXXX</application>
<module>gae-study</module>
<version>app001</version>
<runtime>java8</runtime>
<threadsafe>false</threadsafe>
<instance-class>F1</instance-class>
<automatic-scaling>
<!--https://cloud.google.com/appengine/docs/standard/java/config/appref?hl=ja#scaling_elements_automatic_scaling-->
<min-idle-instances>0</min-idle-instances>
<max-idle-instances>1</max-idle-instances>
<max-concurrent-requests>30</max-concurrent-requests>
<max-pending-latency>10s</max-pending-latency>
<min-pending-latency>4s</min-pending-latency>
</automatic-scaling>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
Task에서 수행하는 처리
Hello.scala
package com.gae.study
import skinny.micro.WebApp
trait Hello extends WebApp {
get("/sayhello") {
val key = params("key")
val message = s"Hello, key => $key!"
logger.info(message)
Thread.sleep(5000) // 5秒待機
message
}
}
예상
gae-study-push-queue
에 작업을 7개 추가하면 어떻게 됩니까?bucket_size=5이고 rate=5/m이므로
따라서 전체적으로 약 1 분 정도 걸릴 전망
실행 결과
30秒
에서 전체 처리가 완료되었습니다. . . rate=5/m인데 1분에 5건 이상 처리를 하고 있는 것은???처음 5건은 예상대로 13:58:47~48에서 접수되어 있으며,
6번째는 13:58:59에 접수
7번째는 13:59:11에 접수
그래서 처음부터 12초 후에 6번째, 12초 후에 7번째가 접수되고 있다
이미지적으로는 다음과 같은 느낌입니다.
결론
처음에는 5개의 토큰이 있으므로 1분 동안 5개 이상의 작업이 처리되는 것처럼 보입니다.
기본적으로 rate가 5/m인 경우, 태스크는 분당 5회 rate로 처리된다.
다만, 토큰이 보충되는 타이밍은 1분 후에 한번에 보충되는 것이 아니라, rate가 5/m이면, 60초/5=12초마다 1개씩 보충되어 간다. rate가 10/m이면, 60초/10=6초 간격으로 토큰이 1개씩 보충되어 간다고 하는 움직임이 된다.
Reference
이 문제에 관하여(GAE push 대기열의 작업 실행 속도 제어 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miyahara/items/31e5b8b4e7bc951ccf7e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)