2016-11-14 1 views
6

우리는 지금 당장 작업을 끝내면 프론트 엔드 (nginx)가 이미 연결을 종료하므로 사용자가 출력을 볼 수 없게 될 때까지 반환 할 것을 요청합니다. 좋은 것이 든 나쁜 것이 든).프로그래밍 방식으로 요청을 중지

밸런서 (haproxy)도 연결을 끊고 서버가 다른 요청을 처리 할 수 ​​있다고 가정하기 때문에 서버가 여전히 이전 요청을 처리하는 동안 새 요청이 들어오고 자원.

이상적으로 서버는 가능한 한 ZEO 데이터베이스와의 연결 스레드를 재사용하기 위해 한 번에 하나의 요청 만 처리해야하므로 두 요청을 동시에 실행하면 서버 속도가 느려지고 모니터링 시스템 중 하나가 올바로 작동합니다 더미가 시간을 보내는 것을 증명하기 때문에 모두 함께 다시 시작합니다. 그 일을 중지 요청을 처리하는 스레드를 알 수있는 방법은 (아마도 우리가 이미 사용 Products.LongRequestLogger을 인용하기) 어떤 논리 주어진 그래서

가?

답변

1

IMHO 이는 수동으로 요청을 중단하는 것은 좋지 않습니다. 당신은 어쨌든 갈등 해결에 간섭합니다. 그것은 정말로 좋은 행동이 아닌 IMHO입니다.

저는 하루에 1000-3000 개의 개체를 게시/수정하는 200-400 명의 저자와 함께 큰 plone 사이트를 운영하고 있습니다. 일반적으로 부하는 하루 종일 분산되므로 합리적인 시간 내에 더 긴 요청도 처리됩니다.

예를 들어 저녁에는 오래 걸리는 요청 (30-60 초)이 잘되고 있습니다. 그들을 중단 할 이유가 없다.

Plone에서 이름 바꾸기/큰 트리 이동, 권한 변경, 많은 개체 복사와 같은 몇 가지 고전적인 요청이 있습니다. 그런 다음 일반적으로 충돌이 카탈로그의 어딘가에서 발생하고 3 회 재 시도 후에 트랜잭션이 중단됩니다.

긴 요청을 중단하면 Plone에서 일부 기능 만 제거됩니다. 이름 바꾸기/이동/복사 작업에 조건을 추가하는 것을 고려할 수 있습니다. 예를 들어 컨테이너에 1000 개의 개체가있는 경우 더 이상 존재하지 않게됩니다.

내가 뭘하려합니다/지금까지했던 : - : 그것은 전혀하지 않습니다 (하하, 지금 단순히 :-)를 달성하기 위해 말했지만 하드)

  • 하는 긴 요청이 짧게 예를 들어, 체크 아웃이 package's copy/move patch 용> 이름 바꾸기 및 이동을 위해 카탈로그를 삭제하는 작업이 오래 걸리는 대신 필요한 색인 만 업데이트합니다. 우리는 이것으로 많은 것을 성취했습니다.

  • 대기열 : 예를 들어 대기열에 대기열을두고 알려진 긴 동작을 처리합니다. 당연히 당신은 잠재적 인 긴 요청 인 사전에 알아야하지만, 당신이 이미 당신의 환경에서 이것을 알고 있다고 생각합니다. 요청이 완료되면 이메일이나 플래시 메시지와 같은 사용자에게 연락 할 수 있습니다. 가능한 한 작은

  • 보관할 카탈로그, (... SearchableText 당신에게 많은 것을 제공 제거)

  • 하드웨어를 SOLR/elasticsearch에 모든 것을 위임 : 내가 아는 것은 어리석은 소리, 그러나 이것은 종종 빠른 승리 . 최소한 모든 카탈로그 개체를 RAM에로드하십시오. 빠른 cpu/ssd (일반 I/O)에 몇 $를 투자하십시오. 이것은 내가 좋아하는 방식이 아니지만 2016 년에 긴 요청 문제를 해결할 시간을 줄 수 있습니다.

미래

는 :

  • 당신은 아마 짐 모듈 Fultons "The ZODB" talk at the ploneconf 2016을 보았다. zeoclient에서 충돌 해결을 처리 할 수 ​​있고 대신 상태 만있는 객체가 있으면 더 나은 충돌 해결을 구현할 수 있습니다.

Ehhh은 ... 우선은 코멘트를 만들었지 만, 나는 문자 ;-)

을 제한 초과
관련 문제