ISUCON8 予選敗退した #isucon

今年も ISUCON に出場した。

去年と同じチーム(ウデムシマニア) で出場できたので、今年は事前の練習などはせず、ぶっつけ本番で予選となった。 ISUCONを初期からみていた勢としては、どっかで観たことあるなあと感じる予選の問題だった (ISUCON2のアンサーだった模様)

チーム内の役割は去年と同様に、アプリ改善はチームメンバーに任せつつインフラ周りや db 周りをみた。 自分がやった内容としては下記な感じ

  • ruby 実装に変更
  • db を別インスタンスへ移動
  • mysql の slow query の抽出
  • reservations テーブルの非正規化
    • 初期データの調整
  • /etc/my.conf.d/server.conf の変更
  • redis 投入
  • 細かいクエリの削減 (投入できず)

初手で h2o じゃんとなってしまい、、ログ収集の手をそうそうに停めてしまったのが、今から考えると、それがベンチの分析がうまくできなかった要因だった。。 時間があるタイミングで、手に馴染んでる nginx などに入れ替えるべきだった。

去年は、途中でブレークスルーが起きてスコアがバキッと上がるポイントがあったが、 今年は、ずっとブレークスルーが起きず、スコアが停滞し続けてしまい、最後の1.5時間ぐらいで駆け込みでスコアが少し伸びただけであった。。。

get_events / get_event の処理が改善できず... ベストで 4,258 で 最後は 3,120 で終了で予選敗退となった...

おまけ

オフィスで3人で作業していたら、急にオフィスのドアが開いて、忘れ物を取りに来た同僚に写真を撮ってもらった

https://www.instagram.com/p/Bnyy-2shG9C/ ISUCON

おわり

今年も、力及ばず予選敗退になってしまった。。。来年こそは予選突破したい! 運営の皆様、ありがとうございました!

isucon.net

builderscon 2018 tokyo に行ってきた #builderscon

今年も Discover something new! ということで、前夜祭から行ってきた。

# 前夜祭

  • やっぱり闇の話はすごい...
  • ピカピカ光るなにかほしい!
  • ロボットボールって作れるんだ..!

# NAFUDA
https://www.instagram.com/p/BnY49cVh2kK/
とりいそぎ設定した #builderscon

# 1日目

  • envoy 便利そうだなあ
  • 謎ガジェットの原価...

# 2日目

  • Excelまじやばい
  • Excel便利すぎる...
  • 会社の同僚の purintai の登壇を見守りつつ楽しんだ

# おまけ
同僚と記念撮影した
https://www.instagram.com/p/BndQA6kBCyP/
builderscon.io#builderscon twitter/instagram:@hdeinc

# まとめ

  • 今年は、勤務先がスポンサーしたこともあって、同僚とワイワイ過ごせた
  • 失敗とか闇とかの話はぐっとくるものがある
  • NAFUDAハックするぞ!
  • 登壇されたみなさま、運営チームのみなさま、ありがとうございました!

builderscon.io

ISUCON7 予選敗退した #isucon

今年も ISUCON の予選に挑戦した。
また転職したので、社内でメン募を行って、エントリした。
チーム名は ウデムシマニア。
今回は他の2人が初参戦だったため、9月末の土曜日に会社に集まって事前練習を一度行った。

予選の内容は、isubata なるチャットサービスを複数台構成で最適化するものだった。
メンバーの役割分担は、SmartHRのテックブログに書いてある感じで作業をした。

ログをプロファイルしたり、ベンチマークのログから、画像の配信がネックであることが読み取れたので、画像を MySQLから取り出して、
各サーバにファイルとしておいて nginx でserve してということをしたりして、スコアはそこそこ伸びたものの、画像を304で返すことができずに終了してまった。
画像をnginx で返すことはできていたものの、初期のファイルの書き出しを /initilize で行っていたため、各サーバのファイルのtimestampがバラバラかつ、
ベンチマークがアップロードするファイルを、各サーバにscp する際も timestamp のコピーを忘れたので、cacheが全く効いていなかった...

複数台構成にした際に、画像を一つの サーバから配信する方法というのが、 実務ではS3に頼り切ってるため、全く手が出せなかったのも大きかった。
(goofys で S3 mountしちゃうとか考えたけど、それは、明らかにレギュレーション違反だったので、、、)
NFSは遅いしそれ以外でというのが全く思い浮かばず、、
予選突破された方のブログを読むと、nginx でやったり、WebDAVでやったり、 varnish でやったりと、やり方はいくらでもあるようだったので、明らかに実力不足だった。

あと、puma を unixsocket で 起動したものの、 nginx 側の設定がうまく行かず、結局 port を listen する方式のままだったのが悔やまれる。。

また、ベンチマークの結果のログメッセージをうまく読み取れておらず*1、それに引きづられてしまって、時間を使ってしまった。

こまかな作業ログは、こちら GitHub - meganemura/isucon7
ただし、nginx の設定をrepository に入れ忘れてる。。


スコアのログ

time score
2017-10-22T13:07:23 3971
2017-10-22T13:13:14 2879
2017-10-22T13:21:50 3965
2017-10-22T14:51:32 5837
2017-10-22T15:23:30 5619
2017-10-22T15:37:54 5843
2017-10-22T15:45:28 6068
2017-10-22T15:47:19 3948
2017-10-22T15:52:07 6081
2017-10-22T15:59:50 10666
2017-10-22T16:11:26 18030
2017-10-22T16:14:56 13780
2017-10-22T16:36:34 22387
2017-10-22T16:43:15 22635
2017-10-22T16:46:38 23097
2017-10-22T16:52:13 24015
2017-10-22T17:02:05 23295
2017-10-22T17:10:27 25863
2017-10-22T17:11:39 29664
2017-10-22T17:21:13 28363
2017-10-22T17:25:18 26061
2017-10-22T17:35:08 40704
2017-10-22T17:50:36 39790
2017-10-22T17:53:05 32632
2017-10-22T18:02:46 31570
2017-10-22T18:04:44 34949
2017-10-22T18:08:33 31768
2017-10-22T18:10:40 35023
2017-10-22T18:12:13 33783
2017-10-22T18:17:32 18398
2017-10-22T18:25:05 23806
2017-10-22T18:30:03 20030
2017-10-22T18:34:14 37193
2017-10-22T18:37:00 36867
2017-10-22T18:41:14 30252
2017-10-22T19:05:42 33042
2017-10-22T19:11:29 35268
2017-10-22T19:14:03 33025
2017-10-22T19:23:54 36749
2017-10-22T19:26:25 41020
2017-10-22T19:31:08 38828
2017-10-22T19:37:23 40640
2017-10-22T19:47:06 34930
2017-10-22T19:51:07 41707
2017-10-22T19:52:53 54367
2017-10-22T19:55:38 45560
2017-10-22T20:03:02 52380
2017-10-22T20:09:49 49159
2017-10-22T20:15:11 47085
2017-10-22T20:17:06 36081
2017-10-22T20:18:40 39018
2017-10-22T20:21:15 52990
2017-10-22T20:23:55 41478
2017-10-22T20:25:18 44206
2017-10-22T20:32:40 45805
2017-10-22T20:38:38 55714
2017-10-22T20:42:23 39386
2017-10-22T20:43:40 45687
2017-10-22T20:47:03 42989
2017-10-22T20:48:23 47609
2017-10-22T20:49:36 39142
2017-10-22T20:51:03 43979
2017-10-22T20:55:37 37914
2017-10-22T20:58:21 41095

f:id:tknzk:20171023204340p:plain

終結


こんな感じでベストスコアとしては、 55714 となりました。
ただ、再起動時に redis が起動してなかった模様で、予選結果としては、 fail ということが最終結果でした。。。

余談

予選中にオフィスの扉が開いたと思ったら、社長がやってきた。

予選のスコアがいまいち伸びておらず、社長の相手を無下にしていたら、寂しそうに蒙古タンメン中本に行くと言って去っていきました...

おわり

今年も、力及ばず予選敗退になってしまったけど、チームメンバからは、絶対来年も出たいという気持ちを得られたので、次は予選突破したい!
予選で複数台構成の問題をつくったり、そもそものサーバのセットアップなど、運営の皆様、ありがとうございました!


isucon.net

*1:当日レギュレーションの読み込み不足

builderscon tokyo 2017 に行ってきた #builderscon

Discover something new! ということで、前夜祭から行ってきた。

前夜祭

前夜祭の技術撤退スペシャルは、当時の思い出も蘇って「わかる」「ぐえええ」などという気持ちでて、大変良かった。
表には出ない話を聞けて本当によかった。登壇者の皆様ありがとうございました。

初日

  • Electron でデスクトップアプリを作りたい気持ちが高まった
  • Data is 神
  • 1Tbps の DDos
  • k8s はやっぱり実際につかってみないとわからないので、使っていく
  • QRコードが分割できることをしれた
  • しゃもじ大喜利すごい

2日目

  • PHP 便利!?
  • サーバーサイドKotlinは Javaで実装されている APIサーバに導入というのはやりやすそう
  • CodeBuildの使い所はありそうな感じかなあ
  • 物理製品の生産は大変。。keyboardio 欲しくなった
  • HHVM + Hack is 力

その他

  • 帰宅後、妻になんかよくわかってなかったけど、夫にとってのフェスだったんだねと言われた
  • バックとTシャツが何故か4セット手元にあった
  • バックのQRコードの謎をといた

まとめ

  • 知らなかったこをしれたし、高まったので、やっていく!
  • 次回は Proposal出したい!
  • 登壇されたみなさま、運営チームのみなさま、ありがとうございました!

builderscon.io

builderscon tokyo 2016に参加した #builderscon

チケットが3hで売り切れたbuilderscon tokyo 2016 に行ってきた。
会場がredbullさまということで飲み物の持ち込み禁止でfree redbullだった。

f:id:tknzk:20161203174233j:plain

個別の講演内容は割愛して、感想を箇条書きでかいてみる。

  • 生のmattnさん
  • windowsつらそう
  • go便利
  • vimつよい
  • 工場の生産管理を自動化するの楽しそう
  • automatic smile cameraいい
  • 子供の成長はあっというま
  • 親バカハックとてもいい
  • ゲームAIすごい
  • プレゼンの濃度がこすぎた
  • docker swarmつらそう
  • code自動生成はツラミからの開放になるのか
  • k8s時間とって触ってみる
  • FPGAがどんなものかを理解するところからはじめる
  • KHHH問題

講演がいろんなレイヤーの物があってとても刺激になった
次回はもっと規模が大きくなるとのことなので、参加したい!

運営の皆様、登壇の皆様、ありがとうございました!!

builderscon.io

2017.tokyo.builderscon.io

ISUCON6の予選にでて惨敗だった #isucon

今年も、ISUCONに挑戦した。チームは、社内のバックエンドチームの新卒2年目の二人とチームを組んで、予選に挑んだ。チーム名はファッションモンスター。
ざっくり、やることの分担としては、自分がしたまわりをやって、二人がアプリを改善していくということで進めていった。

予選の内容としては、マイクロサービス化されたwikiシステムで、はてなスター的なスター機能をもつものと、投稿のSPAM判定を行うブラックボックスなものの3つを上手く最適化させる必要があるものだった。

rubyの初期スコアが0点で、本当にゼロからのスタートで進めた。
方針としては、キャッシュできるところをキャッシュしまくっていこうということで、もろもろredisに乗せていったが、
結果的には、BESTでも6200点ぐらいしかでず、惨敗だった。
途中、gitがconflictしてしまって、雑にディレクトリごと切り替えてしまったせいで、サーバでgit pullしてるのに、意図しないエラーがでてるという状況に陥ってしまった*1
それを、切り戻すなどして時間をくってしまったり、unicornのログを最初出していないせいで、バグ取りが全くはかどらなかったりと、落ち着けばなんでもないことが、時間に焦ってしまってうまくできないなどあった。

敗因としては、本当の意味でのボトルネックを見つけきることができず、手持ちでやれることをミクロでやってしまったのが敗因だった。
手持ちの武器がcacheすればいいんでしょという感じで進めてしまったのも良くなかった。
twitterでの感想をよんでるかぎり、教養が足りず、そもそも戦えてなかったという感じだった..

あと、10時になって、さあスタートというタイミングで、業務のバッチがエラーはいたalertが飛んで、一瞬あせったということもあったりした。

ともあれ、今年も参加できて悔しい思いができたので、参加して良かったです。

出題、運営の皆様ありがとうございました!
また来年挑戦したいです。

isucon.net

*1:違うディレクトリにpullしてた

ISUCON5の予選にでた #isucon

今年もISUCONに参加した。
転職したこともあり、去年までのメンバーではなく、社内で募集してチームを組むことができた。
フロントエンドエンジニア中心のチームとバックエンドエンジニア中心のチームの2チームで参加。自分以外は、初参加だった。
自分のチームは、バックエンドチーム(美女と野獣)でCTO、新卒女子、自分という構成で挑んだ。

当日やったこと
インフラレイヤーを主に担当して、

  • nginx1.9.5への入れ替え
  • css/js/fontをnginxで配信
  • unix domain socketでのunicornとの接続
  • LTSVファイルでログを出力 -> alp にくわせてざっくりアクセスされる箇所を洗い出し
  • mysqld.confの調整

nginx でgzip をonにするとcssのlengthが0になってbenchmarkがfailするのになかなか気づかず、時間をくったり、おもむろにhttp2をhttpレイヤーで有効にしてしまって、ブラウザで確認するとつねにdownloadするモードになったりと、地味なつまづきがつらかった。
Ubuntuという指定はレギュレーションにあったものの、systemdに慣れていなさすぎて、どうやって再起動するんだとか、restartでやっていてbenchmarkとおっていたのに、stop &start したら↑のgzipとかhttp2とかがおきるようになってなにが悪いのか判断に時間がかかってしまったりしてしまった。
proxy-cacheを有効にして、stop&startしたら、downloadする件がでてしまって、それ消してるのに治らないとなって、proxy-cacheは関係ないのにパニックになって時間がかかったりもした。。。
あと、/etc/my.cnf でslow-query確認しましょうとなって、設定変更しても、何も出ず、そもそも/etc/my.cnfは読まれていなかったとかもあって*1、経験不足が出てしまった感じだった。

アプリレイヤーは、チームメンバーにまかせていたものの、initializeのあつかいで、とまどいがあったり、別のインスタンスで動かしつつgitで管理するみたいなことに、時間を取られたりしていて、ISUCON慣れみたいなもののあるなしが出てしまった感じだった。
18時過ぎぐらいまでで、ほぼほぼインフラレイヤーの変更のみがいきているような状態だったけど、アプリの改善を自分とCTOとでツーマンセルのような状態で進めていったらスコアが伸びていったので、完全なる作戦ミスだった。。

最終的に一番スコアがでたのでも4909だったので、初期スコアからは伸びたもの、トップとは5倍ぐらい差がでてしまっているので、悔しさしかない。
ベンチツールが公開されたら、もう一度チャレンジしたい。

GCPはbigqueryは普段からさわっているものの、GCEははじめてだったけど、さくっと使えるのはよさそうだった。gcloud sdkssh接続するときの挙動が謎すぎて何が起きているんだという感じもあるけれど。。

ともあれ、運営のみなさま、出題者のみなさま、ありがとうございました!

isucon.net

*1:/etc/mysql/mysql.conf.d/mysqld.cnf が読み込まれていた