2015年2月17日火曜日

リアルタイム分析とリアルタイム通信

データアナリティクス事業部の宮本です。





現在データアナリティクス事業部ではApamaというリアルタイムで大量データを分析する製品を扱っています。製品を扱っている中で色々と利用シーンなどを考えていると、いくらリアルタイムで分析できても、利用者に分析したデータをリアルタイムで提供できないと効果が薄くなってしまうだろうなと思うことがありました。

例えば、株価の動きをリアルタイムで分析して、値上りしそうな銘柄を株取引している方へ表示するようなシステムの場合、いくら分析側の処理を早くしても、表示側の処理が遅いと実際に株取引をする時には値上りしそうな銘柄でなくなってしまうことも考えられます。

このような場合、分析処理のリアルタイム性も重要ですが、ユーザーへ分析した情報を提供する際のリアルタイム性も重要だということです。

今回は情報をリアルタイムに配信する際に必要な技術として、リアルタイム通信技術について3つピックアップしてまとめてみました。

  1. Websocket
    Webにおいて、クライアントとサーバー間が双方向通信を低コストで行う仕組みです。
     一般的なクライアント・サーバーの通信で使われるHttp通信では基本的にはクライアントからのリクエストをサーバーがメッセージを返却しますが、双方向通信では、サーバーが主導になりサーバーからクライアントへプッシュでメッセージを送ることが可能になります。
    Http通信でもCommetと呼ばれるロングポーリングの技術で、擬似的に双方向通信を行うことは可能ですが、通信コストが大きくあまり実用的ではありませんでした。
     Websocketの登場により、サーバーからクライアントへのリアルタイムな情報配信が低コストで実装することが可能になりました。

     先述の株価のシステムなど、多数のクライアントへサーバーからリアルタイムに情報を配信するような仕組みに適した技術といえると思います。
  2.  WebRTC
    Websocketのクライアント・サーバー間の双方向通信する仕組みに対して、WebRTCはサーバーを通さずに複数のクライアント間で通信する仕組みです。ブラウザを使ったビデオチャットなどに使われる技術なのですが、映像や音声のデータはサーバーを通さずにブラウザ間で直接行われるため、サーバーへの負荷が大きくならず実装も比較的容易です。 ただし、iOSのデフォルトブラウザであるSafariは対応しておらず、iOSで使う場合はBowserというオープンソースのブラウザを使用する必要があります。
     Bowser
    http://www.openwebrtc.io/bowser/
  3. MQTT
    MQTT(Message Queue Telemetry Transport) は、Message Queueなど使われるpublish/subscribeモデルに基づく軽量なメッセージプロトコルで通信する仕組みです。
    不安定なネットワーク上でも動作するための機能や非力なデバイスで動くための軽量化などが特徴です。通信効率がHttpに比べて圧倒的に良いので、マシンデータやセンサーデータを通信する際に活躍するプロトコルです。
     この技術自体は2000年頃に出てきているそこまで新しい技術ではありませんが、IoTが話題に上がり始めた頃から再度注目を浴びてきています。
    MQTTは今まで紹介した2つの技術とは違い、httpではないプロトコルと使うため、基本的にMQTTを使う時のクライアントはブラウザ以外のものになります。家電の中に組み込まれるセンサーや車載センサーなどとサーバーの間でメッセージをやり取りする際に使用されるような用途がイメージしやすいのではないかと思います。

     また、Websocketと組み合わせることで、WebブラウザからMQTTサーバーと通信する方法もあるようです。
    Paho WebSockets
    http://wiki.eclipse.org/Paho/Paho_Websockets

今回取り上げた3つの技術は、特に真新しいわけではなくここ数年で話題になってきていて、ようやくここ最近で色々なところで実用されてきている技術です。3つの技術の共通点リアルタイムな通信を低コストで行うために使われる技術ということですが、それぞれ特徴、用途や通信を行うデバイスが違っています。
これらの技術を正しく理解して、リアルタイム分析と合わせて最適なリアルタイムコミュニケーション技術を選択することで、よりリアルタイム性が高いシステムを構築することができるのではないでしょうか。

参考:
Websocketについて調べてみた
http://south37.hatenablog.com/entry/2014/09/07/WebSocket%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82

HerokuのWebSocketでC10Kに挑戦(前篇)
http://blog.flect.co.jp/labo/2014/04/herokuwebsocket-12d8.html

MQTTについてのまとめ
http://tdoc.info/blog/2014/01/27/mqtt.html

ビデオチャットもさくっと作れる! WebRTCによるブラウザ間リアルタイム通信はじめの一歩
http://codezine.jp/article/detail/8099



0 件のコメント:

コメントを投稿