アリクラウドコンテナサービスネットワーク性能テスト
背景
テスト環境をmesosフレームワークからアリクラウドのコンテナサービスに徐々に移行しており,この過程で4つの異なるサービス間で相互にアクセスするモードのネットワーク性能をテストした.本論文では,この性能試験の方法,データ,結論を述べた.
テストターゲット
サービスコンテナ間のインタラクションには、次の4つの異なるアクセス方法があります.
docker link
dockerが提供するlink方式で、1つのコンテナで別のコンテナにアクセスできます.テストhostはapp-linkです.
hostname
サービスの編成時に、各サービスにhostnameを指定し、他のサービスではhostnameを使用して対応するサービスにアクセスできます.テストhostはappです.
サービス発見
コンテナサービスはHAProxyが実現した一連のサービス間HTTPアクセスと負荷均衡のメカニズムに基づいている.テストhostはappです.local.
SLB
従来のロード・バランシング・サービスには、HTTPとTCPの2つのリスニング・モードがあります.試験中のHTTP SLB hostは192.168.1.1.10、TCP SLB hostは192.168.1.40であった.
この4つのネットワークを介して、ターゲットマシン上のhttpサービスインタフェース/okにアクセスし、遅延(latency)とスループット(throughput)をテストします.
テストツール
apt-get install httping
apt-get install apache2-utils
遅延テスト:
httping -c100 -i 0.01 -g 'http://app-link/ok'
...
connected to 172.18.1.3:80 (121 bytes), seq=96 time=0.45 ms
connected to 172.18.1.3:80 (121 bytes), seq=97 time=0.46 ms
connected to 172.18.1.3:80 (121 bytes), seq=98 time=0.42 ms
connected to 172.18.1.3:80 (121 bytes), seq=99 time=1.63 ms
--- http://app-link/ok ping statistics ---
100 connects, 100 ok, 0.00% failed, time 1050ms
round-trip min/avg/max = 0.4/0.5/1.6 ms
httping -c100 -i 0.01 -g 'http://app/ok'
...
connected to 172.18.1.3:80 (121 bytes), seq=96 time=10.80 ms
connected to 172.18.1.3:80 (121 bytes), seq=97 time=0.43 ms
connected to 172.18.1.3:80 (121 bytes), seq=98 time=0.44 ms
connected to 172.18.1.3:80 (121 bytes), seq=99 time=0.46 ms
--- http://app/ok ping statistics ---
100 connects, 100 ok, 0.00% failed, time 1073ms
round-trip min/avg/max = 0.4/0.7/10.8 ms
httping -c100 -i 0.01 -g 'http://app.local/ok'
...
connected to 172.18.1.2:80 (219 bytes), seq=96 time=0.69 ms
connected to 172.18.1.2:80 (219 bytes), seq=97 time=0.67 ms
connected to 172.18.1.2:80 (219 bytes), seq=98 time=0.74 ms
connected to 172.18.1.2:80 (219 bytes), seq=99 time=0.65 ms
--- http://app.local/ok ping statistics ---
100 connects, 100 ok, 0.00% failed, time 1090ms
round-trip min/avg/max = 0.6/0.9/6.0 ms
httping -c100 -i 0.01 -g 'http://192.168.1.10/ok'
...
connected to 192.168.1.10:80 (140 bytes), seq=96 time=1.19 ms
connected to 192.168.1.10:80 (140 bytes), seq=97 time=1.08 ms
connected to 192.168.1.10:80 (140 bytes), seq=98 time=1.15 ms
connected to 192.168.1.10:80 (140 bytes), seq=99 time=1.30 ms
--- http://192.168.1.10/ok ping statistics ---
100 connects, 100 ok, 0.00% failed, time 1123ms
round-trip min/avg/max = 1.0/1.2/2.9 ms
httping -c100 -i 0.01 -g 'http://192.168.1.40/ok'
...
connected to 192.168.1.40:80 (121 bytes), seq=96 time=1.18 ms
connected to 192.168.1.40:80 (121 bytes), seq=97 time=1.25 ms
connected to 192.168.1.40:80 (121 bytes), seq=98 time=1.06 ms
connected to 192.168.1.40:80 (121 bytes), seq=99 time=1.34 ms
--- http://192.168.1.40/ok ping statistics ---
100 connects, 100 ok, 0.00% failed, time 1137ms
round-trip min/avg/max = 1.0/1.3/2.7 ms
テスト結果
HEAD要求を100回テストし、平均遅延は以下の表の通りである.
アクセス方法
遅延(ms)
docker link
0.5
hostname
0.7
サービス発見
0.9
HTTP SLB
1.2
TCP SLB
1.3
スループットテスト:
ab -lkc 10000 -n 10000 'http://app-link/ok'
Concurrency Level: 10000
Time taken for tests: 0.864 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10000
Total transferred: 2020000 bytes
HTML transferred: 610000 bytes
Requests per second: 11571.74 [#/sec](mean)
Time per request: 864.174 [ms](mean)
Time per request: 0.086 [ms](mean, across all concurrent requests)
Transfer rate: 2282.71 [Kbytes/sec] received
ab -lkc 10000 -n 10000 'http://app/ok'
Concurrency Level: 10000
Time taken for tests: 1.055 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10000
Total transferred: 2020000 bytes
HTML transferred: 610000 bytes
Requests per second: 9476.49 [#/sec](mean)
Time per request: 1055.243 [ms](mean)
Time per request: 0.106 [ms](mean, across all concurrent requests)
Transfer rate: 1869.39 [Kbytes/sec] received
ab -lkc 10000 -n 10000 'http://app.local/ok'
Concurrency Level: 10000
Time taken for tests: 4.276 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10000
Total transferred: 3000000 bytes
HTML transferred: 610000 bytes
Requests per second: 2338.60 [#/sec](mean)
Time per request: 4276.066 [ms](mean)
Time per request: 0.428 [ms](mean, across all concurrent requests)
Transfer rate: 685.14 [Kbytes/sec] received
ab -lkc 10000 -n 10000 'http://192.168.1.10/ok'
Concurrency Level: 10000
Time taken for tests: 6.308 seconds
Complete requests: 10000
Failed requests: 0
Non-2xx responses: 580
Keep-Alive requests: 10000
Total transferred: 2141800 bytes
HTML transferred: 732380 bytes
Requests per second: 1585.41 [#/sec](mean)
Time per request: 6307.517 [ms](mean)
Time per request: 0.631 [ms](mean, across all concurrent requests)
Transfer rate: 331.60 [Kbytes/sec] received
同時に10000個の同時要求があり、580個の要求SLB nginxが504個のエラーを返し、以下はresponseである.
504 Gateway Time-out
504 Gateway Time-out
The gateway did not receive a timely response from the upstream server or application.
WARNING: Response code not 2xx (504)
ab -lkc 10000 -n 10000 'http://192.168.1.40/ok'
Concurrency Level: 10000
Time taken for tests: 1.891 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10000
Total transferred: 2020000 bytes
HTML transferred: 610000 bytes
Requests per second: 5287.14 [#/sec](mean)
Time per request: 1891.383 [ms](mean)
Time per request: 0.189 [ms](mean, across all concurrent requests)
Transfer rate: 1042.97 [Kbytes/sec] received
テスト結果
コンカレント要求は10000回で、1秒あたりの処理要求数は以下の表の通りである.
アクセス方法
スループット(RPS)
docker link
11571.74
hostname
9476.49
サービス発見
2338.60
HTTP SLB
1585.41
TCP SLB
5287.14
結論:
質問:
docker linkとhostnameネットワークのパフォーマンスは最適ですが、負荷能力は不明です.テストではhostname方式が負荷能力を有することが分かったが,公式ヘルプドキュメントではhostnameアクセス方式が『負荷等化能力を持たないアクセス方式』に置かれ,『一定の負荷等化の役割を果たす』と記述されている.アリクラウドは負荷能力を強調していないことがわかります.生産環境で使用される場合、負荷均衡能力もかなり重要な指標である.
最後に、この2つの問題はアリ雲にさらに確認する必要があります.