Search
Duplicate

Data API

문서번호 : 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% ✓ 0242305 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% 정도 처리량 증가
테스트 결과 로그
k6 test.log
83.0KB

References

Data API
K6

History

일자
작성자
비고
2022.08.26
jsnoh
최초작성