課題だった実行速度は、入念なプロファイリングとC言語化で解決へ
ネットワーク処理に強みを見せる一方で、Erlangの使用には大きな課題もあったという。その一つが言語の処理系そのものの実行速度だ。ネットワーク処理や並列処理は高速だが、その他の通常の処理に関してはC言語に比べるとはるかに低速で、全体としてのパフォーマンスが確保できないのだ。
そのため、ボトルネックになっている箇所はC言語で実装しなおすという方針をとった。ところがここにも大きな問題が立ちはだかっていた。当時、Erlangから外部のC関数を呼び出すための主な手段としてポートドライバを利用する方法があったが、オーバーヘッドが大きくて性能が悪かった。そこで佐野氏は、C言語化したい部分をBIF(Built In Function)として実装し、Erlangから呼び出せるようにしたとのこと。BIFはErlangに備わっている組み込み関数群である。これを自前で用意するということはErlang言語そのものを拡張するのに等しく、大きな手間がかかったという。もっとも、現在はNIFs(Native Implemented Functions)と呼ばれる外部のC関数を呼び出す新しい機構が追加されたため、より手軽にC言語による拡張が行えるようになっているとのことだ。
このように、処理速度のボトルネックはC言語化で乗り越えるという方針を取ったものの、そもそもどこでボトルネックが発生しているのかを突き止めることも容易ではなかったそうである。Erlangにはプロファイリングツールが用意されているが、当時はこのツール自体がパフォーマンスが悪くて使い物にならなかった。そこでユミルリンクでは、独自にプロファイリングツールを開発して解析を行い、入念にボトルネックを解消していくことでパフォーマンスの改善を進めていったという。
「もともと既存製品のメール配信エンジンはC言語で作っていましたから、C言語には慣れ親しんでいましたし、どの部分がネックになりそうかという勘所も心得ていました。言語は違ってもメール処理のロジックなどに関するノウハウは活かせるので、それがErlangでの開発でも活かせたと思います」(佐野氏)
自社開発で培ってきた技術力
ユミルリンクでは、現在約15人が製品開発に携わっており、そのうちの半数ほどがErlangを使いこなしているという。メイン言語はPerlとC言語だが、Erlangも徐々に浸透してその仲間入りをしつつあるようだ。佐野氏は、自社の技術陣について次のように語って自信を覗かせている。
「弊社では2003年以来メール配信のエンジン自体を独自で開発してきたので、システムの基幹部分をソースコードのレベルからチューニングできるという強みを持っています。パケットダンプの解析なども日常的に行っていますし、必要が生じればその都度専用のツールを作ってシステム内部の状態を可視化するという対策を取ることもあります。自社開発によってノウハウを積み重ねながら高いパフォーマンスを実現してきました」
同社では独自のフレームワークやライブラリの開発も積極的に進めており、その一部は外部向けにも公開されている。10年以上に渡って培ってきたノウハウに、Erlangという新しい武器を加え、今後もメール配信システムのパフォーマンスと安定性の向上に努めていくとのことだ。