0

배경 : 수백만 개 이상의 파일을 읽고 해당 파일을 변환하거나 구문 분석하는 소프트웨어 응용 프로그램을 설계하고 있습니다. 요구 사항 중 하나는 확장 가능하고 분산 된 시스템을 구축하여 읽기 및 구문 분석을 그에 맞게 조정할 수 있도록하는 것입니다.파일 읽기/구문 분석을위한 확장 가능한 시스템 아키텍처/디자인

기본적으로 최소 상세 파일 이름 목록은 하나의 DB이며 클라이언트는 다음 파일을 분석/변환해야한다는 것을 알기 위해 목록에 액세스해야합니다. 파일은 다른 서버/위치에 다시 있습니다. 대부분의 조각이 디자인되어 있지만 재검토가 필요한 중요한 부분 중 하나는 파일 이름을 다른 클라이언트에게 제공하는 디자인입니다.

  1. 디자인 DB 옆에 앉아 이름을 파일에 모든 요청을 채널 화와 클라이언트를 공급하는 단일 서비스 :

    지금은 두 가지 옵션이 있습니다. 따라서이 경우 클라이언트는 서비스 (사전 정의 된 프로토콜/형식)와 대화하고 목록을 가져옵니다.

  2. 디자인 클라이언트가 직접 DB와 통신하고 클라이언트 내에서 동기화/채널 화를 구현합니다.

첫 번째 옵션에 대한 유일한 관심은 그것이 확장 가능한 아키텍처/디자인입니까? 누구나 규모가 큰 아키텍처에서 이러한 상황을 처리 한 사람이 있습니까 (내 경우에는 모든 클라이언트에게 하나의 서비스를 제공/서비스 할 수 있음)

+0

이 파일은 데이터베이스 테이블에 상주하거나 파일 시스템에 저장되어 수행을 제공합니다? – home

+0

@home : 파일 이름 만 DB에 있습니다. 파일은 동일한 네트워크의 다른 위치에있는 다른 물리적 서버에 있습니다. – santosh

답변

0

다음과 같은 메시지 대기열을 살펴볼 것을 제안합니다. 이미 스케일링 아키텍처가있는 Rabbit MQ (http://www.rabbitmq.com), Microsoft Message Queue (http://bit.ly/GMo4iI) 및 IBM Message Queue (http://bit.ly/GMo6qY) 그 자리에.

대기열에서 메시지를 요청하고 처리 할 파일의 세부 사항을 포함하도록 각 메시지 본문을 구성하도록 클라이언트를 설정할 수 있습니다. 그런 다음 클라이언트는 파일이 처리 된 후 대기열에서 메시지를 삭제할 수 있습니다.

동일한 파일을 동시에 읽지 않도록 메커니즘을 설정해야하지만 큐 수준에서 수행 할 수 있으며 각 큐가 특정 큐 또는 메시지 우선 순위를 볼 수 있도록 구성해야합니다.

+0

메시징 프레임 워크가이 시나리오에 적합한 옵션입니다.또한 RabbitMQ와 MSMQ를 통해 클라이언트를 처리하는 게시/구독 방법을 제공해야합니다. – santosh

2

DB 상단에 GigaSpaces (http://www.gigaspaces.com/datagrid)와 같은 분산 데이터 그리드를 사용하는 것이 좋습니다. 이렇게하면 여러 머신에 걸쳐 데이터를 분할하고 DB의 경합을 줄일 수 있습니다. 클라이언트는 데이터 그리드의 다른 인스턴스에서 처리 할 파일을 읽습니다. 로드가 증가함에 따라 데이터 그리드 파티션의 수를 늘리고 데이터 그리드 인스턴스간에 데이터를 분할하는 방법을 결정하면 확장 성이 가능합니다.

하나의 클라이언트 만 처리 할 특정 파일을 읽도록하는 데 고려해야 할 몇 가지 방법이 있습니다. 그 중 하나는 데이터 그리드의 테이크 작업 (& 읽기)을 사용하여 하나의 클라이언트가 '걸릴'수 있습니다. 처리 할 파일

GigaSpaces 또한 당신의 부하 모니터링 할 수 있도록 좋은 모니터링 도구 (유효화, 통계 등 ..)