2010-08-09 5 views
1

지금까지 단일 서버에서 제공 한 Python/Pylons webapp을 구축 중이며 이제는 일종의로드 밸런서가있는 여러 서버 사이에서 어떻게 확장되는지 조사하고 싶습니다. 앞에.클라우드의 노드 (앱 서버)간에 데이터 공유하기

물론 주 관심사는 서버 측 상태입니다. 여기에는 사용자 세션 데이터, 사용자 업로드 데이터 (그림 등) 및 캐시가 포함됩니다. 앱 서버가 캐시를 공유하기를 원하기 때문에 다른 서버가 이미 완료 한 경우 한 서버가 추가 작업을 수행 할 필요가 없습니다. 스케일링은 언제든지 곧 문제가 될 수는 없겠지만, 이것은 큰 아키텍처 결정처럼 보이기 때문에 처음에는 반쯤 맞을수록 좋습니다.

세션, 나는 쿠키 기반 세션을 사용할 수 있습니다 http://beaker.groovie.org/sessions.html#cookie-based

사용자를 위해 데이터 및 캐시를 (모두 현재 로컬 파일 시스템에 저장) 나는 다른 접근 방식을 필요로하고 내가 하나가 될 것이다 확실하지 않다 업로드 최고로 잘 맞는. 옵션 중 일부는 내가 생각했습니다 특히

  • 분산 파일 시스템
    • 아마존 S3, 내가 클라우드 공급자로 아마존을 목표로하고 있습니다 때문이다. 그러나 코드가 지나치게 특정 업체가되는 것을 피하기 위해 나중에 클라우드 공급자를 변경하는 것이 가능합니다.
  • [분포] 키 - 값 저장소,
  • 은 어떻게 든 모든 데이터를 공유하지 않도록,로드 밸런서는 매우 영리 수있는 모든 데이터가 파일 시스템에가는 가정 내 코드의 추상/아웃 부분을 재 작성 필요 필요한 사용자 데이터/캐시가있는 노드에 직접 요청합니다. 잠시만 요, 샤딩이라고 하죠?
  • 네트워크 액세스 가능 파일 시스템, NFS : 특히 하나의 노드 (가능하면 전용 노드)에서 내 보낸 NFS 디렉토리. 내가 생각할 수있는 가능한 문제 : 여러 클라이언트가

나는 현재하고있어 같은 시간에 같은 파일에 액세스하려고 할 때

  • 대역폭에 대한 NFS 호스트는 병목 현상을
  • 경쟁 조건이 될 수있다 NFS를 사용하는 것을 고려하면 아마도 작동 할 수있는 가장 쉬운 솔루션 인 것 같습니다. 그러나 또 다시, 내가 모르고있는 더 많은 경고가있을 수 있으며, 이것이 근시안적인 결정이 될 수 있습니까? 당신의 경험은 무엇입니까? 클라우드에서 호스팅되고 수평으로 확장 될 것으로 예상되는 앱에 대해 사용한 데이터 저장 및 공유의 형식은 무엇입니까?

답변

1

캐시는 표준 memecached를 사용하여 쉽게 수행 할 수 있습니다.이 캐시는 여러 서버에 분산 될 수 있습니다. NFS는 경쟁 조건을 피하기 위해 자체 잠금 메커니즘을 구현해야하므로 나쁜 생각입니다. 나는 cassandra와 같은 분산 된 no-sql 솔루션 중 하나를 선택할 것입니다.

+0

저는 Memcache 프로토콜을 사용하는 Memcache 및 기타 프로젝트도 고려하고있었습니다. Memcache의 주요 문제는 캐시 메모리를 사용한다는 것입니다. 나는 약간 더 느린 디스크 스토리지를 사용하는 것이 좋으며 메모리에 저장하는 것보다 캐시 할 데이터가 더 많을 수도 있습니다. 나는 NFS에 대해서도 너무 조심 스럽다. 필자가 캐싱에 사용하는 파이썬 라이브러리 인 비커는 논리를 잠그고 있지만 NFS 클라이언트가 사용하는 공격적인 캐싱 때문에 여전히 동기화 문제를 읽을 수 있습니다. –

+0

디스크 스토리지가 원하는 것이라면 NFS 용 (데이터 무결성에 대한 트릭을 재생할 수있는 클라이언트 캐싱 때문에)을 권고하고 SAN 저장소 또는 기타 "심각한"외부 저장소 솔루션과 같은 것을 선택하십시오 – ozk

1

난 강력하게 당신이 아니라 NFS보다 분산 키/값 저장소 보는 것이 좋습니다 것입니다. 당신이 하나의 시스템에있는 2 개 시스템까지 확장하려는 때문에

아마 레디 스보다는 카산드라 사용하십시오. 시원한 동안 카산드라는 읽기보다 쓰기가 많은 시스템을 위해 설계되었으며 노드가 3 개 이상일 때 가장 잘 작동합니다.Redis는 다른 한편으로는 단일 노드 deamon에서 작동합니다. 기본적으로 memcached와 비슷하지만 오류가 지속됩니다.

Redis는 파이썬에서 사용하기 쉽습니다. 매우 효과적이므로 수백만 건의 요청을 할 때까지 Redis 자체의 샤딩이나 스케일링에 대해 걱정할 필요는 없지만 가장 큰 문제. 개인적으로 배포하지 않았으므로 모든 데이터를 복구하는 것이 얼마나 쉽고/쉽지 않은지, 다른 데이터베이스로 복구하는 것이 얼마나 쉬운 지 잘 모르겠습니다. 그럴 것 같으면 그걸 조사 할거야.

좀 더 복잡한 데이터 구조를 저장하려면 MongoDB 또는 그 중 하나를 조사해야합니다.