• 投稿日
  • SORACOM Beamが新たにUDP to HTTP変換に対応

    はじめに

    SORACOMの安川です。

    9/30の発表時にSORACOM Airと同時に発表したデータ転送支援サービスSORACOM Beamですが、10月に値下げも発表し、様々なユースケースでのご利用が広がっています。IoTデバイスからのデータ転送を少しでも手軽に省電力にという思いが届き始めているようで、とてもうれしく思っています。

    そんなSORACOM Beamに新たな機能UDP to HTTP(S)変換が加わったことを発表しました。そこで早速この機能についてご紹介したいと思います!

    UDP to HTTP(S)変換ってどういうこと?

    SORACOM BeamではTCPソケットで送られたデータをHTTPで指定されたエンドポイントにPOSTするという機能をサポートしていました。今回発表した新機能は、UDPで同様のことを実現する機能です。つまりUDPパケットをSORACOM Beamのエンドポイントに送っていただくと、そのペイロードをSORACOM側で指定されたHTTPエンドポイントにPOSTしてくれます。

    これにより、HTTPヘッダ等のオーバヘッドはもちろん、TCPのハンドシェイクすらスキップしてデータを指定のサーバに転送することが出来ることから、データ転送量の削減、デバイス側処理負荷の低減が期待できます。またハンドシェイクをスキップできることから、データ転送の即時性も上がります。Round Trip Timeが大きくなりがちな3Gネットワークでは特に差が出てくると思います。

    また、TCPの場合と同様、サーバ側からのレスポンスコード及びメッセージは返るので、レスポンスを受信することで、簡易的なデータの到達確認やエラー検知が可能です。

    beam_tcp_L4_view.png

    Device<->Beamエンドポイントの通信についてL4で見たところ(TCPの場合)

    beam_udp_L4_view.png

    Device<->Beamエンドポイントの通信についてL4で見たところ(UDPの場合)

    UDP to HTTP(S)変換の使いドコロ

    いいこともたくさんあるUDP to HTTP(S)ですが、注意すべき点もあります。UDPはTCPとは異なり、転送されたパケットが損失した場合の再送処理や、順序保証を提供しませんし、大きなデータを送る際にデータを複数のセグメントに分割して送るといった機能も提供しません。

    特にパケットの損失はそのままデータ転送の失敗に直結するので、データの到達性保証が必須でないユースケースか、再送処理をアプリケーション側で対処出来る場合にご利用を検討頂くのが良いかと思います。

    早速試してみる。

    設定方法はTCP to HTTP(S)変換の場合と同様です。

    1. まずSORACOM Beamの設定項目で追加ボタンを押して、「UDP -> HTTP/HTTPSエンドポイント」を選びます。

      add_udp_to_http_config.png

    2. 次に宛先のHTTP(S)エンドポイントを設定し、保存します。

      edit_udp_to_http_config.png

    以上で設定は完了です。早速動作確認をしてみましょう。

    動作確認のためにはUDPパケットを送る必要があります。例えばnetcatというツールを使うとTCPの場合と同様に可能です。

    $ echo "test" | nc -u beam.soracom.io 23080
    200 Success {"payload"=>"dGVzdAo="} => test
    

    実際にパケットをキャプチャしてみると、純粋に1往復のパケットのやり取りだけでデータが送られたことが確認できると思います。

    開発に至った経緯

    SORACOM Beamは元々、HTTPからHTTPS、MQTTからMQTTS、TCPからTCP over TLSへといった暗号化レイヤの追加からスタートしました。その機能があれば大分デバイス側の処理を楽にできるだろうと考えて、一部のお客様にご紹介したところ、返って来たのは:

    「HTTPですらもうデバイス側のバッテリを多く消費しちゃうし、データ転送のオーバヘッド大きすぎるのですよね」

    というフィードバックでした。なるほど、お客様のニーズはまだまだその先にあったようです。そこで急遽、TCPで送られたデータをHTTPでPOSTするという処理のサポートを追加しました。これにより、デバイスからは単にTCPソケットを張って、データをソケットを通じて送るだけで、HTTPのオーバーヘッド無しで任意のHTTPエンドポイントにデータを送り込めます。もちろんクラウドサービスも呼び出せます。

    これを持って再びお客様のフィードバックを聞いたところ

    「TCPだとソケット張りっぱなしにしない限り、最初にハンドシェイクが必要で、オーバヘッド大きいですよね」

    というようなものでした。なるほど、まだ足りてなかったようです。そしてよくよくヒアリングしてみると、このフィードバックを下さったお客様のユースケースだと、少量のデータを一定期間おきに送る必要がある一方で、データの到達性は必ずしも保証される必要はないとのことでした。そうして実装するに至ったのが今回のUDP to HTTP(S)変換機能でした。

    実はこのフィードバックはかっこいいパーソナルモビリティデバイスを開発・販売されているWHILLさんから頂いたものです。実際に今、UDP to HTTPS変換を使った検証をして頂いています。

    whill_case_study.png

    この機能のリリースにあたって、WHILL CTOの福岡さんからコメントを頂きました。

    SORACOM Beamを使うことで、通信量及び通信のための電力消費の削減が見込めるデータが取れています。機能もさることながら、私たちが感銘を受けたのはユーザーに対して真摯に向き合う姿勢と、リクエストへの対応の速さです。今後規模が拡大していっても、このスタンスが変わらないことを期待してます。 WHILL株式会社 最高技術責任者 福岡 宗明

    まとめ

    SORACOM Beamの新機能、UDP to HTTP(S)変換機能を使えば、最小限のオーバーヘッドで各種クラウドサービスやオンプレミスサーバに安全にデータの送信が出来ます。是非ご活用下さい!

    また、SORACOMはご利用の皆様のフィードバックを受けて進化するプラットフォームですので、皆様のご要望をいろいろお聞かせ下さい!