ISUCON12に参加して予選3位でした
@rrreeeyyy とチーム「たつや」でISUCON12予選に参加して、3位でした。2年ぶりの本選楽しみです。
予選でやったことをざっとまとめておきます:
- 最終的な構成は
- とりあえずシャーディングを見据えてMySQLへ移行
- flockを消して、トランザクションに
- 諸々DBのインデックスを追加
- スコア入稿部分でデッドロックが発生していたので、削除せず追記のみになるように改修
player_score_commit
テーブル、player_score
のcommit_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さんに献本いただきました。ありがとうございます。
ISUCON12予選もうすぐですね。巷で「ISUCON本」と呼ばれている本書ですが、(ISUCON対策としてももちろん役立ちますが)ISUCONに参加しない方にもおすすめです。
実践的にハイパフォーマンスにWebサービスを開発・運用する上で必要な基礎知識が一通り解説されていて、SREはもちろんバックエンドエンジニアになりたてのひとが一通り知識をつけるのにとても有用だと思います。
「推測するな計測せよ」という格言がありますが、その通り、まずはモニタリングの方法が解説されています。 top, sarなどの古典的なコマンドから、Prometheusなどのモダンなツールまで紹介されています。最近ではSSHすることも減り機会は少ないかもですが、アドホックに状況を把握したいときなど、各種Linuxコマンドは知っておいて損はないですよね。この章ではモニタリングの方法だけではなく、結果をどう読み解くか、状況を誤解しないために気をつけるべきかなど、ツールの使い方の先に触れられていてよかったです。
次に、モニタリングができている環境に対して負荷試験を行います。ISUCONで毎回お世話になっているalpを使ってボトルネックを探りつつ。ベンチマーカーとしてGrafanaがつくっているk6を使っています。モダンですね。
ここまででモニタリング、ベンチマークができるようになって、ここから高速化の方法について解説されています。ボトルネックになりやすいデータベースの最適化、キャッシュをつかった高速化などに触れられています。
本書で解説されていることをちゃんとできたら、ISUCON予選は通過できそう?
今後、新人エンジニアが入ってきたら、とりあえずこの本をおすすめしていきます。
それにしても、この本によってレベルが底上げされてISUCONがさらに激戦になるんじゃないかという予感が…とりあえず本選に出場できるよう頑張っていこうかと思います。
VS Codeのファイルツリーをフィルターする拡張機能をつくりました
概要
ファイルやディレクトリが多いプロジェクトで開発するとき、VS Codeのファイルツリーでファイルが見つからなかったり、目が滑る経験はないでしょうか。特定の機能を開発しているとか、今関心のあるファイルは少ない場合も多いと思います。 そんなあなたのために、VS CodeのExplorer viewのファイルツリーを絞り込んで表示する拡張機能をつくりました。
下のスクリーンショットのように、通常のツリーの下に絞り込まれたツリーが表示されます。
どこかのだれかがすでに作ってそうですが…(もし類似拡張機能があったら教えて下さい)
つかいかた
インストール
Eda - Visual Studio Marketplace
インストールすると、Explorerの下の方にEDA
が表示されるかと思います。
特定のファイルを表示する
- Explorerのツリーからファイルを右クリック
Eda: Add a File
正規表現でファイルを絞る
- コマンドパレットを開く (Ctrl(Cmd)-Shift-P)
Preferences: Open Workspace Settings (JSON)
- 以下のように、パターンを設定する
"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で開けて便利。
リポジトリ
SOELU株式会社に入社しました
2021/8/1付けでSOELU株式会社に入社しました。
オンラインヨガ・フィットネスのSOELU @soelu_official に入社しました。執行役員として経営に近いところで、技術基盤整えたりいわゆるSREをやったり、プロダクトが成長するためにいろいろやって行く予定です。各位今後ともよろしくお願いします!
— Ryota Arai (@ryot_a_rai) 2021年8月2日
SOELU @soelu_official に入社してから2週間ほど経ちましたが、さすがガチスタートアップ、広範囲にやること山積みで刺激的な日々を過ごしてます。現在、iOS/Androidエンジニア、UI/UXデザイナ絶賛募集中なので、ちょっっとでも興味あればとりあえずDMください〜
— Ryota Arai (@ryot_a_rai) 2021年8月19日
SOELU
SOELU(ソエル)というオンラインヨガ・フィットネスのサービスを提供しています。
ヨガ・トレーニングのライブレッスンが受けられるサービスです。
特徴としては、インストラクターとの双方向のコミュニケーションがとれたり、他の参加者には自分の姿が見えないようになっていて安心だったり。
コミュニケーション取りたくないときはインストラクターの映像が見えるだけの参加方法もありますし、ライブではないビデオレッスンもあります。
30日間100円でトライアルできるんで、ぜひ試してみてください。
なんで入社したの
SOELUのCEO, COOとは新卒同期で、起業した当初からたまーにコンタクトをとってました。
今年入ってから副業でちょっと手伝うようになって、社員にならないかとオファーをもらって、入社しました。
入社の理由は
- すでにユーザがいて、事業が伸びている
- 個人的にはいわゆる0→1より、1→100的なフェーズのほうが得意な気がしている
- まだ30人ぐらいの会社で、(執行役員として)上場に向けて挑戦できるチャンスなかなかなさそう
- これから大きくなっていくのに向けて、これまでの会社での経験が活きそう
- 技術スタック的にもスキルが活きそう
- 小さい会社なので、コーポレートエンジニアリングとかセキュリティ周りのあれこれとか、あたらしい経験もできそう
という感じでしょうか。
技術スタック
雑にキーワードを並べるとこんな感じ。
- ほぼGCP(ちょっとAWS)
- Kubernetes (GKE)
- Ruby on Rails
- MySQL
- React
- Agora(ライブ配信の基盤として利用しています)
- iOS: Swift
- Android: Kotlin
(個人的には隙あらばGoを使っていきたいと思ってます)
開発チーム
エンジニアは一桁人、モバイルアプリは正社員は1名で、副業の方に手伝ってもらっています(募集中です!!)
愉快な仲間たち
CTOの片岡↓
Webエンジニアのoreshinya↓
iOSエンジニアのmyammm_↓
採用してます
リモートワークメインなので、東京に住んでないという方でもぜひ。
(北海道に住んでいるメンバーもいます)
現在、iOS/Androidエンジニア募集中です!ちょっとでも興味ある方はhttps://twitter.com/ryot_a_raiにDMください。
その他のポジションは↓をごらんください。
AWS Management ConsoleでSwitch Roleした際にヘッダの色を変更する
AWSのManagement Consoleに他のアカウントのロールになりすませる機能があります。
大変便利なんですが、うっかり意図したアカウントと違うアカウントで操作をしてしまうと大惨事になりかねないので、雑user jsでヘッダ全体の色を変えてます。 (以下のuser.jsではSwitch Roleしてないときに赤くしている)
ご活用ください。
AWSマネジメントコンソールを開くAlfred Workflow
タイトルの通りですが、AWSのマネジメントコンソールを開くAlfred Workflowを作りました。使い方は以下のとおり。
- (Alfredをインストールする + Powerpackを買う)
- open_aws_console.alfredworkflowをダウンロードして開いてインストール
- Alfredで
aws ec2
のようにaws
の後ろにサービス名をつなげる
サービスが増えたら適宜アップデートしていきます。 ぜひご活用ください。