2014-11-13 3 views
2

BigQuery를 이벤트 로깅 플랫폼으로 사용하고 있습니다.Google BigQuery : 스트리밍 삽입 속도가 느림

우리가 직면 한 문제는 매우 느린 삽입 모든 게시물 요청 (https://cloud.google.com/bigquery/docs/reference/v2/tabledata/insertAll)입니다. 서버 또는 클라이언트 측에서 해고되는 위치는 중요하지 않습니다.

최소값은 900ms이고 평균값은 1500s입니다. 여기서 약 1000ms는 연결 시간입니다. 초당 요청이 1 개 (여기서는 조절하지 않음) 인 경우에도 마찬가지입니다.

Google Analytics 측정 프로토콜을 사용하며 동일한 기기의 타이밍은 50-150ms입니다.

BigQuery streaming 'insertAll' performance with PHP에 설명 된 솔루션은 대기열을 사용하기에 충분하지만 초당 10 개 이상의 요청을 보내지 않으므로 잔인한 것으로 보입니다.

스트리밍 삽입의 경우 1500ms가 정상적인가요? 그렇지 않다면 문제가됩니다.

추가 정보 : 조작 된 JSON을 보내면 응답이 50-100ms에 도착합니다.

답변

1

내 경험에 bigquery에 대한 요청은 오래 걸립니다. 우리는 그것을 성능 데이터를위한 데이터베이스로 사용하려고했지만 느린 응답 시간으로 인해 결국은 나가고 있습니다. 최대한 멀리 볼 수. BQ는 1 - 10 초 내에 큰 요청을 처리 할 수 ​​있도록 제작되었습니다. BQ가 대화 형으로 분류하는 요청입니다. BQ는 더 적은 작업으로 더 빨리 진행되지 않습니다. 우리는 BQ에 꽤 많은 레코드를 스트리밍하지만 항상 테이블별로 (테이블 당) 배치해야합니다. 그리고 비동기 적으로 모든 요청을 실행하십시오 (또는 다른 극장에서해야하는 경우).

추신. 나는 펜티엄 10이 BQ에서 모발에 대해 무엇을 확인할 수 있습니다. 실패한 항목을 다시 시도하고 실패하면 다시 시도하여 다시 시도하기 위해 파일에 기록하십시오.

+0

정확히는 아닙니다. 우리는 다양한 언어 중에서 다양한 성능을 발견했습니다. 우리는 먼저 Java로 스트리밍 어플리케이션을 마쳤습니다. 실제로는 꽤 잘 작동합니다. 요청 당 응답 시간은 약 100-300ms 범위입니다. C#에서는 보통 500ms 이상이고 수십 초가 걸릴 수 있습니다 .... – foxwendy

+0

그게 이상합니다. 그것은 웹 API입니다. 언어에 구애받지 않아야합니다. –

6

스트리밍의 페이로드 크기가 제한되어 있으므로 Quota policy을 참조하십시오. 페이로드가 우리와 같은 방식으로 제한되어 있기 때문에 시간에 대해 이야기하는 것이 더 쉽지만 다른 부작용도 언급 할 것입니다.

우리는 각 스트리밍 요청에 대해 1200-2500ms 사이의 값을 측정하며 차트에서 볼 수 있듯이 지난 한 달 동안 일관되었습니다.

enter image description here

우리는 여러 가지 부작용을 볼 수 있지만 :

요청이 무작위로 유형 '백엔드 오류'실패
  • 요청이 무작위로 유형 '연결 오류'
  • 요청에 실패
  • 'timeout'유형으로 무작위로 실패합니다 (일부 행만 실패하고 전체 페이로드가 아니므로 여기에서 조심하십시오)
  • 일부 다른 오류 메시지 현자는 설명 적이 지 않으며, 너무 막연하여 도움을받지 못하고 다시 시도합니다.
  • 우리는 매일 수백 건의 이러한 실패를 볼 수 있으므로 클라우드 상태와 관련이 없으며 거의 ​​일정합니다.

유료 Google Enterprise 지원팀에 사례가 공개되었지만 해결되지 않았습니다. 이것에 대한 권장 옵션은 재 시도가있는 지수 - 백 오프이며, 그렇게하도록 지시받은 지원도 포함됩니다. 어떤 개인적으로 나를 행복하게하지 않습니다.

또한 실패율은 SLA에서 99.9 % 가동 시간에 부합하기 때문에 이의 제기의 이유가 없습니다.

SLA와 관련하여 염두에 두어야 할 것이 있습니다. 매우 엄격하게 정의 된 구조입니다. 자세한 내용은 here입니다. 99.9 %의 가동 시간은 직접 실패율로 변환되지 않습니다. 이것이 의미하는 바는, BQ가 한 달 동안 30 분의 가동 중지 시간을 갖고 그 기간 내에 10,000 개의 인서트를 수행하지만 그 달의 다른 시간에 인서트를 수행하지 않으면 번호가 꼬이게됩니다. 이것이 지수 백 오프 알고리즘을 제안하는 이유입니다.SLA는 명시 적으로 가동 시간과 오류율을 기반으로하지만 논리적으로 두 백분율을 서로 밀접하게 연관시킵니다. 기술적으로, 적절한 재시도 메커니즘을 설정했다면 월별 삽입물을 처리하는 경우 평균 약 1/1000의 삽입 실패를 경험해야합니다.

당신은 당신의 프로젝트의 건강에 대해이 차트를 확인하실 수 있습니다 : https://console.developers.google.com/project/YOUR-APP-ID/apiui/apiview/bigquery?tabId=usage&duration=P1D

내 응답이 연결된 다른 기사에 있음을 발생하며 매우 쉽게 재시도 우리의 지수-백 오프를 만들었 기 때문에 내가 대기열을 제안 대기열 작업은 매우 쉽습니다. Beanstalkd을 사용합니다.

+0

타이밍과 관련하여 동일한 문제가 있음을 확인했습니다. 하지만 구글의 측정 프로토콜과 비교해 볼 때 '왜'그렇게 오래 걸리는지에 대해서는 대답하지 않습니다. – mot

+0

자바 API로 스트리밍 응답 당 평균 500-1000ms를 측정 한 것은 얼마나 합리적입니까? – foxwendy