Q&A
레디스(중앙 상태 관리 서버)에서 동시성 처리 하는 방식
와우... 인프런이 AI를 정말 잘 쓰는군요. 답변이 조금 되신 부분이 있으실까요? 1. 일단 지금 RateLimit 강의에 대한 질문이 맞는지 여쭤보고 싶어요. 제가 정확히 어떤 부분에서 말씀 드렸던 건지 찾기 어렵네요. 2. 일반적인 내용으로 일단 질문 이해한 바대로 답변드려보겠습니다. Q. 원자적 연산과 분산락으로 동시성 문제를 해결한다? 근데 분산락이 원자적 연산을 만드는 거 아닌가? 그럼 둘은 같은 건가? 이런 질문으로 이해했습니다. 일단 뉘앙스가 맞아보입니다. 원자적 연산은 Redis 같은 시스템이 어떤 명령어를 처리할 때 이 명령이 완료되기 전까지는 다른 명령어가 끼어들지 못하도록, 말 그대로 원자적으로 요청을 처리합니다. 분산락은 그렇게 명령어(복수, 혹은 단일)를 처리할 수 있도록 만들어주는 역할을 합니다. 원자적 연산은 도구, 분산락은 상위 레벨의 패턴이라고 생각해주세요. Q. 그리고 Redis를 예시로 들었을때, 레디스는 싱글 스레드 동작 방식이라서, 동시성 문제가 제어 된다고 하는데, 이 동시성 문제가 실제로 발생하는 경우는 어떻게 되는건지, redis 서버가 다중 노드일 때 발생하는건지 궁금합니다. Redis 뿐 아니라 보통 이런 분산 시스템에서 정합성이 깨지는 상황은 Read-Modify-Write 상황이거나, Replication 중에 발생합니다. 1. RMW: 가장 단순하게 예를 들어서 두 클라이언트가 어떤 정수 값을 읽은 다음 해당 값에서 1을 뺀 값을 저장하는 케이스를 생각해보면, 두 클라이언트가 동시에 읽기를 수행하면 하나의 클라이언트의 요청은 무시되는 효과가 생깁니다. 2. Replication: Primary A노드가 명령어 처리하고 복제본에게 값을 전달하기 전에 죽으면, 다른 Primary B가 선출되었을 때 해당 명령어는 유실된 상태가 됩니다. 1번은 Persistant Layer, Cache Layer에서 클라이언트와 상호작용에서 문제가 생길 수 있는 부분이고, 2번의 경우는 시스템이 사용된 트레이드오프로 인해 발생합니다. Primary Node에만 쓰기에 성공하면 성공 응답을 주는 경우는 이런 장애에 취약할 수 있습니다. 하지만 성능은 빠르겠죠? 어떤 경우는 특정 수(쿼럼)의 Replication에 전파가 성공해야만 클라이언트에게 성공 응답을 넘기도록 하는 경우도 있습니다. 이러면 성능은 느려지지만 일관성 유지가 쉬워지겠죠? CAP 이론대로요 🙂 > 첨언: 다중노드(Redis Cluster)인 경우 모든 경우에 대해 싱글 스레드가 동작 가능한 건 아닙니다. 한 노드가 처리할 수 있는 Key를 대상으로 요청해야만 싱글 스레드로 처리가 가능하고 그렇지 않다면 에러가 발생합니다. 예를 들어 A키를 다루는 A' 노드, B키를 다루는 B' 노드가 있다면 A, B에 대한 멀티 키 연산은 에러를 반환합니다.
- いいね数
- 0
- コメント数
- 3
- 閲覧数
- 269

