SHOEISHA iD

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

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

キーパーソンインタビュー(AD)

毎時300万通のメール配信を可能にする高速リレーサーバをErlangで実現

「Cuenote SR-S」開発担当者、佐野拓氏インタビュー

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

 ユミルリンク株式会社が提供している「Cuenote SR-S」(キューノート エスアールエス)は、メール配信における未達や遅延などのトラブルを改善するために開発された、リレーおよびメール文書作成サーバーである。1時間あたり300万通のメール配信を実現するこの製品の開発には、プログラミング言語「Erlang」が採用されているという。そこで今回は、Cuenote SR-Sの開発を担当した同社開発本部 開発グループの佐野拓氏にお話を伺った。

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

ユミルリンク株式会社 開発本部 開発グループ
PDチーム スペシャリスト 佐野拓 氏
ユミルリンク株式会社 開発本部 開発グループ PDチーム スペシャリスト 佐野拓 氏

高速リレーサーバ「Cuenote SR-S」の魅力

 顧客向けの案内メールなどのように一度に大量のメール配信を行う場合、正しく配信されなかったり、遅れて配信されたりするケースが多々ある。代表的な原因としては、配信先の増加によってメール配信システムの時間辺りの配信数の上限を超えてしまうケースや、無効なアドレスを正しく管理できていないケースなどが挙げられる。また携帯電話向けに配信する場合などには、同じドメインから同時に大量のメールを送るとキャリア側の制限によって配信が中断されてしまうことも多い。

 リレーサーバであるCuenote SR-Sの魅力は、これらの問題を既存の配信システムに改修を加えることなく導入できるという点である。簡単に説明すると、Cuenote SR-Sはメール配信のためのネットワーク経路上に配置し、他のメールサーバやメール配信システムからメールの文面を受け取って、登録された配信先に転送する。このとき、配信先ごとに配信する速度や時間帯を制御したり、エラーアドレスやバウンスメールの管理を適切に行うなど、さまざまな視点に基づく対策によって前述のような問題を回避し、遅配や不達のない安定したメールの配信を可能にする。

 「メール配信の場合、すでに自前のシステムで運用されているというお客様が少なくありません。その場合、既存システムの資産を活かしたい、使い勝手を変えたくないという声も多く聞かれます。Cuenote SR-Sであれば、既存のシステムはそのまま利用しながら、配信速度の向上や配信遅延の解消などを実現し、大規模配信に対応させることができます」(佐野氏)

 単にリレー配信するだけでなく、Cuenote SR-Sにはメール文書の生成機能も備えられており、テンプレート機能や文字列の差込機能、ブロック単位での差し替え機能などによって、配信先一通ごとにカスタマイズされたメールを送ることができる。携帯電話の絵文字やデコメールに対応しているため、キャリアごとに適したフォーマットに変換して送ることもできるようになっている。

 標準でAPI機能を備えており、外部システムと柔軟に連携できる点も大きな特長。APIを利用することで、サーバの状態や配信状況の確認、ログデータの取得、各種の取得や変更、メールテンプレートの作成やメール送信指示などを外部から行うことができる。

リレーサーバである「Cuenote SR-S」を使うと、
既存システムを変更することなく大量メール配信時の様々な問題を解決できる
リレーサーバである「Cuenote SR-S」を使うと、既存システムを変更することなく大量メール配信時の様々な問題を解決できる
ドメインごとの配信状況を管理している様子
ドメインごとの配信状況を管理している様子

Erlangの採用により、3か月で実装

 多くの機能を備えたCuenote SR-Sだが、その特筆すべき点の一つとして、これがErlangを使用して実装されているということが挙げられる。Erlangはエリクソン社によって開発された関数型プログラミング言語であり、ネットワーク通信処理や複数プロセスの並列・並行処理に優れているという特長がある。Erlangを採用するに至った経緯について、佐野氏は次のように語っている。

 「最初のきっかけは、Rubyの開発者であるまつもとゆきひろさんが『Rubyistのための多言語探訪』という連載の中でErlangを紹介されていたことです。ネットワーク性能が高く、業務で活用されている実績もあるということで興味を持ち、まずはプライベートな時間に自分で試してみました。そこで意外と使い物になりそうだという感触があり、通信コードを使ったベンチマークでもある程度の性能が出たので、製品開発にも耐えられると判断して会社に提案しました」

 実際に製品開発に使ってみた実感として、「とにかくネットワーク処理を実装するのが楽。並列処理について何も考えなくてもいいという点も大きな魅力」と同氏は語る。メール配信システムの場合、高速な送信を実現するためには通信の多重化が必要になってくる。従来製品ではこの多重化処理をC言語で記述していたが、リソース消費量を抑えるためにシングルプロセス・シングルスレッドでのI/O多重化方式を使用していたため、並列制御が容易ではなかった。

 その点Erlangの軽量プロセスであれば、プロセス間の状態遷移を意識しなくても、仮想マシンがうまくI/Oの並列化を行なってくれる。1つの軽量プロセスは極めて少ないメモリで動作するため、数万プロセスの並列処理でも問題なく実行することができる。

 初めて使う言語だったが、「C言語で記述するよりはるかに楽に実装できた」と佐野氏は言う。開発にかかった期間はおよそ3か月。C言語で実装した既存製品に比べて格段に短期間での開発だったとのことだ。

 同氏は、上記の他に、無停止でパッチを反映させられる点や、実行中のVM内部の情報をリモートシェル機能で参照できる点などもErlangの魅力として挙げている。

Erlangにアタッチしてキュー管理プロセスの状態を見ている画面
Erlangにアタッチしてキュー管理プロセスの状態を見ている画面

次のページ
課題だった実行速度は、入念なプロファイリングとC言語化で解決へ

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

  • このエントリーをはてなブックマークに追加
キーパーソンインタビュー連載記事一覧

もっと読む

この記事の著者

杉山 貴章(スギヤマ タカアキ)

有限会社オングスにて、Javaを中心としたソフトウェア開発や、プログラミング関連書籍の執筆、IT系の解説記事やニュース記事の執筆などを手がけている。そのかたわら、専門学校の非常勤講師としてプログラミングやソフトウェア開発の基礎などを教えている。著書に『Javaアルゴリズム+データ構造完全制覇』『Ja...

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

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6966 2013/02/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング