현재 회사에서 실행중인 Windows 서비스를 수평 확장하는 방법에 대한 정보를 찾고 있습니다. 우리는 (그리고 미래의 어떤 시점에서 4.5로 업그레이드 할 수 있습니다) .NET 4.0을 사용하고
서비스의 작업에 새로운 행을 조회 할 수있는 서비스에 대해 윈도우 서버 2012Windows 서비스 스케일 아웃
에 실행 로깅 테이블 (Oracle 데이터베이스로 작업 중), 정보 처리, 5 개의 다른 테이블에있는 행 집합 작성 및/또는 업데이트 (추적 테이블이라고 부름), 로깅 테이블 업데이트 및 반복
로깅 테이블에는 다른 5 개의 추적 테이블에서 선택하여 저장해야하는 대량의 XML (행 당 최대 20MB까지 올라갈 수 있음)이 있습니다. 새로운 행은 항상 시간당 최대 500,000 개의 행에 추가됩니다.
트래킹 테이블의 트래픽은 가장 큰 테이블의 90,000 개의 새 행에서 가장 큰 테이블의 잠재적으로 수백만 개의 행까지 훨씬 더 높습니다. 물론 그 테이블에 대해서도 Update 연산이있다. 데이터에 대한
은
내가이 비트는 이러한 개체 그룹화 및 처리 방법에 따라 솔루션을 찾는 것이 중요하다고 생각 처리된다. 데이터 구조는 다음과 같습니다
public class Report
{
public long Id { get; set; }
public DateTime CreateTime { get; set; }
public Guid MessageId { get; set; }
public string XmlData { get; set; }
}
public class Message
{
public Guid Id { get; set; }
}
- 보고서는 평균 5 개 보고서에가있는 모든 메시지에 대한 로깅 내가 선택해야 데이터 및 프로세스
- 입니다. 어떤 경우에는 1에서 수백까지 다양합니다.
- 메시지에는 다른 컬렉션 및 기타 관계가 많이 포함되어 있지만 질문과 관련이 없습니다.
오늘은 겨우 16 코어 서버의 부하를 관리하는 우리가 가지고있는 Windows 서비스는 (I 전체 사양을 기억하지 않습니다,하지만이 기계는 짐승이라고하는 것이 안전). 나는이 모든 데이터를 처리하고 다른 인스턴스를 간섭하지 않는 더 많은 머신을 추가하고 확장하는 방법을 찾는 임무를 맡았습니다.
현재 각 메시지는 자체 스레드를 가지며 관련 보고서를 처리합니다. Google은 데이터를 처리 할 때 DB 쿼리 수를 최소로 줄이기 위해 MessageId별로 그룹화 된 보고서를 일괄 적으로 처리합니다. 내가 알아서 어떤 아키텍처를 사용하여 처음부터 다시 쓰기이 서비스에 허용하고이 단계에서
제한
- 합니다.
- 인스턴스가 충돌하면 다른 인스턴스는 충돌 한 인스턴스가있는 곳을 선택할 수 있어야합니다. 데이터가 손실 될 수 없습니다.
- 이 처리는 보고서가 데이터베이스에 삽입 될 때 가능한 한 실시간에 가까워 야합니다.
나는 그런 프로젝트를 빌드하는 방법에 대한 입력 또는 조언을 찾고 있어요. 서비스가 stateless 일 필요가 있다고 가정하거나, 모든 인스턴스에 대해 캐시를 어떻게 든 동기화하는 방법이 있습니까? 모든 인스턴스간에 어떻게 조정해야하며 동일한 데이터를 처리하지 않는지 확인해야합니다.부하를 어떻게 균등하게 분배 할 수 있습니까? 물론 인스턴스 충돌을 처리하고 작업을 완료하지 않는 방법은 무엇입니까?
작업 항목의
제거 관련이없는 정보
이것은 * ETL 프로세스처럼 들립니다. SQL Server Integration Services (SSIS)와 같은 패키지를보고이 프로세스를 정기적으로 실행하도록 예약 할 수있는 패키지를 작성해 보셨습니까? –
우리는 오라클을 사용하며 상위 사용자는 불행히도 SQL Server에 관한 말을 듣고 싶지 않습니다. – Artless
나는 SSIS 부분 만 생각했지만 데이터베이스 엔진은 아님 :) 대안은 Pentaho Data Integration (http://www.pentaho.com/explore/pentaho-data-integration/) 또는 Talend etl analytics http://www.talend.com/solutions/etl-analytics) –