キュアセブン技術ブログ

考えたこと,学んだことを書きます

ISUCON11までの練習ログ

ISUCON11は予選敗退しました.詳しくは以下のブログで.

shiningcureseven.hatenablog.com

今回もめちゃくちゃ練習したので,そのログと,ami情報を掲載します

ami情報

github.com

amiが用意されていてありがたかった.がシュッと動かないものがあったのでメモ(2021/7/17時点)

ISUCON5予選

これを流して初期データを流す必要がある. この作業がめちゃ重いのでインスタンスサイズは c5.2xlarge で.それでも3hくらいかかる

mysql> create database isuxi;
Query OK, 1 row affected (0.00 sec)
cd /home/isucon/isucon5-qualify/webapp/script
bundle install
bundle exec gen.rb gen_users
bundle exec gen.rb gen_relation
bundle exec gen.rb gen_footprints
bundle exec gen.rb gen_entries
bundle exec gen.rb gen_comments
bundle exec gen.rb gen_testsets

rubyはbundlerのversionが新しすぎて動かないらしい.
goはdbのuserとpasswordを与えないと動かない

$ cat env.sh
PATH=/usr/local/bin:/home/isucon/.local/ruby/bin:/home/isucon/.local/node/bin:/home/isucon/.local/python3/bin:/home/isucon/.local/perl/bin:/home/isucon/.local/php/bin:/home/isucon/.local/php/sbin:/home/isucon/.local/go/bin:/home/isucon/.local/scala/bin:$PATH
GOPATH=/home/isucon/gocode

ISUCON5_DB_USER=isucon
ISUCON5_DB_PASSWORD=isucon

ISUCON6予選

当日マニュアル わかりにくいところにある

初期実装perlは動くけどgoは動かない muxのエンコードがうまくいかない. versionを2015年くらいのやつに変えてもだめだったので以下を行う.

@@ -456,7 +456,6 @@ func main() {
        })
        r := mux.NewRouter()
-       r.UseEncodedPath()
        r.HandleFunc("/", myHandler(topHandler))
        r.HandleFunc("/initialize", myHandler(initializeHandler)).Methods("GET")
        r.HandleFunc("/robots.txt", myHandler(robotsHandler))

goのversion 17ではできなかった.16にしたらできた. version管理方法も変える必要あった

$ make isuda
go get github.com/go-sql-driver/mysql
# github.com/go-sql-driver/mysql
../go/src/github.com/go-sql-driver/mysql/nulltime.go:36:15: undefined: sql.NullTime
Makefile:4: recipe for target 'deps' failed
make: *** [deps] Error 2

muxのエンコーダ入れると壊れる

$ GOPATH=~/webapp/go make isuda

これで解決できる

ISUCON9本戦

c4.large benchの負荷が高いのでbenchサーバーを用意すること推奨

  • docker起動しなきゃ見れない
  • systemd管理がなくなっている. systemd.serviceを作らないといけない
  • docker-compose.ymlが/user/local/bin にない

isucon9-final/MANUAL.md at master · isucon/isucon9-final · GitHub

より,既知の問題

  • 初期実装は遅すぎてスコアが出ません。
  • 初期実装ではロック機構がうまくなく、二重発券される場合がある可能性があります

がある

よく 課金APIと予約の整合性が取れていません (critical error) が出てしまう.paymentはいじることないはずなので仕方なし

ISUCON10本戦

go,rubyは動くの確認ずみ benchにはローカルでも-target-urlを指定しないといけない.

ISUCON10本戦

初期データが入っていないので一回負荷走行を回す必要があるが 証明書エラーでベンチが回らない.証明書を正しくする必要がある envoyを書き換えてsslやめた

練習ログ

3/20 ISUCON9本戦

去年の本戦出場メンバーでそろそろやるか,という話に.ISUCONを思い出す会

3396点

github.com

4/3 ISUCON9本戦

続きやる会

5784点

github.com

4/10 ISUCON9本戦

ハーフタイムで,続きをやる会

13719点

github.com

4/24 ISUCON7予選

Oysters合同練習.msmさんyuさんと. rubyで挑戦

4777点

github.com

5/30 ISUCON3予選

Oysters合同練習.初めて1人でやってみた.

8838.4点

github.com

7/4 決起会

チームメンバーが決まり,決起会.

7/10 ISUCON8予選

N+1やり切り練習

8h時点スコア 19671
26時時点スコア 6万点くらい

github.com

6/26 社内ISUCON

takuさんと2人チーム

18993点

github.com

7/17 ISUCON6予選

pinkumohikanさんと2人で練習

  • kataribe入れられるようになった
  • 1人でマイクロサービスをやめるをできた
  • generate columnを学んだ
"pass":true,"score":25947,"success":10137,"fail":33

github.com

7/22 ISUCON6予選

msmさんと2人で練習

  • オンメモリ
{"pass":true,"score":80625,"success":35081,"fail":1,"messages":["keyword: \"上町村\" に \"川上町\" からのリンクがありません (GET /keyword/川上町)"]}

https://github.com/oystersjp/isucon-practice-20210722/issues/1github.com

7/23 ISUCON9本戦

  • ログサーバをmsmさんが作ってくれた
  • indexはったことにより順番が変わってしまう対応した
8h競技終了時点
5960点

23:30時点
17556点
{"pass":true,"score":17556,"messages":["エンドポイント成功回数: 3441","スコア: 17556","ペナルティ: 0"],"available_days":100,"language":"golang"}

github.com

7/24 ISUCON5予選

ジェンガチームとちゅうこあチームと合同練習!10倍くらいの点数を出せた

  • generated column扱えた
{"success"=>10936, "redirect"=>3021, "failure"=>1, "error"=>0, "exception"=>0}

github.com

7/31 各自調べたいことを調べる会

私は

  • nanoエディタはじめショートカットを確認
  • git管理早くやる方法調査
  • package入れる手順おさらい

8/8 ISUCON7予選

  • DBに保存している画像を書き出して,nginxから配信するようにした
275472点
21:30時点747104点

https://github.com/takoyakisoba/isucon-practice-20210808/issues/1github.com

8/9 ISUCON10本戦

  • FOR UPDATE SKIP LOCKEDお試し
6h時点15998

github.com

8/14 ISUCON10予選

  • generated columnで降順indexっぽいことをした(mysql5.7)
  • generated columnでchairの高さなどをidでもつようにした
8h時点 6540

github.com