2016-05-31 1 views
3

Azure (관리 Azure 서비스의 경우 Parse Server)에서 구문 분석을 실행하고 있습니다. 데이터베이스로 DocumentDB를 포함하고 있으며 초당 요청에 대한 제한이 있습니다. 일부 파스 클라우드 기능이 크고 요청 속도가 너무 높아서 (S3 계층의 경우에도) Visual Studio Team Services (Visual Studio Online 및 스트리밍 로그 사용)를 사용하여이 오류가 발생합니다.DocumentDB가 응답 함 "요청 속도가 큽니다."azure에서 구문 분석

error: Uncaught internal server error. { [MongoError: Message: {"Errors":["Request rate is large"]} 

ActivityId: a4f1e8eb-0000-0000-0000-000000000000, Request URI: rntbd://10.100.99.69:14000/apps/f8a35ed9-3dea-410f-a89a-28650ff41381/services/2d8e5320-89e6-4750-a06f-174c12013c69/partitions/53e8a085-9fed-4880-bd90-f6191765f625/replicas/131091039101528218s] 
    name: 'MongoError', 
    message: 'Message: {"Errors":["Request rate is large"]}\r\nActivityId: a4f1e8eb-0000-0000-0000-000000000000, Request URI: rntbd://10.100.99.69:14000/apps/f8a35ed9-3dea-410f-a89a-28650ff41381/services/2d8e5320-89e6-4750-a06f-174c12013c69/partitions/53e8a085-9fed-4880-bd90-f6191765f625/replicas/131091039101528218s' } MongoError: Message: {"Errors":["Request rate is large"]} 

ActivityId: a4f1e8eb-0000-0000-0000-000000000000, Request URI: rntbd://10.100.99.69:14000/apps/f8a35ed9-3dea-410f-a89a-28650ff41381/services/2d8e5320-89e6-4750-a06f-174c12013c69/partitions/53e8a085-9fed-4880-bd90-f6191765f625/replicas/131091039101528218s 
    at D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:673:34 
    at handleCallback (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:159:5) 
    at setCursorDeadAndNotified (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:501:3) 
    at nextFunction (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:672:14) 
    at D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:585:7 
    at queryCallback (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:241:5) 
    at Callbacks.emit (D:\home\site\wwwroot\node_modules\mongodb-core\lib\topologies\server.js:119:3) 
    at null.messageHandler (D:\home\site\wwwroot\node_modules\mongodb-core\lib\topologies\server.js:397:23) 
    at TLSSocket.<anonymous> (D:\home\site\wwwroot\node_modules\mongodb-core\lib\connection\connection.js:302:22) 
    at emitOne (events.js:77:13) 

이 오류를 어떻게 처리합니까?

+0

https://azure.microsoft.com/en-us/blog/performance-tips-for-azure-documentdb-part-2/ –

답변

1

TL;

  1. 새로운 가격 책정 구성표에서 이전 S3 컬렉션을 새로운 단일 컬렉션으로 업그레이드하십시오. 최대 10,000 RU를 지원할 수 있습니다 (2500 RU에서 최대)
  2. 이전 S3 컬렉션을 삭제하고 새 파티션 된 컬렉션을 만듭니다. 구문 분석시 분할 된 컬렉션에 대한 지원이 필요합니다.
  3. x-ms-retry-after-ms 응답 헤더에 맞춰 백 오프 전략을 구현하십시오.

긴 대답은 :

DocumentDB에 각 요청은 해당 작업에 대한 요청 요금과 HTTP 헤더를 반환합니다. 요청 단위의 수는 콜렉션마다 구성됩니다. 내 이해에 따라 크기 S3 컬렉션 1 개가 있으므로이 컬렉션은 초당 2500 요청 단위 만 처리 할 수 ​​있습니다.

DocumentDB는 여러 모음을 추가하여 확장됩니다. 이전 구성에서 S1 -> S3을 사용하는 경우 수동으로해야합니다. 즉 일관된 해싱,지도 또는 일시 중지 알고리즘과 같은 알고리즘을 사용하여 컬렉션에 데이터를 분산해야합니다. DocumentDB의 새로운 가격으로 파티션 된 모음을 사용할 수 있습니다. 파티션 키를 정의하면 DocumentDB가 데이터를 분할합니다. RequestRateTooLarge 오류가 계속 발생하면 파티션을 확장하는 것이 좋습니다. 그러나 Parse가 부분 집합을 지원하는지 조사해야합니다.

HTTP 429 RequestRateTooLarge를 수신하면 x-ms-retry-after-ms라는 헤더도 있습니다. ### 여기서 ###은 작업을 다시 시도하기 전에 대기 할 시간 (밀리 초)입니다. 당신이 할 수있는 것은 작업을 다시 시도하는 백 오프 전략을 구현하는 것입니다. 재 시도 중에 서버에 클라이언트가 멈 추면 요청 대기열을 빌드하고 서버를 막을 수 있습니다. 그런 버스트를 처리 할 큐를 추가하는 것이 좋습니다. 요청이 짧은 경우 컬렉션을 확장하지 않고 처리하는 것이 좋습니다.

+0

을 참조하십시오.'S3' 컬렉션을 삭제하지 않아도 ' 표준 '(최대 10,000 RU) 수집 - 삭제하지 않고 변경 될 수 있습니다. –

+0

@DavidMakogon 감사합니다. 답변을 업데이트했습니다. – hsulriksen

0

외부 mongoDB 데이터베이스로 Mlab을 사용하고 azure에서 parse app를 구성하여 documentDB 대신 사용합니다.

'성능 향상'을 위해 많은 돈을 지불해야합니다.