SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 Summer レポート

計測と改善をひたすら繰り返したら、年間コストを1億円削減した──不確実性の高いプロジェクトに挑む

【24-A-7】年間一億円削減した時系列データベースのアーキテクチャ改善~不確実性の高いプロジェクトへの挑戦~

  • X ポスト
  • このエントリーをはてなブックマークに追加

ひたすら繰り返すことが大きな成功への道

 当然だが、実装当初から高い性能が出るわけではない。検証して、ボトルネックを測定して、それをもとに改善案を作成して、それを実装して、再び検証する。このサイクルを何回繰り返したか分からないくらい繰り返したと坂本氏は語る。

 このときに頼りになるのは、プロセッサ時間やメモリなどの資源をどれくらい使っているのかを関数呼び出しごとに確認するプロファイリングと、リクエストなどのユーザーが指定した測定区間内で、どの処理にどれくらいの時間を使ったのかを確認するトレーシングだ。

 今回、クエリの処理をプロファイリングとトレーシングで調べたところ、転置インデックスのダウンロードとデコードに時間がかかっていた。転置インデックスが最大で約20MBにまで膨らんでしまい、毎回ダウンロード、デコードしていると、プロセッサ時間をかなり消費するのだ。

 そこで、転置インデックスのサイズを縮小するために「インデックスのインデックス」という新しいデータ構造を導入した。転置インデックスに対してさらにマッピングテーブルを作るというわけだ。これを作れば、転置インデックスの部分的なダウンロードとデコードが可能になる。

転置インデックスのインデックスを作ることで、転置インデックスも部分的なダウンロードが可能に
転置インデックスのインデックスを作ることで、転置インデックスも部分的なダウンロードが可能に

 また、クエリを確認していると、何回も同じクエリが発生していることが分かった。そこで、転置インデックスのダウンロード、デコード、ターゲットのIDを検索までの処理を、丸ごとキャッシュできないかと考えた。こうすることで、Sampleのバイト位置がキャッシュから分かるようになり、転置インデックスの処理が丸ごと不要になった。

 ほかにもDownload Bufferのチューニングや、並列処理数のチューニング、「Nginx」から「Envoy」への移行などいろいろ手を尽くしたが、すべて仮説を立てて実装し、結果を測定するサイクルをひたすら繰り返すことで成果を出してきた。その結果、プロセッサ使用率を90%から6%まで下げることができ、レイテンシの値もCassandraにかなり近づけることができたという。

 今回のプロジェクトでは、年間約1億円弱のコストを削減できた。半年ほど経ったが、一度も障害は発生していない。10億種類のMetricsも保持しており、いつでも簡単にスケールアウトできる。Cassandraにも負けないレイテンシで検索できるので、もはやCassandraも要らないのではという声も出始めた。

 今回坂本氏は、難易度が高く不確実性を伴う課題に挑戦するときに意識したいポイントを、実例を交えて説明した。まずは言語化。要求はみんな持っているはず。それをきちんと要件の形にして、成功を定義すること。次は、早くアウトプットして、早く結果を得て、それを高速に回して、計測と改善を繰り返すこと。坂本氏は「これをあきらめずにとにかく繰り返せば、絶対に上手くいく。計測と改善を、成功するまで根性で繰り返すことが大切だ」と語って公演を締めくくった。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Developers Summit 2024 Summer レポート連載記事一覧

もっと読む

この記事の著者

笹田 仁(ササダ ヒトシ)

 フリーランスのライター、編集者。IT、特にソフトウェア開発の話が好きです。 趣味はドラムを叩くこと。コロナ騒ぎでリハーサルスタジオに入りにくくなり、ちょこちょこと楽器を買うことでストレスを解消していたら、いつの間にか置き場所に困るほどになってしまいました。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

丸毛 透(マルモ トオル)

インタビュー(人物)、ポートレート、商品撮影、料理写真をWeb雑誌中心に活動。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20109 2024/12/12 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング