문서번호 : 11-472969
Document Information
•
최초 작성일 : 2022.08.26
•
최종 수정일 : 2022.08.26
•
이 문서는 아래 버전을 기준으로 작성되었습니다.
◦
SinglestoreDB : 7.8
Goal
Data API 사용법 설명 및 간단한 성능 테스트 요약
Solution
Data API
•
HTTP connection 을 통해 SQL 문을 수행할 수 있도록 지원하는 API
•
SingleStoreDB 를 Serverless 아키텍처에 적용하여 Application 을 개발할 때 유용하게 사용 가능
•
Data API 로 전달되는 데이터 형식은 JSON 포맷
•
Managed Cloud Service 는 Default 로 https 형식으로 사용 가능
Data API 사용법
•
Data API URI
◦
protocol://hostname:port/api/version/endpoint
▪
protocol : HTTP 또는 HTTPS
▪
port : Data API 를 활성화 할 때 지정한 port
▪
version : v1 or v2, default 로 v2 사용
◦
Data API endpoint 종류
▪
/ping : Data API 를 사용 가능하면 pong 을 리턴
▪
/exec : CREATE DATABASE, INSERT, UPDATE, DELETE, CALL MPSQL 등 SQL 실행
▪
/query/rows : Table Row 데이터 리턴
▪
/query/tuples : Table Row 데이터와 Column Meata 데이터 리턴,
매뉴얼 상으로는 result set 이 많을 경우 /query/rows 보다 빠르다고 함
◦
Authentication
▪
Basic authentication 을 사용하며 Base-64 로 userid, password 를 인코딩하여 Header 에 명시하여 전달
예) Authorization: Basic ZGVtbzpBZnU0WGp6QjFucw==
Plain Text
복사
Data API 활성화
•
http_api 및 http_proxy_port (예제로 3307, 변경 가능) 설정 변경
◦
http 와 https 는 mutual exclusive 하므로 하나만 설정 가능
◦
https 는 추가적인 설정 필요
$ sdb-admin update-config --memsql-id <AggregatorID> --set-global --key http_proxy_port --value 3307
$ sdb-admin update-config --memsql-id <AggregatorID> --set-global --key "http_api" --value "ON"
Bash
복사
•
Aggregator 의 memsql.cnf 에 다음 2 줄 추가됨
http_api = ON
http_proxy_port = 3307
Plain Text
복사
•
restart proxy 명령어로 websocket proxy server 기동
◦
http_api, http_proxy_port 가 memsql.cnf 에 존재하면 Singlestore 기동 시 자동 수행됨
$ singlestore -p
singlestore> restart proxy;
SQL
복사
Data API Test
•
Data API Ping
$ curl http://localhost:3307/ping
pong
SQL
복사
•
Data API /query/rows
$ curl -s -u "root:Welcome1" -H "Content-Type: application/json" --data '{"sql": "SELECT * FROM emp where emp_no = (?)", "args": [1], "database": "jsdb"}' http://localhost:3307/api/v2/query/rows | jq .
{
"results": [
{
"rows": [
{
"emp_no": 1,
"birth_date": "1963-11-29",
"first_name": "Rosaly
"last_name": "Grabner",
"gender": "M",
"hire_date": "1990-02-16"
}
]
}
]
}
Bash
복사
K6
K6 개요
•
Grafana 에서 제공되는 Open Source 부하 테스트 툴
•
http request 를 terminal 에서 multi threading 을 이용하여 성능 측정 가능
•
NodeJS 나 다른 엔진 도움 없이 K6가 직접 Javascript 를 interpreting 하여 테스트 수행
K6 설치
•
기본 프로그램 설치
sudo yum install https://dl.k6.io/rpm/repo.rpm
sudo yum install --nogpgcheck k6
Shell
복사
•
SQL 테스트를 위한 Extension 설치
wget https://github.com/grafana/xk6/releases/download/v0.7.0/xk6_0.7.0_linux_amd64.tar.gz
tar -zxvf xk6_0.7.0_linux_amd64.tar.gz
./xk6 build --with github.com/grafana/xk6-sql
Shell
복사
K6 Test Script
K6 수행 예제
•
동시유저(vus) 10개, 20초간 지속 예제
$ ./k6 run -u 10 -d 20s s2api.js
/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io
execution: local
script: s2api.js
output: -
scenarios: (100.00%) 1 scenario, 10 max VUs, 50s max duration (incl. graceful stop):
* default: 10 looping VUs for 20s (gracefulStop: 30s)
running (20.0s), 00/10 VUs, 242305 complete and 0 interrupted iterations
default ✓ [======================================] 10 VUs 20s
data_received..................: 70 MB 3.5 MB/s
data_sent......................: 67 MB 3.3 MB/s
http_req_blocked...............: avg=1.78µs min=741ns med=1.56µs max=1.93ms p(90)=1.98µs p(95)=2.18µs
http_req_connecting............: avg=15ns min=0s med=0s max=449.61µs p(90)=0s p(95)=0s
http_req_duration..............: avg=747.21µs min=452.19µs med=695.35µs max=25.81ms p(90)=974.28µs p(95)=1.14ms
{ expected_response:true }...: avg=747.21µs min=452.19µs med=695.35µs max=25.81ms p(90)=974.28µs p(95)=1.14ms
http_req_failed................: 0.00% ✓ 0 ✗ 242305
http_req_receiving.............: avg=20.59µs min=6.7µs med=18.48µs max=5.87ms p(90)=27.73µs p(95)=31.91µs
http_req_sending...............: avg=10.6µs min=4.13µs med=9.29µs max=834.39µs p(90)=14.75µs p(95)=18.31µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=716.01µs min=425.36µs med=664.28µs max=25.68ms p(90)=940.44µs p(95)=1.1ms
http_reqs......................: 242305 12114.175153/s
iteration_duration.............: avg=819.32µs min=517.12µs med=767.47µs max=28.45ms p(90)=1.04ms p(95)=1.21ms
iterations.....................: 242305 12114.175153/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10
Bash
복사
Data API 성능 테스트 결과
테스트 환경
•
Oracle Cloud 에서 Aggregator 의 vcpu 및 동시 사용자를 각각 변경
•
Think time 없이 단순 index seek 조회 쿼리
결과 요약
•
동시 사용자 30 일 경우부터 초당 API 처리량이 더이상 크게 증가되지 않음
•
tcp 를 이용한 SQL 수행 속도가 http 를 이용한 Data API 보다 처리 속도가 느림
◦
K6 만의 테스트 방법적인 문제일 수 있으므로 http 가 더 빠르다고 공식화하면 안됨
•
Reference table 대상일 경우 Leaf Node 와의 nework round trip 제거로 30% 정도 처리량 증가
•
테스트 결과 로그
References
History
일자 | 작성자 | 비고 |
2022.08.26 | jsnoh | 최초작성 |