naver / arcus-c-client

ARCUS C client
https://github.com/naver/arcus
Apache License 2.0
12 stars 16 forks source link

INTERNAL: Remove a behavior type 'MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED' #273

Closed ing-eoking closed 11 months ago

ing-eoking commented 11 months ago

위 PR의 후속 PR이며, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED 타입을 제거합니다. (MEMCACHED_BEHAVIOR_KETAMA는 좀 더 검토 후 다음 PR로 올릴 예정)

MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED 타입이 제거됨에 따라 일부 코드가 조금 변경되었습니다.

변경 사항은 아래와 같습니다.

ing-eoking commented 11 months ago

@namsic 리뷰 부탁드립니다

ing-eoking commented 11 months ago

@jhpark816 @namsic

ptr->ketama.weighted의 제거에 관하여

참조

  1. ptr->ketama.weighted을 변경할 수 있는 함수

  2. arcus-java-client 내에서 weight 관련 처리가 존재하는가?

    • 존재하지 않습니다.
  3. spy-memcached 에서 weight 관련 처리

jhpark816 commented 11 months ago

@ing-eoking server_add() 함수와 memcached_server_push_with_count 함수에 의하여 weighted 플래그가 설정하는 것이 맞는 동작인가요?

ing-eoking commented 11 months ago

@jhpark816 저는 맞는 동작이라고 생각합니다.

server_addmemcached_server_push_with_count 둘 다 기존 서버에서 사용자가 서버를 추가하는 경우이며, weight를 갖는 서버 추가를 시도한다면 weighted 플래그를 변경할 수 있는 상황이 만들어집니다.

이때에 사용자가 distribution type이나 weighted 플래그를 설정하게 하기 보다는 해당 함수들에서 내부적으로 처리해주는 편이 낫다고 생각됩니다.

namsic commented 11 months ago

server_add() 함수와 memcached_server_push_with_count 함수에 의하여 weighted 플래그가 설정하는 것이 맞는 동작인가요?

server_add 와 memcached_server_push_with_count 둘 다 기존 서버에서 사용자가 서버를 추가하는 경우이며, weight를 갖는 서버 추가를 시도한다면 weighted 플래그를 변경할 수 있는 상황이 만들어집니다. 이때에 사용자가 distribution type이나 weighted 플래그를 설정하게 하기 보다는 해당 함수들에서 내부적으로 처리해주는 편이 낫다고 생각됩니다.

@ing-eoking 기존 distribution type이 KETAMA(_SPY)가 아닌데 사용자가 weight를 갖는 서버를 추가하면 어떻게 동작하는 것이 맞나요?

ing-eoking commented 11 months ago

기존 distribution type이 KETAMA(_SPY)가 아닌데 사용자가 weight를 갖는 서버를 추가하면 어떻게 동작하는 것이 맞나요?

"distribution type을 KETAMA 또는 KETAMA_SPY로 변경 후 weight 적용"

위와 같은 동작이 가장 알맞는다고 생각합니다.

namsic commented 11 months ago

기존 distribution type이 KETAMA(_SPY)가 아닌데 사용자가 weight를 갖는 서버를 추가하면 => distribution type을 KETAMA 또는 KETAMA_SPY로 변경 후 weight 적용하는 것이 가장 알맞다고 생각합니다.

ing-eoking commented 11 months ago
  • 이 때 ketama로 변경해야 하는지 ketama_spy로 변경해야 하는지는 무엇을 기준으로 판단하게 되나요?

기존 type을 기준으로 변경한다고 생각합니다.

ketama일 경우, ketama_weighted ketama_spy이면, ketama_spy_weighted로 변경

  • 참고로 저는 위 경우에서 판단 기준이 모호하기 때문에 무시하는 것이 가장 낫지 않나 생각합니다.

무시한다는 것은 설정된 weight 값을 무시하고 continuum hash ring을 구성한다는 말인가요? 혹시 모호한 부분에 대해서 말씀해주실 수 있나요?

우선 제 생각은 사용자가 weight가 없던 서버 리스트에 weight를 갖는 서버를 추가했다는 것은 사용자가 새로 추가된 서버에 부하를 더 주겠다는 의미가 됩니다. (weight의 default는 1이며, 이보다 큰 값을 설정해야 weighted 플래그가 true로 변경됩니다.)

기존 코드가 두 플래그가 continuum hash ring 생성에서 다음에 관여하고 있고,

기존의 공평한 continuum hash(서버가 모두 공평한 distribution을 가짐) 에서 추가된 서버에 부하를 더 주고 싶은 상황이므로 생성 문자열은 그대로 두고, 가중치만 변경할 수 있게 하는 것이 맞다고 생각합니다.

namsic commented 11 months ago

기존 distribution type이 KETAMA(_SPY)가 아닌데 사용자가 weight를 갖는 서버를 추가하면 어떻게 동작하는 것이 맞나요?

기존 type을 기준으로 변경한다고 생각합니다. ketama일 경우, ketama_weighted. ketama_spy이면, ketama_spy_weighted로 변경

  1. 기존 distribution type이 RANDOM또는 MODULA 등의 Non-Ketama type인데
  2. server_add()로 weight를 주었을 때
  3. 그 결과는 ketama_weighted인지 ketama_spy_weighted인지

를 묻고자 했습니다. 3번 항목을 결정하기가 어렵기 때문에 weight 인자는 무시하고 기존 distribution type(MODULA, RANDOM, …)을 유지해야 하지 않나 생각한 것 이고요.

ing-eoking commented 11 months ago

Non-Ketama type 인데 weight있는 서버를 주었다고 Ketama type으로 변경하는 것은 아닙니다. 해당 type들은 weight 기능을 갖지 않는 type이며, 동작을 변경할 필요가 없습니다. 해당 경우는 Non-Weight-Ketama 동작을 Weight-Ketama로 바꾸는 경우입니다.

앞으로의 내용은 jam2in/arcus-works#485 에 추가해주시면 감사하겠습니다.