문제

여러 서버가 포함 된 응용 프로그램을 구축하고 있습니다. (각 서버가 데이터베이스와 웹 서버가있는 4 개의 서버. 마스터 데이터베이스 1 개와 노예 + 1 개의로드 밸런서 1 개)

캐싱을 활성화하기위한 몇 가지 방법이 있습니다. 지금은 상당히 단순하고 전혀 효율적이지 않습니다. 모든 캐싱은 모든 서버 간의 NFS 파티션 공유에서 수행됩니다. NFS는 아키텍처의 병목 현상입니다.

  1. 캐싱 구현 몇 가지 아이디어가 있습니다. 서버 레벨 (로컬 파일 시스템)에서 수행 할 수 있지만 문제는 모든 서버에서 컨텐츠가 업데이트되었을 때 캐시 파일을 무효화하는 것입니다. 작은 캐시 수명을 가짐으로써 수행 할 수 있습니다 (캐시가 효율적이지 않아서는 그렇지 않아서 효율적이지 않습니다. 대부분의 시간이되어야한다는 것을 더 빨리 새로 고침
  2. 또한 각 서버가 서로 통신하는 메시징 SYTEM (예 : XMPP)에서도 수행 할 수 있습니다. 캐시의 무효화를 담당하는 서버는 캐시가 무효화되었음을 알리기 위해 다른 모든 사람에게 요청을 보냅니다. 대기 시간은 아마도 더 클 수 있습니다 (캐시가 무효화되었다는 것을 모든 사람이 더 많은 시간이 걸리지만 내 응용 프로그램에는 원자 캐시 무효화가 필요하지 않습니다.
  3. 세 번째 접근 방식은 클라우드 시스템을 사용하여 캐시를 저장하는 것이지만 (CouchDB와 같은) 캐시를 저장하는 것이지만이 제품의 성능은 전혀 모릅니다. SQL 데이터베이스를 사용하는 것보다 빠릅니까?

Zend 프레임 워크를 사용하려고 계획했지만 실제로 관련이 있다고 생각하지 않습니다 (일부 패키지는 아마도 XMPP, CouchDB를 다루기 위해 다른 프레임 워크에 존재한다는 점을 제외하고).

요구 사항 : 영구 캐시 (서버가 다시 시작되면 캐시를 재창조하는 동안 서버를 중단하지 않도록 캐시를 잃어서는 안됩니다)

도움이 되었습니까?

해결책 2

비교적 좋은 해결책을 찾았다 고 생각합니다.

zend_cache를 사용하여 각 캐시 파일을 로컬로 저장합니다. 캐시 파일을 로컬로 관리하는 Nanoserver를 기반으로 작은 데몬을 만들었습니다. 하나의 서버가 로컬로 캐시 파일을 생성/수정/삭제하면 동일한 작업을 수행하는 데몬을 통해 모든 서버에 동일한 동작을 보냅니다.

즉, 로컬 캐싱 파일과 원격 작업이 동시에 있다는 것을 의미합니다. 아마도 완벽하지는 않지만 지금은 작동해야합니다. CouchDB는 너무 느리고 NFS는 충분히 신뢰할 수 없습니다.

다른 팁

http://www.danga.com/memcached/

MemCached는 메시지 기반 읽기, 커밋 및 무효화 (메시지 기반 읽기, 커밋 및 무효화)를 포함합니다. 고 가용성과 고속, 그러나 원자 신뢰성은 거의 없습니다 (성능을 위해 희생).

(또한 Memcached는 YouTube, Wikipedia, Facebook과 같은 것들을 힘 시켜서 많은 분산 된 캐싱 옵션을 멤버로 정착시킬 시간, 돈 및 재능을 가진 조직이 상당히 잘 확립 될 수 있다고 생각합니다!)

편집 (댓글 응답으로)캐시의 아이디어는 백업 스토어에 비해 상대적으로 일시적인 일입니다. 캐시 데이터를 장기적으로 유지 해야하는 경우 (a) 더 많은 성능을 얻기 위해 데이터 계층을 제거하거나 (b) 대량 데이터를 직선 키로 저장하는 중간 계층 데이터베이스 서버를 추가하는 것이 좋습니다. 가치 쌍 테이블 또는 그와 밀접한 관련이있는 것.

캐시 스토어로서 Memcached를 방어 할 때 서버 재부팅의 영향이 낮은 높은 성능을 원한다면 4 개의 Memcached Server가있는 이유는 무엇입니까? 또는 8? 각 '재부팅'은 데이터베이스 서버에 해당하는 효과가 적습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top