inflearn logo
강의

講義

知識共有

在庫システムで調べる同時性問題の解決方法

synchronized 쓰지 않는 이유는 해당 서버가 스케일 아웃(분산처리 하기 위해) 경우 동시성을 보장 못 하기 때문이라고 해주셨는데요

758

syh8088

投稿した質問数 77

0


 
 
이와 같이 동시성 보장하기 위해
 
Redisson, Lettuce 를 사용한다고 가정하겠습니다.
 
하지만 해당 Redis 서버에서도 스케일 아웃을 하게된다면
 
이때 synchronized 처럼 동시성 보장 얻기 힘든거 아닌가요?
 
Thread A 가 Redis A Server 에 Lock 을 걸었는데
동시에 Thread B 가 Redis B Server 에 Lock 을 걸고 동시에 호출이 가능하지 않을까 해서요.
 
사실 대규모 서비스를 운영해본적이 없어서 이렇게 엉뚱한? 질문을 드리네요...
 
 

java spring 동시성

回答 2

0

seolnavy

Redis에서 명령/요청등을 처리하는 스레드는 한개인것으로 알고있습니다.

읽기 성능 확장을 위한 복제(Replication)와 쓰기 성능 향상을 위한 샤딩(Sharding)을 하더라도
명령/요청처리는 마스터의 한 스레드만 담당하는것으로 알고있는데요.

그래서 레디스를 스케일아웃으로 확장하더라도 동시성 보장이 되는것으로 보입니다.
내용에 틀린부분이 있다면 댓글 부탁드립니다.

---

Reddison Readme Features
(https://github.com/redisson/redisson/)

  • Redis Replicated setup (also compatible with AWS ElastiCache and Azure Redis Cache)
  • Redis Cluster setup (also compatible with AWS ElastiCache Cluster, Amazon MemoryDB and Azure Redis Cache)
  • Redis Sentinel setup
  • Redis with Master with Slave only

---

https://djlee118.tistory.com/111

https://akasai.tistory.com/23

0

169developer9973

안녕하세요. seolnavy 님
말씀해주신 내용이 맞습니다 :)

제가 예시로 들어드린 2대의 Redis 에서 모두락을 얻는상황은 클러스터링이나 샤딩이 아닌 독립적인 2대의 Redis 의 상황이었습니다!

제가 리나님의 질문을 잘못 이해한듯합니다.
대신 답변주셔서 감사합니다 :)

 

0

169developer9973

안녕하세요. 리나님!

일단 강의에서 가정하는 인프라구조는 아래와 같습니다.

2개의 서버가 1개의 레디스를 바라본다고 한다면 동시성이 보장됩니다.

1개의 레디스에 먼저 Lock 을 획득한 서버가 Lock 을 해제하기 전까지 다른 서버에서는 Lock 을 획득하지 못하기때문입니다.

 

추가로 Redis Server 가 2개가 있는것은 Redis 를 2대를 활용한다는듯합니다. 맞을까요 ?

2대를 활용하는것이 맞다면 말씀해주신것처럼 동시성이 보장되지 않을 수 있습니다.

그럴때는 특별한 전략을 사용해야합니다.

가장 간단하게 생각을 해본다면 "2 대의 Redis 서버에서 모두 Lock 을 획득해야만 Lock 획득으로 인정한다" 라는 전략을 사용할 수 있을 듯합니다.

 

추가적인 질문이 있다면 댓글 달아주세요!

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

39

2

낙관적 락을 사용할 떄 차이점

0

118

2

동시성 검증 코드에 관한 문의

0

91

2

단일연산

0

69

2

낙관적락vs. 레디스락

0

106

2

안녕하세요. 레디슨 질문있습니다..!!

0

65

2

@Lock(OPTIMISTIC)이 필요한 이유

0

88

2

get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?

0

128

2

DataSource Hikari 사용 이유

0

144

2

saveAndFlush 사용 이유 문의

0

111

3

비관적 락 VS 네임드 락

0

158

3

application.yaml 에 redis 정보

0

97

2

왜 클래스 이름에 Facade 가 붙나요?

0

181

2

@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.

0

217

2

@modifying 이용한 동시성 제어

0

167

2

DB락과 분산락

0

260

2

NamedLock 테스트 실패

0

186

2

테스트에서 트랜잭션 어노테이션 질문 있습니다.

0

171

2

optimistic Lock 재시도 질문입니다.

0

229

2

낙관적 락 테스트 실패

0

239

2

오류?

0

1624

4

LettureLockStockFacadeTest에서 오류가 발생합니다.

1

267

2

Pessimistic Lock 전체 테스트 오류 문의

0

357

3

비관적 락 vs 레디스(Lettuce)락 비교 관련 질문

0

458

2