2013-03-13 3 views
3

의 성장 LMAX 아키텍처 description from Martin Fowler에서 다음 시나리오를 고려하십시오LMAX 아키텍처 - 데이터

내가 설명하기 위해 간단한 비 LMAX 예제를 사용하는 것입니다. 신용 카드로 젤리 콩 주문을한다고 상상해보십시오. < ...>

LMAX 아키텍처에서는이 작업을 두 개로 나눕니다. 첫 번째 작업은 주문 정보를 캡처하여 이벤트 (신용 카드 유효성 확인 요청)를 신용 카드 카드 회사에 출력함으로써 완료됩니다. 비즈니스 로직 프로세서는 입력 이벤트 스트림에 신용 카드 유효성이 검증 된 이벤트를 수신 할 때까지 다른 고객을위한 이벤트를 계속 처리합니다. 해당 이벤트 을 처리하면 해당 주문에 대한 확인 작업이 수행됩니다.

그래서 지불 처리 결과가 수신 될 때까지 주문이 메모리에 보관됩니다.

이제 신용 카드 처리 단계 대신에 더 많은 시간이 걸리는 단계가 있다고 가정 해 보겠습니다. 예를 들어 인벤토리 확인을 수행해야합니다. 누군가가 물리적으로 젤리 빈의 특정 향이 있는지 확인해야합니다. 주문되었습니다. 시간이 소요될 수 있습니다.

많은 경우에 주문이 재고 상태 업데이트 이벤트를 기다리고 있기 때문에 메모리에 보유 된 데이터의 증가로 이어지지는 않을까요?

아마도 이러한 시나리오에서는 메모리에서 주문을 제거하고 출력 이벤트의 일부로 포함해야 할 수 있습니다. 외부 시스템 (인벤토리)은 주문 세부 정보가 포함 된 다른 입력 이벤트를 생성해야합니다.

이 접근법에서 볼 수있는 문제는 비즈니스 로직 프로세서의 일부로 인벤토리를 포함 할 수 없다는 것입니다.

어떻게 해결할 것인가?

답변

9

금융 거래의 워킹 오더는 워킹 세트의 일부로 수일 또는 수개월 동안 머무를 수 있습니다. 예를 들어 선물 계약이 만료 될 때까지 기다립니다. 고객 계정도 유사합니다. "working set"은 현재 활성 상태 인 거래/주문/판매 등을 의미합니다. 거래가 완료되면 과거 거래 데이터의 일부가됩니다.

메모리 시스템은 이제 단일 서버에 수백 기가 바이트 (GB)이기 때문에 거의 모든 비즈니스의 작업 세트가 메모리에 쉽게 들어 맞습니다. 또한 대기업의 성장 속도보다 훨씬 빠른 속도로 사용 가능한 메모리 크기가 증가하고 있습니다.

설명하는 시나리오는 실제로 문제가되지 않습니다. 문제가 될 수있는 것은 전통적인 데이터베이스 또는 파일 기반 시스템이 더 적합한 모든 기록 데이터를 보유해야하는 경우입니다.

간단한 실습은 활성 엔터티 또는 작업 집합에 필요한 메모리를 계산 한 다음 최신 서버에서 사용할 수있는 메모리와 비교하는 것입니다. 100 억 개의 활성 엔티티를 메모리에 둘 수 있습니다.