2018年2月16日金曜日

ツイキャス新卒採用2019で遊んだ

https://saiyo2019.moi.st

内容はFizzBuzzチャレンジでした
websocketでリクエスト送受信してポイントを稼いでハイスコアを競うゲーム
ブロードキャスティングサービスはネットワークの超低遅延を要求されるので、そういうアレ

saiyo2019.moi.stをnslookupするとIPが210.152.23.110
自宅の回線はフレッツ/eo/KCN各1Gbpsの合計3Gbps引いてるがこちとら関西なのでレイテンシ的に論外

https://gyazo.com/c31c9d52b3d9e10354257e794d746e64

一番近いサーバをbgpviewで探す
https://bgpview.io/ip/210.152.23.110

IDCFとあったので、IDCFクラウドと思いましたが
https://gyazo.com/24447c012fd235d2977712142953c3a9

まったくスコア上がらず。。ping 3~4ms

IXを見ることにする

https://gyazo.com/a389d31c25aca38e0ee2b67ce763d130

BBIX Tokyoのバックボーンが太そうなのでそれをみる

https://bgpview.io/ix/89
AS17676 Softbank BB Corp.が 200~400Gbps
ソフトバンククラウドは一般ユーザが利用できないのでボツ(alibaba cloudはパスポート等本人確認書類要求してくるのでやめた)
AS15169 Google LLCが100Gbps
AS8075 Microsoft Corporation も100Gbps
AS16509 Amazon.com, Inc.は200Gbps ただ、Amazonは安いインスタンスはネットワーク絞ってるのでダメ

IDCFクラウド
[root@moist twicas-saiyo2019]# ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=1 ttl=57 time=4.66 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=2 ttl=57 time=4.78 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=3 ttl=57 time=4.80 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=4 ttl=57 time=4.82 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=5 ttl=57 time=4.90 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=6 ttl=57 time=4.72 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=7 ttl=57 time=4.75 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=8 ttl=57 time=4.82 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=9 ttl=57 time=4.87 ms
64 bytes from saiyo2019.moi.st (210.152.23.110): icmp_seq=10 ttl=57 time=4.77 ms

--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9017ms
rtt min/avg/max/mdev = 4.665/4.793/4.906/0.096 ms

Conohaが最速とのツイートあったので試す
[root@133-130-102-70 twicas-saiyo2019]# ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=1 ttl=57 time=1.54 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=2 ttl=57 time=1.56 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=3 ttl=57 time=1.58 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=4 ttl=57 time=1.55 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=5 ttl=57 time=1.62 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=6 ttl=57 time=1.76 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=7 ttl=57 time=1.47 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=8 ttl=57 time=1.56 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=9 ttl=57 time=1.56 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=10 ttl=57 time=1.52 ms

--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9016ms
rtt min/avg/max/mdev = 1.476/1.576/1.762/0.075 ms

Conoha速いな!

じゃあGMOパブリッククラウドは?

[root@moi ~]# ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=1 ttl=54 time=2.11 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=2 ttl=54 time=2.11 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=3 ttl=54 time=2.17 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=4 ttl=54 time=2.08 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=5 ttl=54 time=2.05 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=6 ttl=54 time=2.04 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=7 ttl=54 time=2.15 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=8 ttl=54 time=2.08 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=9 ttl=54 time=2.21 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=10 ttl=54 time=2.02 ms

--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9011ms
rtt min/avg/max/mdev = 2.024/2.104/2.216/0.084 ms

EC2はどう? EC2 m4.4xlarge
[ec2-user@ip-172-31-24-117 ~]$ ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from 210.152.23.110: icmp_seq=1 ttl=49 time=4.97 ms
64 bytes from 210.152.23.110: icmp_seq=2 ttl=49 time=4.89 ms
64 bytes from 210.152.23.110: icmp_seq=3 ttl=49 time=4.97 ms
64 bytes from 210.152.23.110: icmp_seq=4 ttl=49 time=4.97 ms
64 bytes from 210.152.23.110: icmp_seq=5 ttl=49 time=4.90 ms
64 bytes from 210.152.23.110: icmp_seq=6 ttl=49 time=4.95 ms
64 bytes from 210.152.23.110: icmp_seq=7 ttl=49 time=4.83 ms
64 bytes from 210.152.23.110: icmp_seq=8 ttl=49 time=4.96 ms
64 bytes from 210.152.23.110: icmp_seq=9 ttl=49 time=4.97 ms
64 bytes from 210.152.23.110: icmp_seq=10 ttl=49 time=4.95 ms

--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9011ms
rtt min/avg/max/mdev = 4.832/4.941/4.977/0.063 ms

Google Cloudはどう?
東京にリージョン3つあるので片っ端から試すasia-northeast1-a~c
まずはasia-northeast1-a
[admin@instance-1 ~]$ ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=1 ttl=54 time=1.49 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=2 ttl=54 time=1.28 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=3 ttl=54 time=1.29 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=4 ttl=54 time=1.20 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=5 ttl=54 time=1.34 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=6 ttl=54 time=1.30 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=7 ttl=54 time=1.22 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=8 ttl=54 time=1.31 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=9 ttl=54 time=1.35 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=10 ttl=54 time=1.32 ms
--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 1.200/1.314/1.499/0.089 ms
[admin@instance-1 ~]$

次にasia-northeast1-b

admin@instance-2:~$ ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=1 ttl=55 time=2.03 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=2 ttl=55 time=1.39 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=3 ttl=55 time=1.46 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=4 ttl=55 time=1.36 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=5 ttl=55 time=1.30 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=6 ttl=55 time=1.52 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=7 ttl=55 time=1.53 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=8 ttl=55 time=1.45 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=9 ttl=55 time=1.50 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=10 ttl=55 time=1.42 ms
--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9014ms
rtt min/avg/max/mdev = 1.309/1.502/2.033/0.189 ms

最後にasia-northeast1-c

admin@instance-3:~$ ping saiyo2019.moi.st -c 10
PING saiyo2019.moi.st (210.152.23.110) 56(84) bytes of data.
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=1 ttl=54 time=1.65 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=2 ttl=54 time=1.20 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=3 ttl=54 time=1.27 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=4 ttl=54 time=1.19 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=5 ttl=54 time=1.24 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=6 ttl=54 time=1.29 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=7 ttl=54 time=1.22 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=8 ttl=54 time=1.25 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=9 ttl=54 time=1.33 ms
64 bytes from 210.152.23.110 (210.152.23.110): icmp_seq=10 ttl=54 time=1.33 ms

--- saiyo2019.moi.st ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9014ms
rtt min/avg/max/mdev = 1.194/1.301/1.651/0.129 ms

答え:Google Cloud最強


コードは最初PHP+ライブラリTextalk/websocket-phpで書きました。
websocketはあんまり触ったことないので自力でリクエスト組み立てるの無理って感じなのでライブラリに頼りました。

CentOS7 → Debian9→ Ubuntu14.04 → FreeBSD11と色々試したが、当然ながら大幅なスコアアップは見込めませんでした
MTUとかもいじってもダメ。

PHP→Java→C++で言語変えてもダメ
(はじめてC++使った)

おまけ
https://gyazo.com/9649121bf93cc1db906124b198b0222e

HHVM(facebook hack lang)はうまく通信できなかった。

asia-northeast1-aでcentos7+php72cli+firewalld offにして実行。最終スコア742



2019卒じゃないけど、内定ほしい!


2018年2月10日土曜日

2018年2月5日月曜日

Twitterとフォローとフォロワーと定期的にバックアップするウェブサービス

ツイッターの凍結騒動が収まりつつありますが、その際に作成していたツイッターのフォローとフォロワーを定期的にバックアップするサービスを紹介しておきます。

Twitterフォロー・フォロワー定期バックアップサービス
https://ostrich.webzone.jp/

ログインすると無効にしない限り毎日フォローとフォロワーのIDをバックアップします。
また、凍結した場合ツイッター連携アプリ経由でログインできないのでログインせずともダウンロードできるようにしています。

デザインとかは面倒なので、そのへんは凝った作りにはしていません。すみません。管理画面は時代と逆行するようなデザイン・使い勝手です。
ツイッターのフォロー・フォロワーのバックアップしてくれるサービスは他にもあると思いますが、大量のフォロー・フォロワーに対応したものが1つもないため作成しました。
完全にバックアップに特化しているので前日と比べて何人増えたかとかは別のウェブサービスがあるのでそれを使ってください。

ツイッターAPIはログインしていない状態だとRate-Limitがログインしている状態よりも大幅に緩和されているため、ほとんど制限に引っかかることがありません。IPアドレスベースでの規制なので、万が一リクエスト制限に達した場合は別のIPアドレスに切り替えてリクエストするように組んであります。

フロントはphpですがバックエンドはjavaでクローリングのスレッドが動いてます。
そもそも数千万フォロー・フォロワーを持った利用者は極々稀ですが、そういうユーザも想定してサードパーティアプリケーションを作らねばならないと思います

speedtest.netのホストを一時中断

10ギガビットの普及に伴い、新たに10ギガビットネットワークの用意ができるまでホストをやめます (PING値でサーバが決定されてしまうので計測ユーザに迷惑なため) [root@localhost ~]# ifconfig enp2s0f0: flags=4163<...