セッション「Introduction to Spring WebFlux」
続いて、Daveさんのセッションでも強調されていたSpring Framework 5.0の目玉機能「Spring WebFlux」について、Pivotalの槙さんによるセッションが行われました。
セッションタイトルについて、ご本人も「”Introduction to”というより”Deep dive into Spring WebFlux”かもしれない」とおっしゃっていた通り、デモやソースコード例をたくさん盛り込んだ濃密なセッションでした。
![Pivotalの槙 俊明さん](http://cz-cdn.shoeisha.jp/static/images/article/10590/10590_003.jpg)
セッションの冒頭では、Spring WebFluxを利用して作られたデモシステムが披露されました。このデモシステムは、IoTデバイスと通信して情報をリアルタイムにグラフ表示することを想定したシステムで、実際にインターネット経由でアクセス可能な状態となっています。
槙さんがその場にいる聴講者にデモシステムへアクセスするようお願いすると、約80名が一斉にアクセスを行い、グラフがリアルタイムに変化する様子を見ることができたのですが、なんとこのシステムは1~10という非常に少ないスレッド数で動いているというのです。
従来のServletを利用したWebアプリでは1リクエストを1スレッドで処理するため、多くのリクエストを同時に処理するためには、その分多くのスレッド数が必要でした。しかし、Spring WebFluxを利用したリアクティブなWebアプリでは、リクエストをノンブロッキングで処理し、わずかなスレッド数でも多くのリクエストに対応できるようになります。これまでいろいろな場所でリアクティブ対応の効果を耳にしてきましたが、実際にこういったデモシステムを目にすることで、その効果をより強く実感することができました。
デモの他にも、Spring WebFluxのベースとなるReactive Streamsの解説や、Reactive Streamsの実装「Reactor」のサンプル、Spring WebFluxとSpring MVCでのControllerの実装方法による動作の違い、コンテントネゴシエーションにおけるバックプレッシャー(Reactive Streamsが備える流量制御の仕組み)が効くケース・効かないケース、新しいプログラミングモデルであるRouter Functionsなどが紹介されました。Spring WebFluxの背景から細かい実装ノウハウまで幅広く、充実した内容でした。
また、Spring Framework 5.0からは、従来HTTPクライアントとして使われてきたRestTemplateのリアクティブ対応版、WebClientが新たに追加されています。このWebClientはSpring WebFluxだけでなくSpring MVCでも利用できるそうで、リアクティブ対応を進めていく際はHTTPクライアントにWebClientを使うところからスタートするのが良いのではないか、というお話もありました。
これからSpring WebFluxを使ってみたい人には、有用な知識やノウハウを得ることのできたセッションだったのではないでしょうか。
セッション「エンタープライズ開発で利用するSpring Boot」
株式会社ビッグツリーテクノロジー&コンサルティング(BTC)の廣末さんによるセッションでは、Spring Bootを利用した開発プロジェクトについて事例紹介が行われました。
![ビッグツリーテクノロジー&コンサルティングの廣末 丈士さん](http://cz-cdn.shoeisha.jp/static/images/article/10590/10590_004.jpg)
Springユーザであれば多くの方がご存じの通り、Spring Bootを利用するとシンプルな設定と実装でアプリケーションが簡単に作成、デプロイできます。しかしエンタープライズの開発では、開発者に実装を一任するとプロダクトコードが望むものになってない場合も多いといいます。このセッションでは、アプリケーション基盤が設計・開発・運用の各フェーズでSpring Bootのデフォルト実装を補う必要がある課題に対して、BTC社がどのようにアプローチしているのかを取り上げ、実際の開発プロジェクトのソースコードを用いて解説いただきました。
課題として挙げられた内容はいずれもエンタープライズ開発では必ずと言っていいほど直面するものばかりで、皆さんもそれぞれの方法で対処していると思いますが、他社の解決策をソースコードレベルで参照する機会はあまりないと思います。筆者もアプリケーション基盤の担当者として大変参考になりました。
紹介されたコードはGitHubで公開されており、利用可能のようです。より楽な開発のため一度参照してみてはいかがでしょうか。
セッション「Yahoo! JAPANのコンテンツプラットフォームを支えるSpring CloudStreamによるマイクロサービスアーキテクチャ」
最近ではマイクロサービスアーキテクチャの考え方も浸透しつつあり、大規模なシステムの刷新に成功したという事例も次第に聞かれるようになってきています。このセッションでは、ヤフー株式会社の鴨志田さんが、Springを用いて自社サービスをマイクロサービスアーキテクチャに刷新した過程をお話しされました。
![ヤフー株式会社の鴨志田 智弥さん](http://cz-cdn.shoeisha.jp/static/images/article/10590/10590_005.jpg)
Yahoo! JAPANでは、そのホームページを訪れてみると分かる通り、Web上で非常に数多くのコンテンツが公開されています。第三者との契約により提供されているものも多く、Yahoo! JAPANはこういったコンテンツの入稿配信のために、コンテンツプラットフォームと呼ばれるシステムを構築しています。
このコンテンツプラットフォームは、かつてはPHP、Perl、Cなどで記述されたレガシーな構成をしており、モノリシックな作りであるがためにリファクタリングがしづらく、PaaSへの移行が難しい、といった問題を抱えていました。
アーキテクチャ刷新後の新システムは、オンプレミス環境に構築したPivotal Cloud Foundry上で、Spring Bootベースのサービスが約20個連動する構成となり、設計の柔軟性の向上、運用コストの低減など、既存システムの課題を大きく改善したとのことです。
また、Yahoo! JAPANの新システムを支える要素として不可欠だったのが、講演タイトルにもなっているSpringのメッセージングシステム、Spring Cloud Streamです。Yahoo! JAPANでは、新システムでの非同期処理を担う機能として、Apache PulsarというPub/Subシステムを採用し、Spring Cloud Streamと連携させるためのブローカーを内製し利用しています。新システムでは、非同期処理の活用により、既存システムへの影響を抑えた機能拡張等が以前よりも簡単に行えるようになったようです。
さらに今後も、Kotlinの検討や、マイクロサービスアーキテクチャ用ツールのさらなる導入を考えているとのことで、より良いサービスへと柔軟に変化しようとするエンジニアの気質を感じることのできるセッションでした。