Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発を愛する人が最高にISUCONを楽しむ方法

logica
August 29, 2023

 開発を愛する人が最高にISUCONを楽しむ方法

このスライドは、ISUCON 夏祭り 2023のShort Session発表で使用したものです。
https://isucon.connpass.com/event/288820/

ISUCONはDev / Opsの観点では運用(Ops)寄りの競技だと考えています。ですので、開発(Dev)をこよなく愛する僕は、ただISUCONを解くだけでは飽き足らず、ISUCONから様々な開発のインスピレーションを得ようとしてきました。
今回のセッションでは、そんな僕の「ISUCON駆動開発」の歩みを、3つの成果物の紹介と共にお届けします。

紹介した成果物:
https://github.com/logica0419/remote-bmi
https://github.com/logica0419/helpisu
https://github.com/logica0419/gasshuku-isucon

logica

August 29, 2023
Tweet

More Decks by logica

Other Decks in Technology

Transcript

  1. キャッシュ type Cache[K comparable, V any] struct func (c *Cache[K,

    V]) Get(key K) (value V, ok bool) func (c *Cache[K, V]) GetAndDelete(key K) (value V, ok bool) func (c *Cache[K, V]) Set(key K, value V) func (c *Cache[K, V]) Delete(key K) func (c *Cache[K, V]) Reset() func ResetAll() 実態は sync.Map のジェネリックなラッパー 全キャッシュ削除のAPIを持つ 生成したキャッシュをリストとして持っている アプリの初期化時に状態をリセットしやすいように作成
  2. DB func WaitDBStartUp(db *sql.DB) type DBDisconnectDetector struct func (d *DBDisconnectDetector)

    RegisterDB(db *sql.DB) func (d *DBDisconnectDetector) Start() func (d *DBDisconnectDetector) Pause() func (d *DBDisconnectDetector) Stop() func (d *DBDisconnectDetector) Reset() 引数で渡したDBの立ち上がりまで終了しない関数 DBが切断された際、強制的にアプリケーションを落とすための構造体 ベンチマーキング中にできるだけ負荷をかけないよう、一時停止も
  3. 定期実行 func NewTicker(durationMS int, callback func()) *Ticker type Ticker struct

    func (t *Ticker) Start() func (t *Ticker) Stop() func (t *Ticker) Reset() 関数を定期実行することに特化した機能を持つ構造体 新規作成時にインターバルと関数を渡す Start() さえすればいい感じに全部やってくれる