2017-04-21 9 views
0

우리는 여러 Redis 데이터베이스에 걸쳐 분산 트랜잭션을 설계하려고합니다. 이것을 달성하기 위해 Lua 스크립트를 사용할 수 있습니까? 우리는 데이터 손실을 초래할 수 있으므로 2 단계 커밋을 통해 구현하고 싶지 않습니다. 우리는 데이터가 손실 될 여유가 없습니다.Lua 스크립트를 사용한 Redis Distributed Transaction

예제 시나리오 : 3 개의 Redis DB가 있습니다. 3을 모두 업데이트해야합니다. 업데이트는 순차적 일 수 있지만 세 가지가 모두 성공한 경우에만 성공으로 트랜잭션을 끝내기를 원합니다. 그 중 하나라도 실패하면, 우리는 그것들 모두를 롤백 할 수 있어야합니다.

답변

0

아니요, Redis가 네트워크 호출 용 라이브러리를 노출하지 않기 때문에 루아 스크립트에만 의존하는 Redis 인스턴스간에 분산 트랜잭션을 구현하는 것은 불가능합니다. 그러나 Lua 스크립트를 솔루션의 일부로 사용하여 분산 트랜잭션을 구축 할 수 있습니다 (저는 Redu 서버 위에 Paxos를 구현하기 위해 Lua 스크립트를 사용했습니다).

질문 : 귀하의 질문에, 데이터 손실을 일으키는 2 단계 커밋에 대한 오해가 있습니다. 그것은 일어날 수 없다. 2PC의 교과서 구현은 시스템이 차단되었지만 데이터 손실로 이어지지 않는 상황을 초래할 수 있습니다. 그러나 Google의 Percolator 종이와 같은 2PC의 비 차단 버전이 있기 때문에 차단도 문제가되지 않습니다.

나는 a visualization of non-blocking 2PC을 만들었습니다. 움직이는 부분을 이해하는 데 도움이 될 수 있습니다.