AWS IoT의 대기 시간을 측정해 보았습니다 (1)
1. nodejs 버전 SDK를 AmazonLinux에 도입
AmazonLinux 인스턴스 준비
ap-northeast-1에 t2.micro 인스턴스 만들기
nodebrew와 nodejs 도입
참고 : nodebrew에서 Node.js( io.js ) 관리
쉘$ curl -L git.io/nodebrew | perl - setup
.bashrc에 경로 추가
.bashrcexport PATH=$HOME/.nodebrew/current/bin:$PATH
쉘$ source ~/.bashrc
쉘$ nodebrew install-binary v0.12.7
AWS IoT 디바이스 sdk 배포
$ curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH
$ source ~/.bashrc
$ nodebrew install-binary v0.12.7
bash
$ sudo yum install gcc-c++
$ sudo yum install git
쉘
$ git clone https://github.com/aws/aws-iot-device-sdk-js.git
$ cd aws-iot-device-sdk-js
$ npm install mqtt
$ npm install blessed
$ npm install blessed-contrib
$ npm install minimist
인증서 배치
AWS IoT 콘솔에서 Thing을 생성하고 인증서 및 키 생성 및 배포
두 장치 정보는 각각 ~/certs1 아래와 ~/certs2 아래에 있습니다.
$ ls -l /home/ec2-user/certs1
合計 20
-rw------- 1 ec2-user ec2-user 1758 10月 18 10:59 aws-iot-rootCA.crt
-rw------- 1 ec2-user ec2-user 1220 10月 18 10:59 certificate.pem.crt
-rw------- 1 ec2-user ec2-user 1675 10月 18 10:59 private.pem.key
-rw------- 1 ec2-user ec2-user 451 10月 18 10:59 public.pem.key
-rw------- 1 ec2-user ec2-user 1758 10月 18 10:59 root-CA.crt
2. 샘플 동작 확인
다음 샘플에서는 두 디바이스 간에 AWS IoT를 통한 Publish/Subscribe를 수행합니다.
$ cd ~/aws-iot-device-sdk-js/examples/
$ node device-example.js -f ~/certs1 -g ap-northeast-1 -t 1
connect
message topic_1 {"count":1,"pub_time":"13:27:16.751"}
message topic_1 {"count":2,"pub_time":"13:27:20.753"}
message topic_1 {"count":3,"pub_time":"13:27:24.755"}
$ cd ~/aws-iot-device-sdk-js/examples/
$ node device-example.js -f ~/certs2 -g ap-northeast-1 -t 2
connect
message topic_2 {"count":1,"pub_time":"13:28:34.259"}
message topic_2 {"count":2,"pub_time":"13:28:38.260"}
message topic_2 {"count":3,"pub_time":"13:28:42.261"}
3. Publish/Subscribe 대기 시간을 측정해 봅니다.
대기 시간 측정을 위해 샘플 수정
diff-device-test2.js$ diff device-example.js device-test2.js
23a24,34
> function time_text(){
> d = new Date();
> t = ("00" + (d.getMonth()+1)).substr(-2) + "/";
> t += ("00" + (d.getDate())).substr(-2) + " ";
> t += ("00" + d.getHours()).substr(-2) + ":";
> t += ("00" + d.getMinutes()).substr(-2) + ":";
> t += ("00" + d.getSeconds()).substr(-2) + ".";
> t += ("000" + d.getMilliseconds()).substr(-3);
> return t
> }
>
53c64
< console.log('connect');
---
> console.log(time_text() + ' connect');
64c75
< console.log( 'substituting '+ minimumDelay + 'ms delay for ' + args.delay + 'ms...' );
---
> console.log( time_text() + ' substituting '+ minimumDelay + 'ms delay for ' + args.delay + 'ms...' );
72c83
< mode_1_process: count }));
---
> count: count, pub_time: time_text() }));
77c88
< mode_2_process: count }));
---
> count: count, pub_time: time_text() }));
83c94
< console.log('close');
---
> console.log(time_text() + ' close');
89c100
< console.log('reconnect');
---
> console.log(time_text() + ' reconnect');
93c104
< console.log('offline');
---
> console.log(time_text() + ' offline');
99c110
< console.log('error', error);
---
> console.log(time_text() + ' error', error);
105c116,117
< console.log('message', topic, payload.toString());
---
> msg = JSON.parse(payload.toString());
> console.log(msg.pub_time, time_text(), topic, msg.count);
실행 예
$ node device-test2.js -f ~/certs1 -g ap-northeast-1 -t 1
connect
10/18 12:30:26.841 10/18 12:30:26.882 topic_1 1
10/18 12:30:30.844 10/18 12:30:30.884 topic_1 2
10/18 12:30:34.847 10/18 12:30:34.884 topic_1 3
:
$ node device-test2.js -f ~/certs2 -g ap-northeast-1 -t 2
connect
10/18 12:30:24.730 10/18 12:30:24.766 topic_2 1
10/18 12:30:28.733 10/18 12:30:28.761 topic_2 2
10/18 12:30:32.736 10/18 12:30:32.765 topic_2 3
Publish/Subscribe의 평균 대기 시간은 22ms입니다. 빠르다!
$ diff device-example.js device-test2.js
23a24,34
> function time_text(){
> d = new Date();
> t = ("00" + (d.getMonth()+1)).substr(-2) + "/";
> t += ("00" + (d.getDate())).substr(-2) + " ";
> t += ("00" + d.getHours()).substr(-2) + ":";
> t += ("00" + d.getMinutes()).substr(-2) + ":";
> t += ("00" + d.getSeconds()).substr(-2) + ".";
> t += ("000" + d.getMilliseconds()).substr(-3);
> return t
> }
>
53c64
< console.log('connect');
---
> console.log(time_text() + ' connect');
64c75
< console.log( 'substituting '+ minimumDelay + 'ms delay for ' + args.delay + 'ms...' );
---
> console.log( time_text() + ' substituting '+ minimumDelay + 'ms delay for ' + args.delay + 'ms...' );
72c83
< mode_1_process: count }));
---
> count: count, pub_time: time_text() }));
77c88
< mode_2_process: count }));
---
> count: count, pub_time: time_text() }));
83c94
< console.log('close');
---
> console.log(time_text() + ' close');
89c100
< console.log('reconnect');
---
> console.log(time_text() + ' reconnect');
93c104
< console.log('offline');
---
> console.log(time_text() + ' offline');
99c110
< console.log('error', error);
---
> console.log(time_text() + ' error', error);
105c116,117
< console.log('message', topic, payload.toString());
---
> msg = JSON.parse(payload.toString());
> console.log(msg.pub_time, time_text(), topic, msg.count);
$ node device-test2.js -f ~/certs1 -g ap-northeast-1 -t 1
connect
10/18 12:30:26.841 10/18 12:30:26.882 topic_1 1
10/18 12:30:30.844 10/18 12:30:30.884 topic_1 2
10/18 12:30:34.847 10/18 12:30:34.884 topic_1 3
:
$ node device-test2.js -f ~/certs2 -g ap-northeast-1 -t 2
connect
10/18 12:30:24.730 10/18 12:30:24.766 topic_2 1
10/18 12:30:28.733 10/18 12:30:28.761 topic_2 2
10/18 12:30:32.736 10/18 12:30:32.765 topic_2 3
실행 간격 4초
실행 횟수 200 x 2
대기 시간(Sec)
평균
0.022
90% 타일
0.032
그 후의 장기간의 계측으로, 현저한 변동이 보였으므로, 이하의 기사를 투고했습니다.
속보:AWS IoT의 레이턴시를 측정해 보았다(2)
Reference
이 문제에 관하여(AWS IoT의 대기 시간을 측정해 보았습니다 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/okapin/items/107f76de6643a03b9ad3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)