ISUCON12に参加して予選3位でした

@rrreeeyyy とチーム「たつや」でISUCON12予選に参加して、3位でした。2年ぶりの本選楽しみです。

予選でやったことをざっとまとめておきます:

  • 最終的な構成は
  • とりあえずシャーディングを見据えてMySQLへ移行
    • sqlite3-to-sqlという便利スクリプトがおいてあったのでfor f in *.db; do sqlite3-to-sql "$f" | mysql; done 的なワンライナーで流し込んだ
    • 何箇所かSELECT文にwhere tenant_id = ?がなかったので追加`
    • 初期データ以外を消すようにinit.sqldelete from player where created_at > 1658534400的なやつを追加
      • 最初このデータ削除にバグがあり、たまにベンチマークが失敗する問題に悩まされていた(ベンチマーカの出力が間違っていたのもあって、的はずれな調査していた…)
  • flockを消して、トランザクション
  • 諸々DBのインデックスを追加
  • スコア入稿部分でデッドロックが発生していたので、削除せず追記のみになるように改修
    • player_score_commitテーブル、player_scorecommit_idカラムを追加し、スコアを取得する際に最新のcommit_idの行を取得するように。primary keyがユニークじゃなくなるので適当なauto incrementなカラムを追加。
  • ID採番をUUIDに
  • スコア入稿をバルクインサートに
  • connectToTenantDBのtenant ID mod 2で2台を使い分け
  • GET /api/player/player/:player_id, GET /api/player/competition/:competition_id/rankingの結果JSONをキャッシュ
    • スコア入稿でキャッシュをパージ

ISUCON本はISUCONやらないひとにもおすすめ

出版からだいぶ時間が経ってしまいましたが…「達人が教えるWebパフォーマンスチューニング 〜 ISUCONから学ぶ高速化の実践」をcatatsuyさんに献本いただきました。ありがとうございます。

gihyo.jp

ISUCON12予選もうすぐですね。巷で「ISUCON本」と呼ばれている本書ですが、(ISUCON対策としてももちろん役立ちますが)ISUCONに参加しない方にもおすすめです。
実践的にハイパフォーマンスにWebサービスを開発・運用する上で必要な基礎知識が一通り解説されていて、SREはもちろんバックエンドエンジニアになりたてのひとが一通り知識をつけるのにとても有用だと思います。

「推測するな計測せよ」という格言がありますが、その通り、まずはモニタリングの方法が解説されています。 top, sarなどの古典的なコマンドから、Prometheusなどのモダンなツールまで紹介されています。最近ではSSHすることも減り機会は少ないかもですが、アドホックに状況を把握したいときなど、各種Linuxコマンドは知っておいて損はないですよね。この章ではモニタリングの方法だけではなく、結果をどう読み解くか、状況を誤解しないために気をつけるべきかなど、ツールの使い方の先に触れられていてよかったです。

次に、モニタリングができている環境に対して負荷試験を行います。ISUCONで毎回お世話になっているalpを使ってボトルネックを探りつつ。ベンチマーカーとしてGrafanaがつくっているk6を使っています。モダンですね。

ここまででモニタリング、ベンチマークができるようになって、ここから高速化の方法について解説されています。ボトルネックになりやすいデータベースの最適化、キャッシュをつかった高速化などに触れられています。
本書で解説されていることをちゃんとできたら、ISUCON予選は通過できそう?

今後、新人エンジニアが入ってきたら、とりあえずこの本をおすすめしていきます。

それにしても、この本によってレベルが底上げされてISUCONがさらに激戦になるんじゃないかという予感が…とりあえず本選に出場できるよう頑張っていこうかと思います。

VS Codeのファイルツリーをフィルターする拡張機能をつくりました

概要

ファイルやディレクトリが多いプロジェクトで開発するとき、VS Codeのファイルツリーでファイルが見つからなかったり、目が滑る経験はないでしょうか。特定の機能を開発しているとか、今関心のあるファイルは少ない場合も多いと思います。 そんなあなたのために、VS CodeExplorer viewのファイルツリーを絞り込んで表示する拡張機能をつくりました。

下のスクリーンショットのように、通常のツリーの下に絞り込まれたツリーが表示されます。

f:id:ryotarai:20220311104417p:plain

marketplace.visualstudio.com

どこかのだれかがすでに作ってそうですが…(もし類似拡張機能があったら教えて下さい)

つかいかた

インストール

Eda - Visual Studio Marketplace

インストールすると、Explorerの下の方にEDAが表示されるかと思います。

特定のファイルを表示する

  1. Explorerのツリーからファイルを右クリック
  2. Eda: Add a File

正規表現でファイルを絞る

  1. コマンドパレットを開く (Ctrl(Cmd)-Shift-P)
  2. Preferences: Open Workspace Settings (JSON)
  3. 以下のように、パターンを設定する
"eda.profiles": {
  "default": {
    "patterns": [
      {
        // includeFiles, excludeDirs, excludeFilesはワークスペースフォルダから相対パスにマッチします

        // この正規表現にマッチしたファイルが表示されます
        "includeFiles": ["\\.ts$"],
        // この正規表現にマッチしたディレクトリは除外されます
        // 表示が重い場合、.gitやnode_modulesなどのファイル数が多いディレクトリは除外しておくことをおすすめします
        "excludeDirs": ["^\\.git/", "^node_modules/"],
        // この正規表現にマッチしたファイルは除外されます
        "excludeFiles": ["\\.d\\.ts$"]
      }
    ]
  }
}

Ctrl(Cmd)-Pのようにファイルを開きたい

コマンドパレットからEda: Open a Fileを選択すると、それっぽいものが出てきます。

{
  "key": "alt+p",
  "command": "eda.openFile"
}

みたいにキーボードショートカットを設定しておくと、Alt(Option)-Pで開けて便利。

リポジトリ

github.com

SOELU株式会社に入社しました

2021/8/1付けでSOELU株式会社に入社しました。

SOELU

SOELU(ソエル)というオンラインヨガ・フィットネスのサービスを提供しています。

https://soelu.com

ヨガ・トレーニングのライブレッスンが受けられるサービスです。
特徴としては、インストラクターとの双方向のコミュニケーションがとれたり、他の参加者には自分の姿が見えないようになっていて安心だったり。
コミュニケーション取りたくないときはインストラクターの映像が見えるだけの参加方法もありますし、ライブではないビデオレッスンもあります。

30日間100円でトライアルできるんで、ぜひ試してみてください。

なんで入社したの

SOELUのCEO, COOとは新卒同期で、起業した当初からたまーにコンタクトをとってました。
今年入ってから副業でちょっと手伝うようになって、社員にならないかとオファーをもらって、入社しました。
入社の理由は

  • すでにユーザがいて、事業が伸びている
    • 個人的にはいわゆる0→1より、1→100的なフェーズのほうが得意な気がしている
  • まだ30人ぐらいの会社で、(執行役員として)上場に向けて挑戦できるチャンスなかなかなさそう
  • これから大きくなっていくのに向けて、これまでの会社での経験が活きそう
  • 技術スタック的にもスキルが活きそう
  • 小さい会社なので、コーポレートエンジニアリングとかセキュリティ周りのあれこれとか、あたらしい経験もできそう

という感じでしょうか。

技術スタック

雑にキーワードを並べるとこんな感じ。

(個人的には隙あらばGoを使っていきたいと思ってます)

開発チーム

エンジニアは一桁人、モバイルアプリは正社員は1名で、副業の方に手伝ってもらっています(募集中です!!)

www.wantedly.com

愉快な仲間たち

CTOの片岡↓

twitter.com

Webエンジニアのoreshinya↓

oreshinya.hatenablog.com

iOSエンジニアのmyammm_↓

note.com

採用してます

リモートワークメインなので、東京に住んでないという方でもぜひ。
(北海道に住んでいるメンバーもいます)

現在、iOS/Androidエンジニア募集中です!ちょっとでも興味ある方はhttps://twitter.com/ryot_a_raiにDMください。

その他のポジションは↓をごらんください。

www.wantedly.com

AWS Management ConsoleでSwitch Roleした際にヘッダの色を変更する

AWSのManagement Consoleに他のアカウントのロールになりすませる機能があります。

docs.aws.amazon.com

大変便利なんですが、うっかり意図したアカウントと違うアカウントで操作をしてしまうと大惨事になりかねないので、雑user jsでヘッダ全体の色を変えてます。 (以下のuser.jsではSwitch Roleしてないときに赤くしている)

ご活用ください。

f:id:ryotarai:20160914154513p:plain

gist.github.com

AWSマネジメントコンソールを開くAlfred Workflow

f:id:ryotarai:20160329001913g:plain

タイトルの通りですが、AWSのマネジメントコンソールを開くAlfred Workflowを作りました。使い方は以下のとおり。

  1. (Alfredをインストールする + Powerpackを買う)
  2. open_aws_console.alfredworkflowをダウンロードして開いてインストール
  3. Alfredでaws ec2のようにawsの後ろにサービス名をつなげる

サービスが増えたら適宜アップデートしていきます。 ぜひご活用ください。