Page History
...
Persitence를 이해하기 앞서 먼저 정리하고 넘어가야하는 개념입니다.
동시성및 병렬처리 주제만큼 중요한 공통 주제이며 웹서비스에서도 이 두가지가 공존하고
상호 운영이 된다란점이며, 그 차이를 인지하지 못한다면 분산처리 목적을 달성하는것은 불가능할것입니다.
Code Block | ||||
---|---|---|---|---|
| ||||
private int total; int IncreaseValue(int add){ return total+=add; } int SumValue(int x,int y){ return x+y; } |
StateLess-상태가없는
...
SumValue와 같이 함수를 호출한후, 호출한 횟수에 의해 결과값에 영향을 미치지 않는 케이스입니다.
...
연결이되고나서 종료될때까지, 자신의 상태값을 계속 변경할수있는 연결지향형 웹소켓 서비스가 이에 해당할수가 있습니다.
- 사용자별로 상태가 있기때문에 스케이아웃하기가 스케일 아웃 하기가 어렵습니다. ( 변경된 상태를 다른 노드에도 알릴수 있는 장치가 필요)
- 상태가 있기때문에 그것을 복원하기위해 세션 까지고려한 Persitence 장치가 필요합니다.
- 웹소켓도 상태가없는 데이터만 받을수 있습니다. 요청-응답의 한쌍이 특정 저장소에 있는 내용을 항상 반환하는 경우입니다.
...
특정 시점까지 정보를 누적해야할 필요가 있으며, 상태가 관리되고 유지되어야할 필요가 있습니다.
이것이 상태가 있는 서비스 설계가 어려운 이유중에 하나이며, DB를 통해 모든것을 할수있겠지만
초당 수십만건의 이벤트를 단일 DB를 통해 모두 기록하려는것은 무모합니다.
AKKA의 관점에서 본다고하면, 우리가 설계한 액터는 특정사용자의 요청/응답보다 더 오랜시간 존재할수 있으며 시간이 지남에따라
중요한 정보가 누적될수가 있습니다. DB를 통하지 않고 수천개의 실시간 메시지를 처리하면서 성능에 영향을 끼치지 않는 타이밍에
누적된 내용을 압축하거나 집계하여 DB에 저장도 할수가 있습니다.
AKKA에서는 실시간 액터메시지에 영속성을 부여하기위해 이벤트소싱/스냅샷/유실없는메시지전송 등의 장치를 제공해줍니다.
Note |
---|
Akka Persitence 의 목적은, 상태변경 기록이 보장이 되지 않거나 어려운 상태를 가지는 어떠한 상태가 존재하는 객체 설계를 저장소와(RDB,파일,기타장치) 연동되어 몇가지 전략적 선택으로 기록및 복구를 보장하는데 있습니다. Redis를 사용해보셨다면, 이러한 Persitence 목적이 동일함을 알수 있으며 Akka의 Persitence를 이해하는데 도움이됩니다. |
참고자료:
https://nordicapis.com/defining-stateful-vs-stateless-web-services/
...