Go言語で並列性を高めて高速化を実現、サーバ1台で秒間3万5000通のプッシュ通知を実行する「BoltzEngine」[PR]

2018年6月5日

Webブラウザの「Sleipnir」や高機能スクリーンショットツール「SnapCrab」などでよく知られているフェンリルは、モバイルアプリケーション、カスタムアプリケーションの開発も得意としています。

例えば、女子バレーボール元日本代表監督やスタッフ、チームメンバーらがiPadで参照していたバレーボール専用の分析アプリ「VLabo」は同社が開発したもの。ほかにも生放送のテレビ番組と連係するモバイルアプリケーションなど、300社500本以上のアプリケーション開発実績を持ちます。

フェンリルフェンリル株式会社

同社がこうしたモバイルアプリケーションの開発を請け負うようになったのは、Sleipnirの開発者である柏木泰幸氏(現フェンリル代表取締役社長)が10年以上前にSleipnirのソースコードが入ったパソコンを盗まれてしまったという、知る人ぞ知る事件が背景にあります。

ソースコードを失った状態から再びSleipnirを作り上げるためにフェンリル株式会社が設立され、その後Sleipnirで培ったデザイン力や技術力を活かす形で、同社はモバイルアプリケーションの開発へ参入するのです。

現在も続くそのビジネスのなかで開発されたのが、バックエンドとしてサーバ1台で1秒間に約3万5000、1分間で210万通ものプッシュ通知を高速に送信できる「BoltzEngine」(ボルツエンジン)です。

BoltzEngine

プッシュ通知とは、モバイルデバイスを中心に使われている機能です。アプリケーション側からメッセージや音などを発し、新しい情報やイベントの発生などを利用者に知らせることができます。最近ではモバイルデバイスだけでなく、Webブラウザにも「Web Push」と呼ばれるプッシュ通知を受け取る機能が搭載されるようになりました。

BoltzEngineはこれらモバイルOSとWebブラウザ、さらにKindle Fireにも対応したプッシュ通知を行えます。

BoltzEngineは、生放送のテレビ番組と連係するモバイルアプリケーション向けにプッシュ通知を行うために数年前から開発が進められ、実際に本番環境で大規模なプッシュ通知サーバとして使われてきました。すでに何年もの期間、性能と安定性の実績を積み重ねてきたソフトウェアです。

クラウドでもオンプレミスでもプッシュ通知し放題

BoltzEngineは、オンプレミスあるいはクラウドなどで利用可能なソフトウェアです。Windows Server、Linuxのいずれにも対応し、しかもデータベースに依存しないため、柔軟な実行環境を選択可能。

世の中にはクラウドサービスとしてのプッシュ通知サービスが多数存在していますが、BoltzEngineであれば事実上どのクラウドやホスティングサービスでも、あるいはオンプレミスのサーバで運用したいというニーズにも対応する自由度を得られます。

また、クラウドサービスなどで提供されているプッシュ通知サービスは基本的に従量課金で、プッシュ通知の実行数に比例して費用がかかります。しかしBoltzEngineはパッケージソフトなので、いくら大量のプッシュ通知を行おうとも追加料金は必要ありません。

BoltzEngine fig3

数十秒で100万通をプッシュ通知する高速性

BoltzEngineの最大の特徴は、その高速性にあります。

「特になにもしなくても1秒あたり3万5000通、ネットワーク速度やデータベースへのアクセスなどをチューニングすれば5万通のプッシュ通知を送信できます。1台のサーバでこれだけの性能が出ますので、100万通程度までは1台で十分でしょう。ネットワークの状況によっても変わるのですが、生放送のテレビ番組での利用では100万通を16秒で送ったこともありました。複数サーバでの利用も簡単ですが、そこまでの規模は普通は必要ないと思います」(フェンリル アプリケーション共同開発部 門多恭平氏)

しかし開発当初は全然性能が出なかったと、開発担当者の1人である門多氏は振り返ります。「PHPとMySQLで作った最初のバージョンは、数千程度のデバイスへ送信するのには使えたのですが、数十万デバイスでは処理が全然終わらない。性能が出ませんでした」

その後C言語で書き直したものの改善には至らず、Rubyでスレッドを用いた並列処理も試したものの、思ったほどの性能向上にはなりません。

ボトルネックはどこにあるのか? 調査した結果、データベースから送信先を示すデバイストークンを取得し、送信処理へ順番に渡しているという処理が、並列化による高速化を難しくしていることを発見します。

「こうしてボトルネックを排除するだけでなく、並列化に関してはもっと書きやすい言語を採用して徹底的にやらないといけないのではないかと考え、複数台のサーバで連携させることも簡単そうだったGo言語にたどり着きました」(門多氏)

2013年当時のGo言語は現在ほど知名度も実績もなかったため、採用には社内の説得が必要だったと門多氏。「Goって大丈夫なの? っていろんな人に言われました。プロジェクトリーダーからはRubyが、別のスタッフからはC#がいいんじゃない? とも言われましたね」(門多氏)

そんな中、門多氏は、Go言語が並列処理を記述しやすく扱いやすいこと、実装に当たっては実験などを十分にやったうえで行うことなどを約束し、「Goで押し切った感じです」(門多氏)

こうして、さまざまなボトルネックを解決しつつGo言語による並列処理を実装し、高い性能を実現したBoltzEngineができあがることになります。

管理ツールのBoltzMessengerをオープンソースで公開

BoltzEngineのもう1つの特長はシンプルさと拡張性です。

BoltzEngineはインストーラに沿って簡単に導入可能。コアとなる配信エンジンを単体で起動してCSVファイルを読み込ませればすぐに使い始められるほど簡単でシンプルな構造になっています。この構成では、データベースとの接続なども必要もありません。

gRPCのAPIを公開しているため、管理ツールを用いずに外部アプリケーションから配信エンジンに対するコントロールも可能になっています。JavaやC#、PHP、Pythonなどメジャーな言語から呼び出せます。

もちろん、標準の管理ツール「BoltzMessenger」も同梱。

BoltzMessengerからは、即時配信、予約配信、性別やOSのバージョン、アプリの最終起動日などの条件によって配信先を絞り込めるセグメント配信、メッセージ配信数を秒単位で細かく調整することでネットワーク帯域やサーバへの負荷に配慮できる配信速度制御など、配信におけるきめ細かなBoltzEngineの制御が容易になっています。

しかもこのBoltzMessengerやSDK、リファレンスのソースコードなどはすべて製品に同梱されているため、プッシュ通知の配信システムとはどういうものなのかがソースコードから読み取れるだけでなく、自由にカスタマイズして自社専用の配信システムを作り上げることができます。

BoltzEngine fig4BoltzMessengerの画面

価格やさらに詳しい情報

BoltzEngineであれば、スケーラブルなプッシュ通知の展開、セキュアな環境での柔軟な運用、リーズナブルかつ明確なコストの実現といった、多様なニーズに合致するプッシュ通知サーバが構築できるはずです。

BoltzEngineの価格、さらに詳しい情報、事例などは、ぜひBoltzEngineのWebサイトでご確認ください

BoltzEngine - フェンリル

(本記事はフェンリル株式会社の提供によるタイアップ記事です)

あわせて読みたい

運用・監視 PR モバイル




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本