2009-07-01 5 views
0

Im 파일 업로드 사이트에 대한 다중 서버 지원 구축 중입니다. 업로드 된 이미지는 cron이 (10 분마다) 실행될 때까지 메인 프런트 엔드 서버에 미리보기로 저장되어 저장 서버에 저장되므로 처음 10 분 동안은 상주하고 서버에 저장됩니다 주 프런트 엔드 서버에서.정적 URL을 다른 서버로 지정하는 방법은 무엇입니까?

파일 업로드시 사용자에게 전체 크기 (HTML 페이지)에 대한 썸네일 URL + 링크 인 소스 코드가 제공됩니다. 그래서 10 분에서 제외 http://www.domain.com/file-ID

로 연결 http://www.domain.com/temp_content/filename.jpg 같은 수 있습니다, http://www.domain.com/temp_content/filename.jpg 못해 사용자가 원래의 코드 ... 엄지 파일이 깨진 것를 잡고있는 경우가 http://server1.domain.com/thumbs/filename.jpg

것, 존재한다.

파일을 대상으로 이동할 수 있지만 cron은 없지만 시간이 오래 걸리며 이동이 완료 될 때까지 스크립트가 지연됩니다. 나는 또한 그런 명령을 실행하는 사용자를 갖고 싶지 않다. 나는 서버가 규칙적인 간격으로 명령을 처리하도록하고 싶다.

내가 할 수있는 것은 무엇입니까?

답변

3

.htaccess에서 mod_rewrite 명령을 사용하여 temp_content에있는 파일이 있는지 확인하고,없는 경우에는 redirect them to the new location으로 지정할 수 있습니다.

1

image_name/image_location을 저장하는 데이터베이스와 데이터베이스 세부 정보의 이미지를 제공하는 일반 PHP 스크립트를 고려 했습니까?

+0

페이지에 삽입 된 모든 엄지 손가락에 대해 ... DB를 쿼리해야하고 위치를 얻습니다. 그것은 재앙이 될 것입니다. –

+0

아니요. 물론 이것을 캐싱과 결합해야합니다. – Sampson

+0

성능이 그다지 좋지 않을 수도 있습니다 - 이것은 데이터베이스가 설계된 것이며 따라서 일반적으로 파일 시스템 액세스보다 빠릅니다. 엔지니어링 관점에서 볼 때, 가장 단순한 디자인과 실제 발생하는 태클 성능 문제를 고려해야합니다. – noctonura

0

정말로 상황을 고려할 때 알 수있는 유일한 옵션은 사용자에게 실제 URL을 제공하는 것입니다. 그런 다음 10 분 동안 실제로 링크를 사용할 수 없다는 것을 사용자에게 알릴 필요가 있습니다.

아이디어 세계에서 나는 사용자가 링크에 대한 액세스를 허용 할 필요가있을 때이 파일을 최종 휴게소에 직접 배치하는 것을 볼 수 있습니다.

+0

10 대의 서버가있는 경우 파일 위치를 알 수 없습니다. Cron은 실행 시점에이를 결정합니다. –

0

일부 자바 스크립트는 어떻습니까?

<img src="http://www.domain.com/temp_content/filename.jpg" 
onerror="this.src='http://server1.domain.com/thumbs/filename.jpg'"> 
+0

파일이 이동 될 때까지 server1, server 16 또는 server9를 알지 못합니다. –

0

이것이 어떻게 문제가되는지 알 수 없습니다. 사용자가 파일을 업로드하는 중이라면 위치가 올바른 위치에 레코드에 저장되어 있어야합니다. 그리고 페이지를 생성 할 때 페이지에서 이러한 레코드를 확인해야합니다. 서버를 지정하는 다른 필드를 추가하지 않는 것이 좋습니다. 그런 다음 파일 이동이 끝나면 cron 작업이 레코드를 업데이트하는지 확인하십시오.

+0

파일보다는 파일을 사용할 수 있다면 데이터베이스에 대해 생각해 보길 권합니다. –

0

이것은 네트워크 해킹을 요구하는 종류의 것입니다. 기본적으로 도메인에서 가리키는 사용자 지정 라우팅이며 적절한 호스트에 패킷을 전달합니다. 그것은 추한입니다

비록 이것이 이런 종류의 일을 가능하게하기 위해 토폴로지를 설정하는 방법을 알고있는 사람들이기 때문에, 솔직히 말해서 이것은 ServerFault에 대한 큰 질문입니다.

0

데이터베이스를 사용하여 이미지 이름을 위치에 매핑합니다. 최신 데이터베이스는 캐싱을 수행합니다. 성능이 좋지 않다면 간단한 해시 테이블 캐시를 메모리에 저장할 수도 있습니다. 여기에 저장소에 2 백만 개의 이름 -> 위치 매핑을 500MB RAM에 저장할 수 있습니다 (매핑 당 256 바이트로 가정).파일을 제공하는 스크립트를 들어

, 그것은

  1. 사실 (위치에서 바이트를 읽고 클라이언트로 바이트를 보내) 파일을 제공 할 수있다.
  2. 클라이언트를 다른 서버의 실제 위치로 리디렉션하십시오.
0

나는 현재 우리의 웹 사이트 아마존 S3/CloudFront를 약 10 분의 시간에 업로드 된 모든 미디어를 이동하고 새로운 위치로 사용자를 리디렉션하는 2 가지의 조합을한다.

(예 : server1.site.com/media/1.jpg와 같은) 미디어의 새 위치로 상위 항목의 정의를 캐시합니다.

개인 자산의 경우 인증을 확인하는 스크립트를 요청한 다음 auth'd s3 url에 302 리디렉션을 보냅니다.

memcache에 새 위치를 저장하고 원래 파일에 대해 404의 스크립트로 mod_rewrite 파이프를 만든 다음 302를 새 위치로 리디렉션합니다.

0

크론은 서버간에 파일의로드 균형 조정에 대해 "결정"하지 않습니다. Cron은 지정된 시간에 명령을 실행합니다.

서버간에 이미지의로드 균형 조정을 실제로 수행하는 논리는 어디에 있습니까? 해당 논리의로드 밸런싱 부분이 업로드를 처리하는 스크립트에 의해 수행 될 수 있습니까? cron 작업은 업로드 서버에서 최종 서버로 이미지를 실제로 옮길 수 있습니다.

이렇게하면 업로드를 확인하기 위해 사용자에게 "임시"위치가 표시 될 수 있습니다. 업로드를 확인한 후 사용자는 이미지에 대한 "최종"링크를 얻고 "해당 위치에서 이미지가 '라이브'상태가 될 때까지 10 분 정도 기다려야 할 수도 있습니다."

+0

cron 스크립트는로드 밸런서 역할을합니다. 일부 폴러는 파일을로드 할 적절한 서버를 결정합니다. –

1

매우 간단합니다.

파일 경로가 마음에 들지 않아서 변경했습니다.^_^

즉시 주 저장소로 이동 링크를 만듭니다. 그래서

한다 RewriteCond % {REQUEST_FILENAME} 같은 룰을 사용하는 주 서버에 http://www.domain.com/file/filename.jpg

! -f
한다 RewriteCond % {REQUEST_URI} /file/(.+) ^/파일
RewriteRule의 /.+/temp_content/% 1 [L, R]

관련 문제