中国(Alibaba Cloud)と日本(AWS)間の遅延を計測してみた

中国にはグレートファイアーウォール（＝金盾）があるため、地理的な距離以上に中国外とのインターネット通信が遅いらしい。どの程度遅いのか、AWSとAlibaba Cloudで検証してみた。

## 先に結論

たしかに、距離が倍以上遠いシンガポールよりも、中国（上海）の方がsshとhttpの両方で遅いという結果になった。日本のサービスを中国展開する場合は、中国内のサーバーを利用しないとだいぶつらそう。

| from | to | ssh(max) | http(avg) | 都内からの距離(昇順) |
|---|---|---|---|---|
| 都内 | AWS 東京リージョン | 250ms | 22ms| 0km？ |
| 都内 | Alibaba Cloud 上海リージョン | 4400ms | 815ms| 1756km? |
| 都内 | AWS 中国（寧夏）リージョン | 計測できず | 計測できず | 2986km? |
| 都内 | AWS シンガポールリージョン | 1040ms | 156ms | 5311km? |

AWS 中国(寧夏)リージョンについては、すぐに使うことができず計測を断念。

**※それぞれの数値は目安程度にお考えください。**

### その他、気になったけど今回は計測していない点

- 暗号化がある場合とない場合で速度に顕著な差が出るとの説あり
    - httpとhttpsで試せば分かるかもしれない。今回は挑戦せず
- アメリカ西海岸の方が日本よりも早くなるらしい
    - 今回は挑戦せず
- 中国内でサービス展開するにはソースコードの開示が必要？
    - 実際は対象製品に制限があるらしいが、対岸の火事というほど縁のない話ではない模様

### なぜ中国内から外へのアクセスも計測しなかったのか

単に面倒だったからです…！

### Alibaba Cloudとは

中国におけるAWSのようなサービス。各サービス名はAWSと非常に似ており（けど少し違う）とてもややこしい。他には、Tencent Cloudというサービスもある模様。

## 計測に使ったコマンドなど

OSは、Aliyun LinuxというAmazon LinuxのAlibabaバージョンのようなものを利用しました。Redhat系のようです。

sshの場合

```sh
for ((i=0; i<10; i++))
  do /usr/bin/time ssh server_name "echo 'hello' >/dev/null"
done
```

httpの場合

計測には、Nginxのデフォルトページを使いました。

```sh
ab -n 10 -c 1 [URL] # 1並列, 10リクエスト
```

## 都内からAWS 東京リージョンへのアクセス

比較対象として、まずは都内の自宅からAWS 東京リージョンへのアクセスを計測してみる。同じ地域へのアクセスなので非常に速いはず。

- from
    - 都内
- to
    - AWS Asia Pacific (Tokyo)

### sshの場合

1回のssh接続とコマンド実行で220-250msほどの時間がかかっている。

```text
$ for ((i=0 ; i<10 ; i++)); do /usr/bin/time ssh tokyo_server "echo 'hello' >/dev/null"; done

        0.23 real         0.02 user         0.00 sys
        0.23 real         0.02 user         0.00 sys
        0.24 real         0.02 user         0.00 sys
        0.23 real         0.02 user         0.00 sys
        0.23 real         0.02 user         0.00 sys
        0.24 real         0.02 user         0.00 sys
        0.25 real         0.02 user         0.00 sys
        0.22 real         0.02 user         0.00 sys
        0.22 real         0.02 user         0.00 sys
        0.23 real         0.02 user         0.00 sys
```

### httpの場合

22ms/reqくらいの速度が出ている。

```text
$ ab -n 10 -c 1 http://tokyo_server/

Concurrency Level:      1
Time taken for tests:   0.228 seconds
Complete requests:      10
Failed requests:        0
Total transferred:      40040 bytes
HTML transferred:       37700 bytes
Requests per second:    43.82 [#/sec] (mean)
Time per request:       22.823 [ms] (mean)
Time per request:       22.823 [ms] (mean, across all concurrent requests)
Transfer rate:          171.32 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        9   11   1.9     11      14
Processing:    10   12   1.8     12      14
Waiting:        9   12   1.7     11      14
Total:         19   23   3.3     22      28
```

## 日本の自宅からAlibaba Cloud 上海リージョンへのアクセス

日本と中国(上海)は地理的にシンガポールよりも近いが、金盾があるためシンガポールよりも遅くなる見込み。

- from
    - 都内
- to
    - Alibaba Cloud China East 2 (Shanghai)


### sshの場合

1回のssh接続で3秒以上の時間がかかっている。サーバーにログインしてみると、タイムラグがありすぎてかなりつらい状況。

```text
$ for ((i=0; i<10; i++)); do /usr/bin/time ssh shanghai_server "echo 'hello' >/dev/null"; done

        4.35 real         0.02 user         0.00 sys
        4.40 real         0.02 user         0.00 sys
        3.47 real         0.02 user         0.00 sys
        3.47 real         0.02 user         0.00 sys
        3.27 real         0.02 user         0.00 sys
        3.78 real         0.02 user         0.00 sys
        3.58 real         0.02 user         0.00 sys
        3.47 real         0.02 user         0.00 sys
        3.99 real         0.02 user         0.00 sys
        3.37 real         0.02 user         0.00 sys
```



### httpの場合

815ms/reqくらいの速度が出ている。東京リージョンに対して同じことをした場合に比べてとても遅い。サーバーのデフォルトページを表示するだけでこの速度だと、リアルタイム性を求められるサービスはだいぶ厳しそう。

**※中国内で80番ポートの開いたWebサーバーを立てるには許可がいるため、適当なポートで実験しています。**

```
$ ab -n 10 -c 1 http://shanghai_server:34529/

Concurrency Level:      1
Time taken for tests:   8.152 seconds
Complete requests:      10
Failed requests:        0
Non-2xx responses:      10
Total transferred:      5530 bytes
HTML transferred:       2840 bytes
Requests per second:    1.23 [#/sec] (mean)
Time per request:       815.224 [ms] (mean)
Time per request:       815.224 [ms] (mean, across all concurrent requests)
Transfer rate:          0.66 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      249  297  21.0    307     308
Processing:   307  518 645.9    308    2356
Waiting:      307  518 645.9    307    2356
Total:        574  815 649.2    614    2662
```

## 都内からAWS シンガポールリージョンへのアクセス

日本からの距離が上海の倍以上遠いため、距離の差が速度にそのまま反映されるのなら、上海よりもだいぶ遅くなるはず。しかし実際は上海よりもだいぶ速い結果となった。

- from
    - 都内
- to
    - AWS Asia Pacific (Singapore)

### sshの場合

1回のssh接続とコマンド実行で940-1040msほどの時間がかかっている。

```
for ((i=0 ; i<10 ; i++)); do /usr/bin/time ssh singapore_server "echo 'hello' >/dev/null"; done

        0.95 real         0.02 user         0.00 sys
        0.96 real         0.02 user         0.00 sys
        0.96 real         0.02 user         0.00 sys
        0.95 real         0.02 user         0.00 sys
        1.04 real         0.02 user         0.00 sys
        1.00 real         0.02 user         0.00 sys
        1.01 real         0.02 user         0.00 sys
        1.02 real         0.02 user         0.00 sys
        0.94 real         0.02 user         0.00 sys
        1.00 real         0.02 user         0.00 sys
```

### httpの場合

156ms/reqくらいの速度が出ている。

```
$ ab -n 10 -c 1 http://singapore_server/

Concurrency Level:      1
Time taken for tests:   1.564 seconds
Complete requests:      10
Failed requests:        0
Total transferred:      40040 bytes
HTML transferred:       37700 bytes
Requests per second:    6.40 [#/sec] (mean)
Time per request:       156.364 [ms] (mean)
Time per request:       156.364 [ms] (mean, across all concurrent requests)
Transfer rate:          25.01 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       73   78   5.3     76      88
Processing:    73   79   5.4     78      88
Waiting:       73   79   5.4     78      88
Total:        147  156   9.2    157     173
```