Persitence의 경우 액터의 상태를 메모리에 지속 또는 영속적으로 보존하여 다양한 성능및 분산전략에 사용이됩니다. 유사한 목적인 Redius의 경우도 메모리 데이터의 영속성을 보장하지만 KeyBase로 복잡한 분산전략에 단순한 대응만을 하기때문에 한계가 있으며 Actor의 Persitence는 FSM(유한상태머신)까지 활용가능하며, 다양한 전략에서 대응을 할수가 있습니다. Persitence를 사용하기위해 몇가지 PersitenceActor가 제공 되어지며 , 영속적인 저장용도로 저널에관한 Pulgin 지정을 할수가 있습니다. |
메모리 데이터는 왜 상태를 복구해야할까? 메모리 데이터에 영속성을 부여할수 있다고 해서 모든 메모리데이터를 영속성을 만드는것은 합리적이지 못합니다. 예를 들어 HTTP요청의 수신만으로 모든상태를 복구할수있다고 하면 , 실패할때 다시 요청하면 되기 때문입니다. 이것에 대한 대부분의 처리는 DB가 해왔을것입니다. 그러면 액터의 상태복구가 필요할때는 언제인가? 액터는 메시지하나(요청/응답) 보다 더 오래존재하며, 시간이 지남에따라 다양한 가치있는 정보가 누적이됩니다. 또한 액터는 각각을 식별할수 있는 정체성이 있으며 해당 액터를 설계된 조건에의해 생성및 접근을 할수가 있습니다. 온라인 쇼핑몰 장바구니 액터를 예를 들어봅시다. 상품을 검색하고 장바구니에 상품을 빼고 넣고 , 해당 시스템이 의도된 업데이트이던지 장애에의해서이던지, 우리는 빈장바구니를 보여주고 싶지 않을것입니다. 그리고 그것은 사용자가 다른기기로 옮겨가게 될시도 장바구니는 유지될것입니다. 이것은 DB의 의존없이 액터의 상태를 영속화해야 할 필요성을 보여주는 부분적인 예일뿐입니다. 위와 같은 처리를, 우리의 메인 DB에 모든 사용자의 이벤트를 기록하여 복구하는 방법을 사용 해도됩니다. 그것이 전통적으로 익숙한 개발 방법이며, DB를 차츰 느리게 하는 방법이 였을것입니다. |
akka.persistence 를 설치하여, Actor 영속성에 관련된 기능을 제공 받습니다.
