mcrouter로 memcached add 함수 적용안되는 문제

개발새발·2022년 3월 27일
0

elasticsearch

목록 보기
13/54

라라벨에서 mcrouter을 호출하여 저장하면 저장이 제대로 안되는 문제가 있었다. 이것때문에 일주일을 애먹었는데 진짜 별거 아니였어서 너무 화났다..내자신 디버깅도 똑바로 못해... 😭

  1. 라라벨에서는 캐시를 사용할 때 Cache 파사드 라는 것을 사용한다.

  2. 이 파사드는 라라벨 쓰로틀링에서도 사용이 되는데, 라라벨 쓰로틀링에서 memcached의 incr라는 함수를 사용하여 쓰로틀링을 진행한다.

  3. mcrouter에서 memcached의 함수를 사용하기 위해서는 operation_policies라는 정책을 정의해줘야한다. 안정적인 서비스 운영이 가능한 operation 에 대한 정책 만을 포함하여 제공하기 위해서 get, delete, set 만 세팅이 되어있었다.

  4. 때문에 add를 사용하는 쓰로틀링 부분에서 mcrouter와의 연결이 끊겼고, 제대로 저장이 되질 않았던 것이다! 그래서 기존 opertaion_policies의 정책을 아래처럼 수정해달라고 요청을 했다. (참고로 /etc/mcrouter/config.json 파일에 opertaion_policies가 세팅되어있다.)

    * https://github.com/facebook/mcrouter/wiki/List-of-Route-Handles#operationselectorroute-previously-prefixpolicyroute mcrouter 공식 깃헙인데, operation_policies 환경 설정과 관련해서 잘 나와있다.


[AS-IS]

{
	"pools": {
			"A": {
				"servers": [
				"cluster1.local:11211",
				"cluster2.local:11211",
				]
			}
	},
	"route":{
			"type":"OperationSelectorRoute",
			"operation_policies":{
				"add":"AllInitialRoute|Pool|A",
				"delete":"AllSyncRoute|Pool|A",
				"get":"FailoverRoute|Pool|A",
				"gets":"FailoverRoute|Pool|A",
				"set":"AllSyncRoute|Pool|A",
		}
	}
}

[TO-BE]

{
	"pools": {
			"A": {
				"servers": [
				"cluster1.local:11211",
				"cluster2.local:11211",
				]
			}
	},
	"route":{
			"type":"OperationSelectorRoute",
			"operation_policies":{
				"add":"AllInitialRoute|Pool|A",
				"delete":"AllSyncRoute|Pool|A",
				"get":"FailoverRoute|Pool|A",
				"gets":"FailoverRoute|Pool|A",
				"incr":"AllSyncRoute|Pool|A",
				"set":"AllSyncRoute|Pool|A",
		}
	}
}

그리고 프로젝트 진행하다가 보니 getMulti라는 함수가 필요하게 됐는데, mcrouter에서는 지원하지 않는 것으로 보인다. (혹시 틀렸다면 말씀해주시길 🙏)

profile
발새발개

0개의 댓글