SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

イベントレポート

SpringOne Platform 2018 参加レポート~活用の場が広がるリアクティブ関連機能、急速に勢いを増すKubernetes関連技術への対応

活用の場が広がるリアクティブ関連機能

 Rossen Stoyanchevさんのセッション「Guide to "Reactive" for Spring MVC Developers」では、従来のSpring MVCを使っている開発者向けにリアクティブ対応APIの活用方法を紹介していました。このセッションは立ち見が出るほどの人気を博しており、Spring Framework 5.0で追加されたリアクティブ関連機能の活用シーンに多くの開発者が興味を抱いていることが分かります。

 同セッションでは、アプリケーションの一部だけでもリアクティブ化することで効果が発揮される例として、ブロッキングなクライアントであるRestTempleteによる実装をノンブロッキングなWebClientで置き換えるデモが披露されています。WebClientを用いることで複数のリクエストがそれぞれ非同期に処理され、全体としての処理時間が短縮される様子が確認できました。RossenさんはRestTempleteについて「直ちに廃止することはない」と強調しながらも、WebClientを「少し学習して適切だと思う場所で使ってみてほしい」と緩やかな適応を促していました。

コンソールの出力を見ると複数のスレッドで並列に処理されていることが読み取れる
コンソールの出力を見ると複数のスレッドで並列に処理されていることが読み取れる

 また、サーバーサイドの実装に関してはSpring MVCとWebFluxの公式のドキュメントを対比し、個別の機能に対応する実装がそれぞれにある(すなわちSpring MVCからWebFluxへの書き換えが可能である)ことをアピールしていました。

 局所的な利用ではなく、アプリケーションをフルスタックでリアクティブ対応させる場合には、データベースアクセスまで含めて考える必要があります。Ben Haleさんのセッション「Reactive Relational Database Connectivity」ではリレーショナルデータベースのアクセスに使われるJDBCがブロッキングであるという問題に対し、実験的なプロジェクトである"R2DBC"というリアクティブなAPIの紹介がありました。

 同一目的のAPIとしてはOracleが次期標準として提案している"ADBA"がありますが、Benさんは「ADBAのCompletableFutureを使った実装はReactive Streamsのバックプレッシャーに対応できず、非同期ではあるがリアクティブではない」と問題点を指摘し、「R2DBCプロジェクトの目的はADBAの設計に影響を与えることだ」と語っていました。

 その他、PivotalでReactorのプロジェクトリーダーを務めるStephane MaldiniさんとFacebookの開発者であるSteve Guryさんからは、リアクティブアプリケーションと親和性の高い新たなレイヤー7のネットワークプロトコルであるRSocketが紹介されました。

RSocketはHTTPと同じレイヤー7のプロトコル
RSocketはHTTPと同じレイヤー7のプロトコル

 現状、マイクロサービス内での通信など、さまざまなところでHTTPが広く用いられています。しかし、近年ではモバイルでサーバーからプッシュ通知を受けたり、スマートウォッチで運動中の統計情報をバックエンドサーバーとリアルタイムにやり取りしたりと、より高度なインタラクションが求められており、このような通信にはリクエスト・レスポンスが1対1となるシンプルなインタラクションを基本としたHTTPは本来向いていません。

 一方、RSocketでは4つのリッチなインタラクションモデルを持っており、さまざまなインタラクションをうまく扱うことができます。

  1. fire and forget
    レスポンスなしのリクエスト
  2. request / response
    HTTPと同様、1つのリクエスト対して1つのレスポンスを返す
  3. request / stream
    1つのリクエストに対して複数のレスポンスをストリームとして返す
  4. channel
    複数のリクエスト、複数のレスポンスをやり取りする双方向ストリーム

 また、RSocketは1つのコネクションで双方向の通信や多重化が可能となっており、HTTPよりも少ないオーバーヘッドで効率的に通信を行うことができます。

 さらに、フロー制御もサポートしており、Reactive Streamsのバックプレッシャーのような形で送信元に受け入れ可能なデータ量を伝えることで流量制御を実現することもできます。

 Steveさんからは、FacebookのLive Query(クエリ結果の変更をリアルタイムでクライアントに通知する機能)の処理を行うサーバーでRSocketを適用したところ、従来のポーリングモデルでの実装と比べてランニングコストを大幅に削減することができたという報告もありました。

 今後、リアクティブアプリケーションの開発でRSocketがどのように広がりを見せていくのか、注目しておきたいところです。

次のページ
Spring Cloud Stream 2.0、2.1の新機能も紹介

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

イベントレポート連載記事一覧

もっと読む

この記事の著者

SpringOne Platform 2018参加チーム(SpringOne Platform 2018サンカチーム)

【NTTソフトウェアイノベーションセンタ】岩塚卓弥、堅田淳也 【NTTデータ】岩本純佳、Jia Xiaozhou、鈴木友也 【NTTコムウェア】角田誠、山本佑也

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11180 2018/11/02 14:00

イベント

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

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

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

メールバックナンバー