arcus-java-client icon indicating copy to clipboard operation
arcus-java-client copied to clipboard

ENHANCE: Moved cache list change logic from IO thread to CacheManger thread.

Open brido4125 opened this issue 1 year ago • 13 comments

Motivation

현재 로직에서는 IO 쓰레드가 hash ring의 update로직을 수행한다. 이를 다른 CacheManager 데몬 쓰레드에게 이관하게 IO 쓰레드의 작업량을 감소시킨다.

관련 이슈

https://github.com/jam2in/arcus-works/issues/406

brido4125 avatar Aug 04 '23 06:08 brido4125

IO Thread에 의한 Read와 새로운 Thread에 의한 Write가 동시에 일어날 수 있습니다. 예를 들어, IO Thread가 제거되어야 할 Node를 가져와 연산을 보낼 수도 있습니다. 동시성 이슈는 어떻게 해결했나요?

uhm0311 avatar Aug 04 '23 08:08 uhm0311

동시성 이슈는 어떻게 해결했나요?

ArcusKetamaNodeLocator 내부에 존재하는 Lock 인스턴스를 통해 allNodes 접근하는 경우 lock을 걸어 동시성 이슈를 해결하려 합니다.

이렇게 될 경우 IO Thread가 getAllNodes()를 호출할 때 Blocking이 될 가능성이 높은데 생각하시는 다른 방안이 있을까요?

brido4125 avatar Aug 04 '23 08:08 brido4125

다시 보니 기존에 걸려있는 Lock으로도 충분할 것 같습니다.

uhm0311 avatar Aug 04 '23 09:08 uhm0311

HashRingUpdate Task의 작업 결과를 MemcachedConnection의 Future<Boolean> 필드로 가질 수 있게 하였습니다. 결론적으로 테스트 코드에서 getHashUpdateResult()를 호출해 Hash Ring update가 정상적으로 이루어졌는지 boolean 값을 통해 확인 할 수 있습니다.

brido4125 avatar Aug 09 '23 01:08 brido4125

@oliviarla 리뷰 바랍니다.

jhpark816 avatar Feb 20 '24 03:02 jhpark816

@jhpark816 알림을 놓쳤네요😢 다음주 초에 리뷰 완료하겠습니다.

oliviarla avatar Mar 07 '24 01:03 oliviarla

@brido4125 rabase 바랍니다.

jhpark816 avatar Mar 07 '24 01:03 jhpark816

@jhpark816 리뷰 부탁드리겠습니다.

brido4125 avatar Mar 18 '24 05:03 brido4125

@brido4125 @uhm0311 @oliviarla handleCacheNodesChange() 가 별도 스레드에 의해 수행되어야 할 것 같습니다. 어떤가요? handleCacheNodesChange() 메소드를 그대로 별도 스레드가 수행하면 되는 건지 아니면 메소드 로직에서 별도 스레드가 수행할 부분과 IO 스레드가 수행할 부분을 구분하여 처리해야 하는 지는 검토 바랍니다.

jhpark816 avatar Mar 18 '24 07:03 jhpark816

@jhpark816

cache_list의 변경분을 계산하는 것도 별도의 Thread에서 수행하는 방안이군요. Task에게 현재 cache_list와 변경된 cache_list를 주면 되겠네요. handleCacheNodesChange() 메소드의 로직 전체를 별도의 Thread에 위임해도 될 것 같습니다.

uhm0311 avatar Mar 18 '24 08:03 uhm0311

@uhm0311 @oliviarla @jhpark816

handleCacheNodesChange 메서드 로직 전체를 별도의 스레드가 수행하도록 변경하였습니다.

brido4125 avatar Mar 19 '24 07:03 brido4125

@uhm0311 @oliviarla 리뷰가 완료되신걸까요?

brido4125 avatar Mar 28 '24 01:03 brido4125

저는 아직입니다.

uhm0311 avatar Mar 28 '24 02:03 uhm0311