Okinawa.rb Meetup 4/24

ISUCONのはじめかた話を聞いてきた。題材はprivate-isu。雑にメモ

github.com

ISUCON流れ

全体流れ

  • sshの設定で公開鍵はgithubにあげとく作戦
  • config設定(セッションが切れないようにするなど)
  • アプリケーションのコードをgithubにアップする
  • githubにあげたコードをローカルに持ってくる
  • ローカルでサーバーと同じような状態にする
  • ローカルでコードを修正できるようにする
  • ベンチマーク実行する
  • ブラウザから操作してみる
  • ボトルネックを探す
  • ローカルでコード改修する
  • 環境にデプロイ
  • ベンチマーク実行する

ローカルでアプリを動かせるようにする状態にするのがなんとなく難しそうだった。

MySQLメモ

  • ダンプ
$ mysqldump -uroot isuconp > db.sql
  • リストア
mysql> create database isuconp;
mysql> quit
$ mysql -uroot -proot -D isuconp < db.sql

ローカルの3306にアクセスしたらサーバーのMySQLにアクセスするようにしたかったけど、なんか3306を指定したらエラーになってうまくいかなかったので、いったん13306を指定してる

shimabukuromegumi-no-MacBook-Pro:~ root# ssh -f -N -C -L 13306:localhost:3306 isucon@13.231.226.73 -p 22
shimabukuromegumi-no-MacBook-Pro:~ root# mysql -uroot -P 13306 -h 127.0.0.1
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 648
Server version: 5.5.49-0+deb8u1 (Debian)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

st-hakky.hatenablog.com

$ mysql.server start
$ mysql.server stop
$ mysql.server status

qiita.com

memcached メモ

isuconアプリをローカルで立ち上げる時にmemcachedがないっていうエラーになったので、導入した。(なぜ必要なのかはいまいちわかっていない)

  • インストール
brew install memcached
  • 起動
memcached

joppot.info

sinatraメモ

ローカルにisuconアプリを持ってきたあと、bundle install、bundle exec ruby app.rbで起動すると思ったけど、うまく起動しなかった。bundle exec rackup -p 8080とするとちゃんと起動した。(なんで起動しなかったのかよくわかっていないってのと、rackupってコマンドがなんなのかよくわかっていない)

cd isucon-pixiv/ruby
bundle install --path=vendor/bundle
bundle exec rackup -p 8080

qiita.com

ngx-mrubyメモ

isucon7の予選のsleep問題にrubyでも対策できるようにngx-mrubyを使えるのでは???という話。isucon7のsleep問題もいまいちよくわかっていなくて、なるほどわからん状態だけど、ngx-mruby気になる。

blog.takanabe.tokyo

tech.pepabo.com

github.com

isucon7メモ

ISUCON 7 予選で ISUCON 初参加した結果を振り返る · GitHub

一見無駄に見える参照実装の sleep の意味に気づくとブレイクスルーすることができたと思います。

github.com

isucon.net

Goつかってたということもあって、sleepはとくに障害になりませんでした。

これがPerlRubyといったprefork型のやつだと、/fetchの並列度によってはworkerが/fetchに専有されるみたいなのもありえたのですが、GoとNode.jsはその辺考えなくて済むのでそこは楽でしたね。 beatsync.net