database/web
XA 와 Non-XA
뚜벅이조
2011. 9. 21. 16:43
그럼 XA DataSource가 무엇인지를 설명하면 되는데, XA는 2PC(2 phase commit)을 통한 분산 트렌젝션 처리를 위한 X-Open에서 명시한 표준입니다. 예를 들어 Oracle데이타베이스와 IBM DB2 데이타베이스간에 2단계검증을 통한 2PC를 보장하여 트렌젝션을 보장시켜주는 것이지요. 비단 데이타베이스에 국한되지 않습니다. WAS의 트렌젝션 서비스를 통해 TUXEDO(via WTC)와 Oracle 데이타베이스, IBM MQ와 Sybase DB등 이기종 Resource Manager간에 트렌젝션이 보장되는 것이지요. 트렌젝션이 보장된다 함은 각각이 모두 commit되었을 때만이 전체가 commit되며 하나라도 rollback되면 모두가 rollback되어야 한다는 것을 의미합니다. 그럼 언제 XA DataSource를 사용하고, 언제 Non-XA DataSource(ConnectionPoolDataSource)를 사용해야 할까요? 현재 등록된 하나 이상의 (혹은 이기종) 데이타베이스간에 2pc 트렌젝션이 보장되어야 할 때 XA DataSource를 사용하시면 되고, 설령 하나 이상이 데이타베이스를 접근하더라도, 굳이 트렌젝션이 보장되어할 필요성이 없다면 Non-XA DataSource로 등록하여 사용하시면 됩니다. 일반적으로 XA DataSource는 데이타를 정합성 및 2pc를 위해 file lock이나, 그 외의 적절한 메카니즘(예를 들어 WAS가 다운되더라도 2pc는 보장되어야 하며, 갑작스런 down시에도 적절한 트렌젝션 리커버리를 위한 메카니즘)을 보장하기위한 기능이 들어있기에 Non-XA에 비해 성능이 느립니다. 따라서, 2PC를 사용할 경우의 최대의 관건은 가능한 빨리 리소스에 대한 commit/rollback과 자원의 반납등이 중요하며, 성능의 확장성과 반대방향(?)이므로 충분한 고려를 필요로 합니다. NOTE: 웹스피어의 경우 같은 데이타베이스를 향하는 데이타소스일지라도, 등록된 데이타소스의 이름, 아이디 및 프라퍼티가 모두 동일해야 2PC로 승격되지 않습니다.