ISUCON7本戦惜敗記(学生枠)

Nov 26, 2017 - 1 minutes
問題 リアルタイム協力クッキークリッカー風味ゲーム Chair Constructer Online roomと呼ばれる概念があり、協力してひたすら椅子を生産する部屋を作れる。 roomに入るとWebSocketでリアルタイム通信が発生する。 このゲームの処理を、4台(いずれもCPU 2Core 2.3GHz, MEM 2GB)のサーバーで捌かなければならない。 回線に関しては、参加者がアクセスするグローバル系統、サーバー間の通信とベンチマーカーの通信が流れるローカル系統がある。 それぞれの系統は同じスイッチに収容され、各々帯域制限があるので、後々それも問題になったであろうが、そこまでパフォーマンスが上がらなかった。 問題の詳細に関しては後々公開されるであろうイメージを参照されたし。 結果 学生中4位、12位(kstm) 振り返り 構成把握、ユーザの振る舞いの想定が非常に甘かった。 特にWebSocketの中身。メッセージの分布なり統計なりきちっと出せていればroom毎の分散はしなかった可能性がある。 ところが、かなり早い段階でWebSocketの負荷分散単位をroom単位と決めてしまった。 メリットとしては、roomに関する情報をサーバー間で同期性、一貫性を担保する必要がないところ。 デメリットは、1台のサーバーで支えられる以上の負荷がroomにかかっていた場合、それ以上捌けないところ。 セッション数を見たところ、 この分散方式だとセッションが集中するサーバーとそうでないサーバーが出てしまった。 数字としては、 ss -to state established あたりで監視していたが、4台中2台が暇な状態であった。 一番混み合っているサーバは90〜100セッションを捌いていたが、暇なサーバに至っては、10セッションに満たない。 アプリケーションが負荷を十分に発生できなかったという話もあるが、 私は、2年前のISUCONから人間タスクランナと、ネットワーク、インフラ担当なので、 アプリケーションのパフォーマンスが上がらなかった原因などの解説はチームメイトに譲ることにする。 参照URL ISUCON7本戦で惜敗してきた - Goryudyuma’s blog Read more ...

自宅バックアップ回線を引いた話

Nov 19, 2017 - 2 minutes
問題 大学から自宅が地味に遠い(チャリで本気で飛ばして7分) 何らかの原因で自宅ルータの設定ミスした時、帰るのダルい 解決手法 契約しているMVNOのSIMを追加発行、docomo L-03Dに刺してバックアップ回線とする。 当該回線はCGN配下なのでグローバル疎通を取れない。 GoogleCloudPlatformのComputeEngineまでVPNを張り、そこで固定IPをもらう。 NGN系統が落ちた時は、GoogleCloudPlatformのインスタンスにSoftEtherVPN張って復旧。 モバイル系統が落ちた時は、NGN系統使っていつもどおり復旧。 あーんしん! 設定例 GCP側 Compute Engineで最小インスタンスを立てる VPCネットワークの外部IPアドレスで固定IPをもらう ファイアウォールルールでallow-ipsecルールを作成 udp:500,1701,4500 を開放 SoftEther入れて動かす vpncmd使ってアカウント追加したりEtherIP周りのコマンドでつなげるようにする (gcloudコマンドに慣れていないのは内緒) vpncmd例 vpncmd /server GCP\_ADDR > Hub DEFAULT > AccountCreate > AccountPasswordSet > IPsecEnable > EtherIPClientAdd ここらのコマンドでアカウント作成から、PSKとかikeのlocal nameとかが全部設定できる。 RTX810側 モバイル設定の追加 APNととかauth mynameとかはMVNOの設定とかに書いてあるのでそこを参考に設定。 + ip wan1 address dhcp + wan1 bind usb1 + wan1 always-on on + wan1 auth myname XXXX@XXXX.tld XXXX + wan1 auto connect on + wan1 disconnect time off + wan1 access-point name XXXX. Read more ...

onedrivedのセットアップ

Nov 7, 2017 - 1 minutes
要求 LinuxでOneDrive使いたい。既存の実装は複数あるが、有名なものとしてはonedrivedがある。 こいつがリンク切れしてるとかいう人もいるけど、ちゃんと生きているし、インタラクティブな設定の出来も非常に良いので利用する 前提条件 gcc python3-dev libssl-dev inotify-tools python3-dbus / libdbus-glib1-dev 手順 $ sudo apt install build-essential python3-dev libssl-dev inotify-tools python3-dbus libdbus-glib-1-dev まずこれを実行して前提条件を満たす $ pip3 install --user git+https://github.com/xybu/onedrived-dev.git 作者のGithubからもらってくる $ pip3 install keyrings.alt このまま利用すると、アカウント追加時に以下のようなキーリングに関する警告が出てコケるので、keyrings.altパッケージを入れて対処しておく Failed to save account: No recommended backend was available. Install the keyrings.alt package if you want to use the non-recommended backends. See README.rst for details.. $ which ngrok デフォルトでngrokに依存しているので、公式へ貰いに行った後、 PATHを通すか起動時に$NGROKにngrok本体までのパスを渡すこと ngrokに関しては参考URLで $ onedrived-pref account add ここで出たアドレスに飛んで、出たアドレスを貼るとログイン完了 Successfully added account for XXXXXXX(XXX@XXXX. Read more ...