2009-08-10 5 views

답변

4

MSDTC와 같은 Trasaction Coordinator는 분산 트랜잭션을 관리하기위한 서버입니다. 트랜잭션의 지속적인 레코드를 보유하고 자원 관리자와의 2 단계 확약/롤백 프로세스에 대한 통신을 관리합니다. 그것은 트랜잭션 관리자에 통합 될 수도 있고 통합되지 않을 수도 있습니다.

TP-speak에서 'Transaction Manager'은 '자원 관리자'에게 커미트/롤백 요청을하는 항목입니다. 'Resource Manager'는 상태를 트랜잭션으로 변경시키는 데이터베이스 관리 시스템과 유사합니다. 2 단계 커밋은 트랜잭션 관리자가 모든 리소스 관리자가 트랜잭션을 커밋 할 수 있는지 (즉, 영구 저장소에 로그 항목을 기록하고 커밋을 방지 할 수있는 오류 조건이 없음) 트랜잭션을 보장 할 수 있는지 확인한 다음 커밋을 알리는 프로토콜입니다. 그런 다음 트랜잭션이 'committed'로 표시되기 전에 모든 자원 관리자가 트랜잭션을 커밋했는지 확인합니다.

트랜잭션 코디네이터는이 커밋 프로세스를 처리하는 시스템의 일부입니다. 트랜잭션 모니터와 동일한 프로그램 일 수도 있고 그렇지 않을 수도 있습니다. 트랜잭션 코디네이터의 예는 MS DTC (분산 트랜잭션 코디네이터)입니다. 이 아키텍처 (MTS/COM+)에서와 같이 실제로는 별도의 프로세스로 실행되는 것처럼 약간 재미 있습니다.

트랜잭션 관리자 또는 TP 모니터는 응용 프로그램이 트랜잭션 확약/롤백 프로세스를 제어하는 ​​데 사용하는 서브 시스템입니다. 애플리케이션의 중간 계층을 호스팅하고 트랜잭션 ID를 가져오고 트랜잭션을 커밋/롤백하도록 투표하는 API를 제공합니다. 하나의 프로세스 만이 투표에 참여하는 경우 이것은 커밋/롤백을 조언하는 것과 같습니다. 자바 서클에서는 이것을 '애플리케이션 서버'(또는 종종 EJB를 사용하는 '빈 컨테이너')라고합니다. 트랜잭션 관리자의 예로는 MS Transaction Services (나중에 COM + Transaction Services라고 함), CICS 및 다양한 Java 응용 프로그램 서버가 있습니다.

데이터베이스에 대한 둘 이상의 호출에 걸친 연결 풀과 트랜잭션이있는 경우 트랜잭션 범위는 세션 및 연결 상태와 분리되어야합니다. 이후의 DBMS 호출은 동일한 연결을 통해 이루어질 수 없습니다. 따라서 데이터베이스에 요청을 태그하는 데 사용할 수있는 별도의 트랜잭션 ID가 필요합니다. 잠금은 트랜잭션 ID에 의해 소유됩니다.

데이터베이스 연결과의 분리 때문에 커밋 및 롤백은 중간 계층에서 다른 프로토콜을 통해 대역 외로 제어되어야합니다. 이것은 XA protocol (XOpen 표준의) 또는 OLE 트랜잭션 프로토콜의 역할입니다.

리소스 관리자에 대한 커밋/롤백 요청은 응용 프로그램을 호스팅하는 서버와 동일한 서버에서 가져올 필요가 없습니다. 트랜잭션 관리자는 별도의 트랜잭션 조정자를 사용하여 커밋/롤백 프로세스를 관리 할 수 ​​있습니다. 이들은 TX.과 같은 프로토콜을 사용하여 통신 할 수 있습니다. 다른 경우 트랜잭션 관리자는 XA와 같은 프로토콜을 사용하여 자원 관리자 (데이터베이스)에 직접 커밋/롤백 지침을 발행 할 수 있습니다. 따라서 트랜잭션 조정 및 관리 기능은 어느 정도 분리되어 있으며 동일한 소프트웨어로 수행되거나 수행되지 않을 수 있습니다.MSDTC의 경우에는 분리되어 있지만 엄격하게 요구되지는 않습니다.

트랜잭션 코디네이터를 별도의 프로세스로 옮기는 장점 중 하나는 잘못된 응용 프로그램 코드로 인해 충돌이 발생하지 않는다는 것입니다. 이 경우 프로세스 만 트랜잭션 커밋을 처리하고 응용 프로그램 ocde를 호스트하지 않습니다. 다른 항목이이 항목과 통신합니다. 이를 통해 트랜잭션 코디네이터는 매우 간단하고 집중적이며 응용 프로그램 충돌에 강합니다. 애플리케이션 서버에 통합되는 경우 애플리케이션 서버 충돌로 인해 애플리케이션과 관련이없는 제 3 자 리소스 관리자가 포함 된 트랜잭션이 다운 될 수 있습니다. Transaction Coordination을 별도의 프로세스로 옮기는 것은 네트워크 요청으로 인해 트랜잭션 커밋의 대기 시간이 늘어나는 단점이 있습니다.

편집 : 내가 웹 로직에서 트랜잭션 코디네이터가 '웹 로직 트랜잭션 관리자'라고하며 트랜잭션 관리는 빈 컨테이너를 통해 이루어집니다 스피어 있지만 IIRC에 대한 확실하지 않다.

+0

좋은 답변입니다 !!! +1 –