レポート

サイバーエージェントのエンジニアが「Go」言語を語る ~「オレシカナイト Vol.2」イベントレポート

この記事を読むのに必要な時間:およそ 4 分

低遅延が求められるDSPの開発でハマった“落とし穴”

2人目の片田雄樹氏は2015年に新卒入社したエンジニアで,2016年からMDHにてDSPチーム責任者兼エンジニアを務めています。今回の発表はDSPでgolangの屍を超えた話と題し,自身が開発責任者を務める「AmebaDSP」をgolangで開発したことによって生じた課題と,それをどう乗り越えたかについて話しました。

メディアディベロップメント事業本部(MDH)⁠ 片田雄樹氏

メディアディベロップメント事業本部(MDH) 片田雄樹氏

片田氏はDSPを開発する言語として気軽にgolangを選択したと話しつつ,レスポンス問題に苦しめられたと言います。DSPには,リクエストを受けてから100ms以内にレスポンスを返さなければならないというノルマがありますが,これがなかなかクリアできなかったのです。その問題を乗り越える上での苦労や解決策などを紹介しました。

参考になったのは,ライブラリを見直したという部分です。当然ながらライブラリもレスポンスに大きく影響しますが,選定の際には「広く使われているライブラリだから」などといった理由で,安直に決めてしまうことが少なくありません。しかし,片田氏は実装までしっかりチェックすべきだと指摘します。

「ライブラリを使うときに実装を見ないといけないと思いつつ,実際には見ない人が多いと思います。ただ実装する上では,ちゃんと見た方がいいというのが今回の教訓です。golangはそれほど読みづらい言語ではないので,読むことで余計なトラブルを回避できる可能性は高まるでしょう」⁠片田氏)

またパフォーマンスチューニングの要はプロファイルを取ることだったとした上で,golangの「pprof」は非常に優秀だと評価します。そして「echo-contrib/echopprof」を使ったプロファイル取得の手順も片田氏は説明しました。

特にアドテク領域において,レスポンスは極めて重要な要素となります。それだけに,参加者も真剣に片田氏の言葉に耳を傾けていました。

Scalaとgolangにおける末尾再帰最適化

3番目の登壇者は森拓真氏です。SSP広告配信サーバーや運用管理画面の機能開発を担当している森氏は「Java,ScalaをやってきてGoに思うこと golangで末尾再帰最適化は使えるか」というタイトルで発表しました。

株式会社AJA/メディアディベロップメント事業本部(MDH)⁠ 兼務 森拓真氏

株式会社AJA/メディアディベロップメント事業本部(MDH) 兼務 森拓真氏

まず森氏は,末尾再帰最適化について次のように説明します。

「階乗のプログラムを再起で実装した関数を書いて,大きな値を入力するとスタックオーバーフローになってしまいます。これを末尾再帰の形にすれば,Scalaのコンパイラが最適化してくれて,スタックオーバーフローが起きない形にしてくれます。これが末尾再帰最適化と呼ばれるものになります」⁠森氏)

Scalaでは末尾再帰処理に対応していますが,golangではどうなのでしょうか。森氏が過去のメーリングリストで確認したところによれば「いくらかのケースは対応しています。ただ言語としてすべてのケースを最適化するようにコンパイラを変更するつもりはない」とコア開発者が回答していたそうです。そこで実際に特定の数まで立ち上げる末尾再帰関数で検証した結果,期待が裏切られてスタックオーバーフローになったとのこと。また,再起とループ,そして末尾再帰で書いた関数でパフォーマンスを比較したところ,末尾再帰で書いた関数は再帰よりも結果はよかったものの,ループには遠く及ばない結果だったとしました。また,アセンブリコードを見ても最適化されている様子はなかったようです。

こうした検証結果から「golangでは末尾再帰は最適化されません。Scalaやほかの関数型言語で日常的に末尾再帰を書いている人にはつらいかもしれませんが,事実です。諦めて末尾再帰はforやgoto文に書き換えましょう。またコア開発者が最適化を追加する予定はないと言ったこと,ここ数年で末尾再帰最適化のトピックが立っていないことを考えると,本当に追加されないんだろうなと思っています」と結論を述べました。

森氏の説明した末尾再帰最適化のように,言語仕様などで気になる部分があっても,実際に調査するのは時間がかかるからと先送りにすることはないでしょうか。こうしたなかなか表に出てこない情報を得ることができるのは,オレシカナイトのような勉強会に参加する大きなメリットだと改めて感じました。

著者プロフィール

川添貴生(かわぞえたかお)

株式会社インサイトイメージ代表取締役。企業サイトおよびオウンドメディアの構築及び運用支援のほか,エンタープライズ領域を中心に執筆活動を行っている。

バックナンバー

2017年

バックナンバー一覧

コメント

コメントの記入