2014-02-12 2 views
0

현재 한 서버에서 호스팅되는 웹 사이트가 있으며 새 서버를 추가하려고합니다. 주요 문제는 캐싱에 관한 것입니다. 일부 항목은 변경된시기에 따라 캐시됩니다. 그러나 지금은 같은 프로세스에서 변경되므로 캐시가 무효화 될 수 있습니다.여러 서버가있는 부실 캐시 처리

웹 사이트가 두 대의 서버에서 호스팅되는 경우 두 서버 모두에서 변경 사항을 적용 할 수 있으며 이러한 변경 사항은 통보되지 않습니다. 캐시는 웹 사이트 속도를 크게 높여야합니다. 캐시보다는 메모리 속도가 느려지고 서버에 복잡성이 추가되므로 캐시가 캐시 서버에서 프로세스 외부로 가져 오지 않는 것이 좋습니다.

웹 사이트는 닷넷으로 구현되며, MySQL은 데이터 저장소를 지원합니다. 내 문제는 데이터가 변경 될 때 프로세스에 알림을 보내는 방법입니다. 데이터가 변경 될 때 MySQL이 등록 된 모든 클라이언트에게 자동으로 알릴 수 있습니까? 필자는 비슷한 기능을 가진 RavenDb를 매우 편리하게 사용했습니다. 나는 MySQL과 비슷한 것을 찾을 수 없었다. 이것이 가능하지 않다면 어떻게이 문제에 접근 할 수 있을지에 대한 아이디어가 있습니까?

답변

1

분산 캐싱은 복잡한 주제입니다. 더 기본적인 메모리 내 캐시를 실행하는 것처럼 들립니다. 이 경우, 부적절한 키 점검 메커니즘이 있다고 가정 할 때 동기화를 직접 처리하거나 데이터의 "결과 일관성"에 만족해야합니다.

개인적으로 나는 memcached (우리는 Couchbase 사용)를 사용합니다. 비록 현실적인 메모리 액세스가 더 빠르지 만, 네트워크 병목 현상에 대한 귀하의 의견은 실현되지 않을 수 있습니다. 실용적인면에서 우리는 Couchbase 캐싱이 충분히 빠르다는 것을 알았고 핵심 수준에서 원자 적입니다. 노드를 통한 키 분배를 처리합니다.

MySQL이 고객에게 알림을 푸시하는 것에 관해서는 확실하지 않지만 그렇게 생각하지 않습니다. 데이터베이스 액세스에 코드 계층 (DAL 등)이 있으면이 코드를 직접 에뮬레이트 할 수 있습니다.

또한 캐시가 데이터베이스와 동일한 무결성 원칙을 따르도록하는 것이 바람직합니다. 이 작업을 수행하면 수행 한 작업은 모두 메모리 내 데이터베이스가됩니다. 캐싱은 확장 성을 높이기 위해 시간 경과에 따른 데이터 정확도의 균형을 유지해야합니다.

+0

예, 기본 인 메모리 캐시를 실행 중입니다. 문제는 이것이 오래된 코드베이스이며 캐시의 일부 객체가 쉽게 직렬화 할 수 없다는 것입니다. 따라서 메모리 내에서 잘 작동하지만 out-of-process에서는 직렬화가 필요합니다. Couchbase는 캐시 서버가 아닌 NoSQL 데이터베이스 인 것 같습니다. 나는 이제 궁극적으로 일관성을 유지해야한다고 생각합니다. 데이터베이스 서버가 변경 알림을 지원하면 구현할 수있는 부분입니다. 불행히도 MySQL은 그렇게 보이지 않습니다. –

+0

@KarlCassar Couchbase는 중간 정도입니다. 내부적으로 memcached를 사용하지만 키 수준에서 디스크 백업 및 원 자성을 제공하므로 일종의 가벼운 메모리 데이터베이스입니다. 우리는 디스크지지면보다 캐싱면을 더 사용하는 경향이 있습니다. –

관련 문제