社内エンジニアイベント「ヒダッカソン」の舞台裏

こんにちは。
サイバーエージェント ゲーム・エンターテイメント事業部(SGE)でCTOをしております白井です。

今回は、今年で4回目を迎えた、社内のエンジニアイベント「ヒダッカソン」の舞台裏について紹介します。

1.ヒダッカソンとは

ヒダッカソンは、サーバ部門とネイティブ部門の2つがあり、それぞれ、サーバーエンジニア、ネイティブエンジニア向けに実施しており、丸一日つかってプログラミング力を競いあうイベントです。

今回は2部門あるうちのサーバー部門の舞台裏をお伝えします。そもそも、ヒダッカソンは、普段は表にはでてこないが、実力あるエンジニアにフォーカスを当てることを目的としたイベントです。日頃の業務をはなれ、丸一日、参加者が同じ会場で、がっつりプログラミングをする、という形式をとっており、さながら、大学入試センター試験のような緊張感が競技中は漂います。

2.実施したこと

競技は、昨年と今年は、特定のサービスを模したWebアプリケーションをチューニングしてスコアを競う、というルールで実施しました。いわゆる社内ISUCONですが、大きく違うところが、ISUCONは、1チーム、2、3名に対して、ヒダッカソンは、1チーム1名の個人競技です。

社内イベントとして実施するには、だれが一番なのかはっきりさせたほうが、盛り上がり、優勝した人は、ドヤ顔ができる!という狙いで、個人競技にしています。イベントとして成立させるには、参加者から見た時のスコアの納得感が非常に大事です。そのため、昨年と今年は、実績あるISUCONのシステムをベースにヒダッカソン用のシステムを構築しています。

3.肝は採点システム

肝となるのは、スコアをつける採点システムです。昨年、2015年に新卒入社した向井くんがISUCONのシステムをヒダッカソン向けにしてくれたために、今年も安定した採点システムで運用することができました。

参加者に合わせて、 複数の言語のWebアプリケーションを用意します。(Java、PHP、Node .jsのソースを用意しており、Webアプリケーションとしては同じ振る舞いをします)競技終了後の言語別参加分布は以下の通りでした

4.エンジニアメンバーを困らせた問題設計

昨年の反省を踏まえ、今年は、次のような問題設計にしました。
(1) DB寄りなチューニングよりもプログラム寄りなチューニングを必要とする
(2) 過去のプロジェクトのチューニングノウハウを盛り込む

昨年は、DBのデータが大きく、メモリにのらない、という状況のチューニング問題でした。現実の業務に合わせると、今はメモリにデータがのらないのは、レアケースなので、より日頃の業務で出会いそうな形にしました。((1)の部分)。(2)の部分ですが、過去、性能問題でトラブルが起きた事例をそのまま、Webアプリケーションに組み込んでおく、という形にしました。

具体的に次の内容を盛り込みました。

a.   MySQLの複合インデックスの使い方を意識させるプログラムプログラム 複合インデックスの2番目のカラムのみで絞り込んで検索してもインデックスは効きません。インデックスの貼り方に気づいてもらう内容です。

b. 非効率なLoop処理 ループ中にSQL文を毎回発行してしまう、というケースです。1000回ループすると、1000回SQLを実行してしまう、非効率なLoopです。

c. 件数が不明なときにO(N)の命令を実行する 件数が少ないときには問題にならなくても実際に運用がはじまって、ユーザ数が増えた時に問題になることがあります。データ件数とともに線形で実行時間が増えます。

5.出題者側が大切にしてほしかったこと

運営側の意図としては、上記のa,b,cを見つけて、チューニングすることです。しかし、実際には、もっと大事にして欲しいことがあります。それは、「計測すること」です。

「Rob Pikeのプログラミング 5つの法則」に端的に述べられています。

    • 1. プログラムがどこで時間を消費することになるか知ることはできない。ボトルネックは驚くべき箇所で起こるものである。したがって、どこがボトルネックなのかをはっきりさせるまでは、推測を行ったり、スピードハックをしてはならない。

 

    • 2. 計測すべし。計測するまでは速度のための調整をしてはならない。コードの一部が残りを圧倒しないのであれば、なおさらである。

 

    (引用:https://ja.wikipedia.org/wiki/UNIX哲学)

チューニングしようとすると、すぐプログラムを変更したくなりますが、まずは、計測することが大事です。

計測することでボトルネックになっているところはどこか、を見つけ、ボトルネックを解消するように変更していくことが、最も大事です。計測をしないと、ボトルネックではないところばかり最適化してしまい、かけた時間に対して、効果が薄い、ということがおきてしまうからです。

6.ヒダッカソンを続ける理由

今回でヒダッカソンは、4回目になるのですが、毎回思わぬ番狂わせがあったり、こんなことが得意だったんだという今まで気づかなかったことを知るきっかけにもなり毎回かなり有意義な会となっています。問題を予想してくるエンジニアメンバーもいて、準備はかなり大変なのですが(笑)、今後も続けていきたいエンジニア施策の一つです。

また、毎年ヒダッカソンを続けているおかげで、社内のエンジニア以外のメンバーの注目度も高く、毎回身近なエンジニアを応援する姿が見られます。子会社を越えて、社内全体を盛り上げるSGEらしいイベントがこのヒダッカソンです。

LINEで送る
Pocket

おすすめ記事