Open jhpark816 opened 8 years ago
제가 해보겠습니다.
@blukat29 진행해보시고, 잘 안되거나 궁금하신 내용있으면 이곳에 질문 올려주세요.
@blukat29 언어 선택, 개발은 자유롭게 하시고, 기획이나 사용방법 등 구조가 어느정도 완성되면 공유 한번 해주시면 좋을 것 같습니다. pull request는 arcus main repo(https://github.com/naver/arcus), develop 브랜치로 보내주세요.
안녕하세요, arcus-python-client에 제시하신 기능에 필요한 부분인 arcus hash, zookeeper query, memcache query 등이 python module로 구현되어있는 것으로 보입니다. 따라서 이 이슈에 필요한 기능은 arcus-python-client를 이용하여 구현하면 효율적으로 할 수 있을 것 같습니다.
괜찮은 방법인지, 그렇게 할 경우 코드 구성을 어떻게 해야 할 지, dependency는 어떤 식으로 포함시켜야 할 지 도움이 필요합니다.
@blukat29 Python client를 이용해 개발하는 방법도 괜찮은 것 같습니다. 새로운 기는을 개발하는 것이니, 이슈에 명시된 기능이 포함되고 사용법에 대한 readme만 명확하게 있으면 됩니다. 그 외 코드 구성등은 자유롭게 하시면 됩니다.
안녕하세요, 팀원으로 같이 참여하도록 하겠습니다.
안녕하세요, arcus-python-client를 이용해서 제시하신 기능 중 새로운 기능을 구현하려고 합니다. 따라서 contribution을 arcus-python-client로 하는 것이 괜찮은 방법인지, 그렇다면 지금 담당 분과 계속 진행하면 되는지 여쭙니다.
@wjw0926 @lynix94
현재로선, command-line tool의 일부 기능이 arcus-python-client에 있고, 이를 확장하여 새로운 기능을 추가하는 방향으로 contribution하려고 하니, arcus-python-client로 contribution하는 것이 좋을 것 같습니다.
새로 추가하려는 기능들이 어떤 것들이 있는 지 먼저 알려주면 검토하여 최종 답변 주겠습니다.
현재 arcus python client에 포함된 arcus_cmd.py
는 다음과 같은 기능을 가지고 있습니다.
$ ./arcus_cmd.py --help
Usage: arcus_cmd.py [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-f FILE, --file=FILE zookeeper address lists file
-a ADDRESS, --address=ADDRESS
zookeeper address
-s SERVICE, --service=SERVICE
service code
-c COMMAND, --command=COMMAND
arcus command
-n NODE, --node=NODE node address or ip
-x SSH_COMMAND, --ssh_command=SSH_COMMAND
ssh command execution
--ssh_command_file=SSH_COMMAND_FILE
ssh command execution from file
-i, --i memory, maxconns info
--dump_script dump start script
--vpn_remap=VPN_REMAP
read ip remap file for vpn network
--all_node select all node
--all_server select all server
-t TIMEOUT, --timeout=TIMEOUT
arcus command timeout (msec)
주어진 key의 value 조회의 경우 -c
옵션으로 각 memcached 노드에 telnet 커맨드를 보내면 됩니다.
이렇게 하면 value뿐만 아니라 flag도 알 수 있고, key가 어느 노드에 있는지도 알 수 있습니다.
$ ./arcus_cmd.py -a localhost:2181 -s test -c 'get test:string1'
## Zookeeper address localhost:2181
[127.0.0.1:11211-(localhost)]
[127.0.0.1:11212-(localhost)]
[127.0.0.1:11211-(localhost)] get test:string1 - VALUE test:string1 0 7
test...
END
[127.0.0.1:11212-(localhost)] get test:string1 - END
그래서 여기에 prefix별 통계 기능이 추가되면 좋을 것 같습니다. 아래와 같이 각 memcached 노드에 stats items
및 stats cachedump
명령을 내려 키들의 목록을 뽑아오는 방식으로 구현하면 될 것 같습니다.
stats items
STAT items:0:number 7
STAT items:0:sticky 0
STAT items:0:age 498
STAT items:0:evicted 0
STAT items:0:evicted_nonzero 0
STAT items:0:evicted_time 0
STAT items:0:outofmemory 0
STAT items:0:tailrepairs 0
STAT items:0:reclaimed 42
END
stats cachedump 0 100
ITEM arcus:zk-ping [acctime=517, exptime=0]
ITEM test:incr [acctime=498, exptime=518]
ITEM test:bytearray [acctime=498, exptime=518]
ITEM test:bool [acctime=498, exptime=518]
ITEM test:float [acctime=498, exptime=518]
ITEM test:int [acctime=498, exptime=518]
ITEM test:string1 [acctime=498, exptime=518]
END [curtime=519]
최종적으로 목표하는 출력은 이런 식입니다.
$ ./arcus_cmd.py -a localhost:2181 -s test --prefix_stats
[127.0.0.1:11211-(localhost)]
test: 7 items
hello: 6 items
[127.0.0.1:11212-(localhost)]
test: 1 items
hello: 13 items
[total]
test: 8 items
hello: 19 items
@jhpark816 검토해보시고 답변 부탁드립니다. 감사합니다.
@blukat29 각 cache node에서 prefix 관련된 stats 정보는 아래의 명령으로 구할 수 있습니다.
이들 정보를 -p PREFIX --prefix=PREFIX
옵션으로 받아 prefix 통계 정보를 요약된 형태로 제공해 주면 좋을 것 같습니다.
PREFIX로 지정할 수 있는 값은 아래 3가지 중의 하나가 될 것입니다.
출력 format은
stats prefixes
와 stats detail dump
에서 해당 prefix 라인을 찾아 그 라인만 출력해 줄 수도 있는 데요..위의 more human readble한 format은
stats prefixes
와 stats detail demp
명령을 수행해서 어떤 결과가 나오는 지를 직접 확인해 보고,
이를 바탕으로, complete format을 결정해서 제안해 주면 좋겠습니다
@lynix94 이기열 책임님 어떤가요 ??
참고로, python client에 대해 ownership을 가지고 계신 분은 네이버의 이기열 책임님이며, 최종 review 해 주실 것입니다.. 따라서, 저와 이기열 책임님을 mention하여 comment해 주시면 됩니다..
@jhpark816 @lynix94
현재 prefix name이 주어지거나 'stats prefixes
의 결과를 보여주고, 합계를 보여주는 정도까지 구현했습니다. 아래 형식으로 출력이 되는 상태입니다. time값은 더할 수 없을 것 같아 total에서 제외했습니다.
그리고 존재하지 않는 prefix name을 입력하면 아무 출력도 나오지 않습니다.
일단은 여기에 stats detail dump
의 내용을 추가할 것입니다.
$ python3 arcus_cmd.py -a localhost:2181 -s test -p test
## Zookeeper address localhost:2181
[127.0.0.1:11211-(localhost)]
[127.0.0.1:11212-(localhost)]
[127.0.0.1:11211-(localhost)] stats prefixes
PREFIX test itm 11 kitm 6 litm 0 sitm 1 bitm 4 tsz 174904 ktsz 480 ltsz 0 stsz 528 btsz 173896 time 20160606081032
[127.0.0.1:11212-(localhost)] stats prefixes
PREFIX test itm 5 kitm 2 litm 1 sitm 0 bitm 2 tsz 70272 ktsz 168 ltsz 408 stsz 0 btsz 69696 time 20160606081032
[total]
PREFIX test itm 16 kitm 8 litm 1 sitm 1 bitm 6 tsz 245176 ktsz 648 ltsz 408 stsz 528 btsz 243592
그리고 세부적인 사항에 대해 질문이 있습니다.
<all>
prefix를 받으면 모든 prefix에 대해 각각 노드별로 출력하고 각각 total을 계산해서 보여주면 될까요?PREFIX test
get 10 hit 10 set 12 del 0 inc 2 dec 4
lcs 2 lis 12 lih 12 lds 0 ldh 0 lgs 12 lgh 12
scs 1 sis 6 sih 6 sds 0 sdh 0 sgs 1 sgh 1 ses 7 seh 7
bcs 4 bis 4000 bih 4000 bus 0 buh 0 bds 0 bdh 0 bps 0 bph 0
bms 0 bmh 0 bgs 6 bgh 5 bns 1 bnh 1
pfs 0 pfh 0 pgs 0 pgh 0
gps 0 gph 0 gas 0 sas 0
개발은 https://github.com/blukat29/arcus-python-client 에 fork해서 진행하고 있고 개발이 더 진행되면 한번에 pull request를 보낼 생각입니다.
@blukat29 수고가 많습니다.
<all>
인 경우도 동일한 형식으로 출력하면 됩니다.PREFIX test get 10 hit 10 set 12 del 0 inc 2 dec 4
lcs 2 lis 12 lih 12 lds 0 ldh 0 lgs 12 lgh 12
scs 1 sis 6 sih 6 sds 0 sdh 0 sgs 1 sgh 1 ses 7 seh 7
bcs 4 bis 4000 bih 4000 bus 0 buh 0 bds 0 bdh 0
bps 0 bph 0 bms 0 bmh 0 bgs 6 bgh 5 bns 1 bnh 1
pfs 0 pfh 0 pgs 0 pgh 0
gps 0 gph 0 gas 0 sas 0
PREFIX test1 itm 11 kitm 6 litm 0 sitm 1 bitm 4
tsz 174904 ktsz 480 ltsz 0 stsz 528 btsz 173896 time 20160606081032
PREFIX test2 itm 11 kitm 6 litm 0 sitm 1 bitm 4
tsz 174904 ktsz 480 ltsz 0 stsz 528 btsz 173896 time 20160606081032
PREFIX test3 itm 11 kitm 6 litm 0 sitm 1 bitm 4
tsz 174904 ktsz 480 ltsz 0 stsz 528 btsz 173896 time 20160606081032
PREFIX test1 get 10 hit 10 set 12 del 0 inc 2 dec 4
lcs 2 lis 12 lih 12 lds 0 ldh 0 lgs 12 lgh 12
scs 1 sis 6 sih 6 sds 0 sdh 0 sgs 1 sgh 1 ses 7 seh 7
bcs 4 bis 4000 bih 4000 bus 0 buh 0 bds 0 bdh 0
bps 0 bph 0 bms 0 bmh 0 bgs 6 bgh 5 bns 1 bnh 1
pfs 0 pfh 0 pgs 0 pgh 0
gps 0 gph 0 gas 0 sas 0
PREFIX test2 get 10 hit 10 set 12 del 0 inc 2 dec 4
lcs 2 lis 12 lih 12 lds 0 ldh 0 lgs 12 lgh 12
scs 1 sis 6 sih 6 sds 0 sdh 0 sgs 1 sgh 1 ses 7 seh 7
bcs 4 bis 4000 bih 4000 bus 0 buh 0 bds 0 bdh 0
bps 0 bph 0 bms 0 bmh 0 bgs 6 bgh 5 bns 1 bnh 1
pfs 0 pfh 0 pgs 0 pgh 0
gps 0 gph 0 gas 0 sas 0
PREFIX test3 get 10 hit 10 set 12 del 0 inc 2 dec 4
lcs 2 lis 12 lih 12 lds 0 ldh 0 lgs 12 lgh 12
scs 1 sis 6 sih 6 sds 0 sdh 0 sgs 1 sgh 1 ses 7 seh 7
bcs 4 bis 4000 bih 4000 bus 0 buh 0 bds 0 bdh 0
bps 0 bph 0 bms 0 bmh 0 bgs 6 bgh 5 bns 1 bnh 1
pfs 0 pfh 0 pgs 0 pgh 0
gps 0 gph 0 gas 0 sas 0
stats detail on
되어 있지 않는 상태에서 stats detail dump
는 empty 결과를 냅니다.
이 경우, empty 결과를 알 수 있도록 하면 좋겠습니다.@lynix94 어떤가요 ??
네, 이의 없습니다.
@lynix94 @jhpark816
@wjw0926 와 같이 작업하여 https://github.com/naver/arcus-python-client/pull/8 로 pull request 보냈습니다.
아래 기능을 가진 command-line tool을 개발한다.