2011-06-12 3 views
0

대용량의 웹 클라이언트 (예 : 브라우저)간에 대량의 메시지를 전송하기위한 서비스 지향 응용 프로그램에 DDD를 사용하고 있습니다.도메인 기반 디자인의 높은 확장 성

필요한 기능의 측면에서 보면 전송의 필요성이 스토리지의 필요성을 능가하므로 RAM을 주로 사용하고 데이터베이스 사용을 최소화하는 아이디어를 좋아합니다.

그러나 확장 성 관점에서 이것을 어떻게 설계해야하는지에 대해서는 분명하지 않습니다. 웹 팜은 서비스 끝점 및 도메인 논리 처리의 고 가용성을 만듭니다. 그러나 내가 가진 서버의 수와 관계없이 데이터가 일관되도록 공통 저장소를 모두 공유해야합니다.

이 저장소를 가능한 확장 가능하도록 구축하려면 어떻게해야합니까? 모든 기계가 일관되고 다른 기계가 고장 나더라도 덜 신경 쓸 수없는 방식으로 물리적 인 기계 배열을 가로 질러 어떻게 튀어 나올 수 있습니까?

또한 데이터베이스를 건드릴 때가끔 필요합니다 (예 : 클라이언트가 누락되어 반환 될 때까지 메시지를 저장해야하는 경우). 메모리 기반 코드 및 데이터 액세스 계층은 어떻게 구성해야합니까? 둘 다 "저장소"로 간주됩니까?

답변

2

이 문제를 해결하는 방법은 여러 가지가 있습니다. 하나의 대답으로 모든 것을 다 커버 할 수는 없습니다 ...

확장 성을 보장하는 한 가지 방법은 하드웨어을 간단히 크기로 조정하는 것입니다. 웹 팜 (같은 DB를 가리키는 동일한 동일한 서비스를 실행하는 웹 팜)을 실행하고 DB를 클러스터로 변환 할 수 있도록 웹 서비스를 상태 비 저장하도록 작성하십시오. 클러스터 된 데이터베이스는 여러 서버에서 실행되며 동일한 저장소에서 작동합니다. 그러나이 시나리오는 매우 복잡하고 비용이 많이 듭니다.

일부 흥미로운 링크 :

또 다른 방법은 아키텍처에서 보는 것입니다. CQRS는 확장 성을 보장하는 공통 아키텍처 모델입니다. 예를 들어이 아키텍처 모델은 이름이 Command/Query Responsibility Segregation의 약자로, 읽기 및 쓰기 용으로 서로 다른 데이터베이스를 구축합니다. 이것은 모순 된 것처럼 보이지만, 당신이 그것을 공부하면, 자연스러워지며, 당신은 전에 그것을 생각한 적이없는 이유를 궁금해하게됩니다. 간단히 말해서, 대부분의 앱은 글쓰기보다 훨씬 더 많은 독서를하며, 글쓰기는 독서 (비즈니스 규칙 확인 등을 요구함)보다 훨씬 복잡해지기 때문에 두 글자를 구분하지 않으시겠습니까? 비싼 트랜잭션 데이터베이스를 작성한 다음 값이 비싸거나 비 SQL 기반 또는 오픈 소스 데이터베이스를 여러 읽기 서버에 사용할 수 있습니다. 읽기 모델은 응용 프로그램의 화면에 맞게 최적화되지만 쓰기 모델은 쓰기 전용으로 최적화되어 있으며 사실 DDD 기반 저장소 세트입니다.

이 옵션을 자세히 설명 할 수있는 충분한 공간이 없지만 CQRS 프레임 워크를 사용하면 확장 성을 확보하고 개발을 쉽게 수행 할 수 있습니다. 감사의 용이성 (CQRS 기반 환경에서 흔히 볼 수있는 "이벤트 소싱"기술과 함께 사용하는 경우)과 같은 CQRS에 대한 다른 많은 이점이 있습니다.

일부 흥미로운 링크 : 조언을

+0

감사합니다. 데이터베이스를 통해 RAM을 선호한다면 그 방향으로 어떤 권장 사항이 있습니까? 데이터베이스 클러스터를 모방 한 무 상태 공유 비공유 저장소를 만들어야하는 것 같습니다. 공통 인 쓰기 조작은 모든 저장소 기계에 동 기적으로 또는 비동기 적으로 변경 사항을 확약합니다. 그런 다음 때로는 프로세스가 데이터가 RAM에 오래 머물렀는지 여부를 검사하고, 그렇다면 모든 저장소 컴퓨터에서 데이터베이스로 데이터를 플러시합니다. –

+0

데이터베이스를 통한 RAM은 읽기 전용 저장소에 적합한 선택이라고 생각합니다. 당신이 쓰려고한다면, RAM은 데이터를 잃을 수있는 경우에만 좋다. 그렇지 않으면 트랜잭션 (ACID) 저장소를 사용할 것입니다. "저장소 시스템"(여러 개)을 언급하는 이유가 궁금합니다. 클러스터를 의미합니까, 아니면 다양한 독립적 인 기계/서비스를 의미합니까? –

+0

당신이 지적한대로 하드웨어 손실의 위험을 줄이는 RAM을 선호하는 컴퓨터 클러스터를 의미하는 것은 데이터 손실을 초래합니다. 필자가 계획 한 시스템에서 데이터는 클라이언트에서 서버로 이동 한 다음 다른 클라이언트의 요청에 따라 서버에서 신속하게 제거됩니다. 따라서 내 데이터는 일시적이며 한 번에 두 초 이상 서버에 남아있을 것으로 예상되지 않습니다. 예외적 인 경우에만 데이터가 남아있을 것이며,이 시점에서 RAM에서 데이터베이스로 마이그레이션됩니다. –

0

약간의 독서를 할 준비가 되셨습니까? 많은 옵션이 있지만, 저는 현대적인 분산 NoSQL DB의 이점에 대해 배우고 페이스 북, 링크드 인 및 다른 친구들이 배운 경험을 통해 배우는 것이 좋다고 생각합니다. 여기에서 시작 :