2010-06-27 2 views
0

웹 기반 CRM 앱을 계획 중입니다.웹 기반 CRM 응용 프로그램을 위해 어떤 아키텍처를 선택해야합니까?

대상 사용자는 수백 개의 클라이언트가있는 소규모 기업입니다. 호스팅을 위해 Rails 프레임 워크와 Rackspace Cloud Server/Amazon EC2를 사용할 계획입니다.

데이터가 기밀로 취급되므로 모든 사용자에게 단일 데이터베이스를 사용하지 않는 것이 좋습니다. 이는 각 앱이 하위 도메인에 묶여있는 각 클라이언트에 대해 별도의 데이터베이스로 레일 앱의 새로운 인스턴스를 실행해야한다는 의미입니까? 아니면 해결 방법이 있습니까?

또 다른 질문입니다. 모든 클라이언트에 대해 레일스 애플리케이션의 새로운 인스턴스를 만들어야한다면 얼마나 많은 인스턴스가 EC2 [2GB RAM, 2GHz CPU] 크기를 지원할 수 있습니까? [하루에 인스턴스 당 100 개의 읽기/쓰기 작업].

답변

1

SAAS 세계에서 대부분의 멀티 테넌트 응용 프로그램은 데이터를 분리하여 유지하기 위해 고유 식별자 (클라이언트 또는 계정 ID)를 사용하여 단일 데이터베이스에서 실행되는 것처럼 보입니다. 코드 작성이 매우 간단하며 작동합니다. 배포 프로세스에 대한 테스트 및 감사를 만들어 데이터를 비공개로 유지할 수 있습니다.

그러나 Postgresql 스키마를 살펴 보는 것도 좋습니다. 스키마를 사용하면 단일 데이터베이스를 액세스가 제어 된 여러 개의 고유 한 스키마로 "분할"할 수 있습니다.

자세한 내용은 여기 : Should I use multiple databases?.

인스턴스의 수에 관한 질문 중 두 번째 부분은 실제로 응용 프로그램 자체와 사용중인 RAM의 양에 따라 달라질 것입니다. 하루 100 건의 읽기/쓰기 작업은 중요하지 않으므로 작습니다. 따라서 RAM은 조작 요소입니다. "평균적인"Rails 애플리케이션은 인스턴스 당 20-100MB의 데이터를 사용하므로 2GB 서버가 상당히 많이 실행될 수 있습니다. 물론이 설정을 효과적으로 수행하려면 가상 호스팅 환경에서 실행해야하므로 배포가 매우 복잡해집니다.

내 투표는 분명히 단일 응용 프로그램에 대한 것입니다.

1

우선, 프레임 워크가 사용되는 한, 레일스가 티켓이기 때문에 가장 쉬운 방법으로 사용하십시오.

아니요, 권장 클라이언트마다 별도의 데이터베이스/레일스 인스턴스 생성. 좋은 승인을 받아서, 내가 말한 것과 같은 앱이 가지고 있다고 예상 할 수있는 것처럼, 너무 많은 문제없이 부정 교과목에 대한 모든 액세스를 막을 수 있습니다.

또한 Rails의 많은 인스턴스를 실행하면 대부분 낭비되는 자원으로 시스템을 "막히게"됩니다.

좋은 크기의 EC2는 앱을 지원할 수 있어야하지만 실제로는 코드가 얼마나 비싸고 (CPU 시간), 쿼리 비용이 얼마나 들지는 않습니다. 이것은 우리가 실제로 정확한 추정치를 제공 할 수있는 것이 아닙니다.

+0

답장을 보내 주셔서 감사합니다 :-) – Jagira

+0

이 경우 데이터베이스 오류는 모든 클라이언트에 영향을 미칩니다. – Jagira

+0

필요하지 않습니다.첫째, 데이터베이스를 온라인 스페어로 복제 할 수 있습니다. Seccondly, 백업/여분이 없다면 여전히 화가 난 클라이언트가 하나 있습니다. – thomasfedb

2

이 내용은 레일스에만 국한되지는 않지만, 실제로 multitenancy에서 읽어야합니다. 이는 응용 프로그램에 권장 할만한 내용입니다. 클라이언트 당 코드 인스턴스를 유지 관리하는 대신 다중 클라이언트를 지원한다는 사실을 알고있는 단일 인스턴스를 유지 관리합니다. 나는 그것을 보지 못했지만 Ruby/Rails에서 멀티 테넌트 애플리케이션을 작성하는 데 conference talk을 발견 할 수있었습니다. Any thoughts on Multi-tenant versus Multi-database apps in Rails

+0

도움이 될 것입니다. 감사 :-) – Jagira

관련 문제