지금까지 단일 서버에서 제공 한 Python/Pylons webapp을 구축 중이며 이제는 일종의로드 밸런서가있는 여러 서버 사이에서 어떻게 확장되는지 조사하고 싶습니다. 앞에.클라우드의 노드 (앱 서버)간에 데이터 공유하기
물론 주 관심사는 서버 측 상태입니다. 여기에는 사용자 세션 데이터, 사용자 업로드 데이터 (그림 등) 및 캐시가 포함됩니다. 앱 서버가 캐시를 공유하기를 원하기 때문에 다른 서버가 이미 완료 한 경우 한 서버가 추가 작업을 수행 할 필요가 없습니다. 스케일링은 언제든지 곧 문제가 될 수는 없겠지만, 이것은 큰 아키텍처 결정처럼 보이기 때문에 처음에는 반쯤 맞을수록 좋습니다.
세션, 나는 쿠키 기반 세션을 사용할 수 있습니다 http://beaker.groovie.org/sessions.html#cookie-based
사용자를 위해 데이터 및 캐시를 (모두 현재 로컬 파일 시스템에 저장) 나는 다른 접근 방식을 필요로하고 내가 하나가 될 것이다 확실하지 않다 업로드 최고로 잘 맞는. 옵션 중 일부는 내가 생각했습니다 특히
- 분산 파일 시스템
- 아마존 S3, 내가 클라우드 공급자로 아마존을 목표로하고 있습니다 때문이다. 그러나 코드가 지나치게 특정 업체가되는 것을 피하기 위해 나중에 클라우드 공급자를 변경하는 것이 가능합니다.
- [분포] 키 - 값 저장소,
- 은 어떻게 든 모든 데이터를 공유하지 않도록,로드 밸런서는 매우 영리 수있는 모든 데이터가 파일 시스템에가는 가정 내 코드의 추상/아웃 부분을 재 작성 필요 필요한 사용자 데이터/캐시가있는 노드에 직접 요청합니다. 잠시만 요, 샤딩이라고 하죠?
- 네트워크 액세스 가능 파일 시스템, NFS : 특히 하나의 노드 (가능하면 전용 노드)에서 내 보낸 NFS 디렉토리. 내가 생각할 수있는 가능한 문제 : 여러 클라이언트가
나는 현재하고있어 같은 시간에 같은 파일에 액세스하려고 할 때
- 대역폭에 대한 NFS 호스트는 병목 현상을
- 경쟁 조건이 될 수있다 NFS를 사용하는 것을 고려하면 아마도 작동 할 수있는 가장 쉬운 솔루션 인 것 같습니다. 그러나 또 다시, 내가 모르고있는 더 많은 경고가있을 수 있으며, 이것이 근시안적인 결정이 될 수 있습니까? 당신의 경험은 무엇입니까? 클라우드에서 호스팅되고 수평으로 확장 될 것으로 예상되는 앱에 대해 사용한 데이터 저장 및 공유의 형식은 무엇입니까?
저는 Memcache 프로토콜을 사용하는 Memcache 및 기타 프로젝트도 고려하고있었습니다. Memcache의 주요 문제는 캐시 메모리를 사용한다는 것입니다. 나는 약간 더 느린 디스크 스토리지를 사용하는 것이 좋으며 메모리에 저장하는 것보다 캐시 할 데이터가 더 많을 수도 있습니다. 나는 NFS에 대해서도 너무 조심 스럽다. 필자가 캐싱에 사용하는 파이썬 라이브러리 인 비커는 논리를 잠그고 있지만 NFS 클라이언트가 사용하는 공격적인 캐싱 때문에 여전히 동기화 문제를 읽을 수 있습니다. –
디스크 스토리지가 원하는 것이라면 NFS 용 (데이터 무결성에 대한 트릭을 재생할 수있는 클라이언트 캐싱 때문에)을 권고하고 SAN 저장소 또는 기타 "심각한"외부 저장소 솔루션과 같은 것을 선택하십시오 – ozk