2011-07-18 6 views
3

다음 시나리오에서 EC2의 PHP 클래스를로드하는 가장 좋은 방법은 무엇입니까? - 아파치와 APC를 실행하는 100 개의 EC2 인스턴스 - 요청 당 100 개의 PHP 클래스가로드 됨 (__autoload를 통해) - 클래스간에 하루에 100 번 코드가 변경됨 (많은 클래스에는 cron을 통해 주기적으로 업데이트되는 자동 생성 코드가 포함됨)). APC는 아파치 인스턴스에서 사용에도 함께 EC2 - InstanceStore, EBS 또는 S3에서 PHP 클래스를로드하는 가장 좋은 방법은 무엇입니까?

A. InstanceStore - The local (virtual) hard drive of an EC2 instance 
-> Code must be pushed separately to each instance. 
-> Fastest loading since no need to go over the network 

B. EBS - A volume mounted to a particular instance 
-> Code must be pushed separately to each instance. 
-> Slower loading since go over the network 

C. S3 - A S3 bucket can be 'mounted' to 1 or more EC2 instances 
-> Code only needs to be pushed once 
-> Slowest loading since go over the network 

, 나는 인해 것에 APC에 fstat를 해제 할 수 없습니다입니다 : 내가 수집 무엇부터

, EC2에서 PHP 클래스 파일을로드하는 3 가지 방법이 있습니다 하루 100 번 이상 (코드가 변경 될 때) 모든 100 개의 아파치 인스턴스에서 캐시 된 클래스의 무효화를 처리하는 방법을 잘 모르는 경우. 결과적으로 클래스가 apc (fstat 호출을 수행하기 위해)에 의해 캐시되었다고하더라도 파일 시스템에 대한 호출을 생성 할 경우 fstat를 수행 할 네트워크를 왕복하는 횟수가 100 회라면 거대한 대기 시간은 없을 것입니다 또는 모든 요청시 파일을 읽으시겠습니까?

설명 된 시나리오에서 클래스 파일을로드하는 가장 좋은 옵션 (또는 여기에없는 새로운 방법)은 무엇입니까?

+1

인스턴스 저장소를 사용하고 수동으로 인스턴스를 업데이트하는 대신 인스턴스에서 변경 내용을 가져 오거나 수신 대기하도록합니다. –

+0

이것이 어떻게 수행 될 수 있는지 자세히 설명해 주시겠습니까? – archmeta

답변

0

객체를 직렬화하고 전체 객체를 apc 캐시에 넣거나 memcached와 같은 객체에 넣는 방법에 대해 생각해 보셨습니까?

2

Always use an EBS backed instance. 반복 : 항상 EBS 지원 인스턴스를 사용하십시오.

코드 변경 사항을 적용해야하는 경우 현재 EBS 백업 인스턴스를 현재 스냅 샷에서 스핀 업합니다. 로드 균형 조정기에 아직 추가하지 마십시오.

코드 변경 사항 적용.

새 EBS 스냅 샷을 만듭니다. 이것은 현재 코드 변경 라운드의 표준 스냅 샷입니다.

새 표준 표준 스냅 샷에서 필요에 따라 새 EBS 지원 인스턴스를 실행하십시오.

실제 트래픽이 발생하지 않는 새 인스턴스에서 웹 사이트를 공격하는 스크립트를 실행하여 예열 (PHP 클래스를 APC에로드)하십시오.

새 인스턴스가 모든 실제 트래픽을 처리하도록 부하 분산 장치를 전환하십시오.

이전 인스턴스를 종료하십시오.

업데이트 스크립트를 사용하여 자동화 할 수 있고 자동화해야합니다. 스크립트가 진행되는 동안 오류 확인을 포함시켜야합니다 (예 : 가용성 영역의 리소스 제약으로 인해 때때로 새로운 인스턴스를 시작할 수없는 경우가 있음).

필요에 따라 새 인스턴스를 만들고 파괴하는 기능은 클라우드에 대한 멋진 점 중 하나입니다.