アリクラウドコンテナサービスネットワーク性能テスト


背景


テスト環境を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)をテストします.

テストツール

  • httping:テスト遅延
  • ab(apache benchmarking tool):テストスループット
  • ubuntuでインストール:
      apt-get install httping
      apt-get install apache2-utils

    遅延テスト:

  • link:
  •   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
  • hostname
  •   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
  • HTTP SLB
  •   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
  • TCP SLB
  •   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

    スループットテスト:

  • link
  •   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
  • hostname
  •   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
  • HTTP SLB
  •   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)

  • TCP SLB
  •   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方式は次いで
  • である.
  • は同じHTTPモードのサービス発見とHTTP SLBであり、性能は最悪
  • である.
  • HTTP SLBの同時性能は望ましくないようで、10000個の要求は5.8%の要求が504 Gatewayエラー
  • を返した.

    質問:


    docker linkとhostnameネットワークのパフォーマンスは最適ですが、負荷能力は不明です.テストではhostname方式が負荷能力を有することが分かったが,公式ヘルプドキュメントではhostnameアクセス方式が『負荷等化能力を持たないアクセス方式』に置かれ,『一定の負荷等化の役割を果たす』と記述されている.アリクラウドは負荷能力を強調していないことがわかります.生産環境で使用される場合、負荷均衡能力もかなり重要な指標である.
    最後に、この2つの問題はアリ雲にさらに確認する必要があります.
  • linkとhostnameモードの負荷能力はいったいどうですか?
  • 負荷計測能力、HTTPモード、イントラネット使用の3つの要件について、推奨されるネットワークモードはありますか?