テーマ:

どうもこんにちは。先日に引き続き技術本部の池田 (@yukung) です。少し日が空いてしまいましたが、 SpringOne Platform 2日目のレポートをお送りします。

 

他にもたくさんのセッションがありましたが、今回は私が聴講したセッションを中心にお届けします。セッション一覧はこちらです。

Main Stage

1日目と同様、冒頭は Main Stage という Keynotes セッションでした。

 

Keynotes 前半

主に前半は Cloud Foundry や OSS, Community の話や、ユーザーである Bloomberg, McKesson, Manulife といった企業がいかにしてソフトウェアを中心にした企業文化に変えていったのかといった culture の話、そして Cloud Foundry と Google, Microsoft, Accenture が協力関係を持ちながらどういった取り組みをしているのか、という話がありました。

 

個人的には Bloomberg, McKesson といった企業の企業文化の変革のエピソードは興味深く、 Bloomberg は production 環境に1日に 4000 デプロイしていたり、まずプロジェクトに CONTRIBUTE.md を作るようにして、 Pull Request を推奨するようにして社内に OSS のコントリビュート文化を取り入れるように変えていったそうです。 Mckesson は Fortune500 の5位に位置する企業ですが、彼らもまたソフトウェア中心の企業文化を強くアピールしていました。Marc Andreessen の

“ソフトウェアは世界を食う”

という言葉を引用しながら、 Uber, Facebook, Square, Twitter などのように、現在では既存のビジネスをソフトウェア中心の企業が食っていっている、コードはビジネスのために書くのだ、そしてビジネスロジックに集中し、生産性を上げろ、クリエイティビティを上げろ、そのために Spring Boot や Spring Cloud は強い味方となるだろう、という強いメッセージを発していました。"Embrace Software Driven Mindset." とも。

 

私が聞いていて特に感じたのは、どの企業も技術者だけではなく、ビジネスレイヤーの人たちがソフトウェアや技術に対してビジネスそのものだ、という強い意識を持っていて、ビジネスのスピードを上げるために Cloud Native や Microservices にするんだ、という考えを持って、トップダウンでそういう方向に舵を切っていっていることに驚きました。この辺りは、個人的に日本との違いを感じるところです。

Main Stage 後半

よりテクニカルな話になり、Spring 5 のロードマップや、今後出てくるであろう Java 9 との関係が話されました。 DI コンテナ内部の改善の話や、 Web アプリケーションをより効率的にする仕組みである HTTP2, Reactive Streams ベースのコントローラの導入、Lambda-oriented な HTTP ルーティングや処理の導入など、Spring Framework がより進化していくことを印象づける話でした。JDK9 については、おそらくスケジュールは遅れるものの、 Spring Framework 5.1 で JDK9 をフルサポートするそうです。

 

その後、 Spring5 の目玉の一つである Reactive Streams 対応についてクローズアップした話がありました。HTTP リクエストを捌くためにスケーラブルにするためのアーキテクチャモデルの変遷(古くは1リクエスト1プロセスの時代から、1リクエスト1スレッド、ロードバランサでの分散処理、そしてクラウド上での水平スケーリングへ)を前提にして、現在ではクラウド上で効率的にリソースを利用して elastic なスケーリングを実現したいはずが、現実はうまく行っていなかったり、コストが掛かってしまっているといった問題があるのではないか、という問題提起がありました。

 

そこで対応する一つの方法として、クラシックなサーブレットコンテナが提供する様なスレッドモデルではなく、Netty や Node.js でポピュラーとなった少ないスレッド数でも多くの処理が行えるノンブロッキングなランタイムでアプリケーションを開発することで、リソースが節約でき、より効率的にできるのではないかということでした。いわゆる C10K 問題の話ですね。

 

ただ、ノンブロッキングなプログラミングモデルはコールバックヘルに陥りがちで複雑になりやすいですが、Java8 で登場した java.util.concurrent.CompletionStage を使うことで宣言的に非同期処理を記述できるようになり、さらに java.util.stream.Stream を使うことでコレクションやストリームデータをうまく扱えるようになりました。ただそこに欠けていたのは、Java9 で標準化予定の Reactive Streams の仕様策定にも関わっている Doug Lea が言及した、アクティブになったデータを push スタイルの操作で、そこを補完するのが Reactive Streams である、という説明がありました。

 

Reactive Streams はとても小さくてシンプルな仕様で、登場するのは PublisherSubscriber しかおらず、そこに Subscriber からのボリュームコントロールを行う Buckpressure があるだけであるということ、そしてそれらがパイプラインのようにコンポーネント間を繋いでくれるということが説明されました。

 

Spring5 ではこれを Project Reactor で実現しようとしています。Project Reactor では、Reactive な Data Type として MonoFlux という型が提供され、 Mono が CompletionStage に当たるもので、Flux は Stream のように複数のストリームデータを扱うためのモデルになります。そしてこの Mono と Flux が、Spring エコシステムの中で複数のマイクロサービス間や分散データストアやメッセージブローカーを介して繋がり、全てがデータのストリームで表現できるようになる、というのが Spring5 で実現しようとしている世界である、というメッセージでした。

 

では具体的に Spring5 でどの辺りが変わるのかについては、以下の図がわかりやすいと思います。

 

Spring MVC での Controller のリクエストハンドラで、Reactive Type である Mono, Flux が引数や戻り値で扱えるようになる Spring Web Reactive が新しく提供されます。

 

これはまた RxJava とも互換性があります。

 

REST API から別のエンドポイントを叩く例では以下のように記述することができます。

 

また、それに伴って、HTTP リクエスト/レスポンスの読み書きに Reactive な HTTP API が使われるようになり、InputStream/OutputStream が Flux や DataBuffer などで表現され、HTTP ソケットとのやりとりが Backpressure 付きで扱えるようになります。

 

そして、それらの基盤となるサーブレットコンテナでは、ノンブロッキング I/O が利用可能になった Servlet 3.1 Container の Tomcat/Jetty だけでなく、Java でノンブロッキング I/O の先駆けであり、サーブレットコンテナではないランタイムである Netty や、同じくノンブロッキング I/O をサポートするWebコンテナの Undertow が Spring5 でサポートされます。

 

最後に、Reactive Streams 対応がその他の Spring プロダクトにどういう効果をもたらすかに触れ、例で上がっていたのは Spring Cloud Stream というマイクロサービス間のメッセージングを実現するフレームワークでも、Reactive な Type で input/output を扱うことで、同様に Reactive なプログラミングモデルで記述することができるとのことでした。

 

後半の Technical Keynote は、Spring エコシステムがどういう方向に向かっているかということを知ることで、自ずと Reactive Streams や Microservices、分散メッセージング等の技術がどう繋がっていくのかが想像できる話で、個人的にとても得るものが多かったです。この辺りについて詳しくは

  • https://spring.io/blog/2016/04/19/understanding-reactive-types

に記載されています。また日本語の資料としては @making さんの JJUG CCC 2015  Fall の資料がとても理解しやすいです。

Putting a SpEL on Spinnaker: Evolving an Expression Language for Continuous Delivery at Netflix

Spring Framework で利用できる式言語である SpEL(Spring Expression Language) を、Netflix OSS でも有名な Spinnaker で、パイプライン記述言語としてどのように使っているか、というセッションでした。 SpEL は他にはテンプレートエンジンの Thymeleaf でも使えることで知られていると思います。

 

Spinnaker は、マルチクラウド対応のインフラ・アプリのデプロイとクラスタ管理を実現し、継続的デリバリを自動化するソフトウェアです。Netflix は AWS のデプロイ・継続的デリバリの実現に Asgard という OSS を提供していましたが、その後継となるものです。

Spinnaker では、デプロイパイプラインを定義する際のステップの条件記述や、デプロイ単位のスタックの指定に SpEL で指定することができ、柔軟な記述が動的にできるとのことでした。動的に記述できることで記述量が減らせるので、パイプラインの定義がより気楽に行える、ということでしょうか。

 

また、セッション中のデモではインフラのデリバリを Jenkins のビルドパイプラインで構成して、AMI を指定して SpEL で記述されたコンフィグパラメータをインジェクションして、インスタンスの生成、テスト、Production への投入を自動化する例を実演していました。さらに SpEL の便利な使い方として、 Spinnaker では #alphanumerical や #fromUrl、#stage などのヘルパー関数を提供して、より簡単にかつパラメータチェックなども行えるようにしている、と言っていました。また、デモの中で、先日 Netflix からリリースされたマイクロサービスを可視化する Vizceral のデモをしていましたが、個人的にはこっちの方に興味を引かれてしまいましたw

Spinnaker の Pipeline Expressions のドキュメントはこちらにあるので、興味がある方はどうぞ見てみてください。


Architecting for Cloud Native Data: Data Microservices Done Right Using Spring Cloud

Data Microservices というデータに着目したマイクロサービスアーキテクチャを、Spring Cloud Data Flow と Spring Cloud Stream を使って実現するというセッションでした。

 

Data Microservices は、このセッションだけでなく他のセッションでも頻繁に聞かれたキーワードでしたが、このセッションで Data Microservices とはどんなものかイメージすることができました。マイクロサービスアーキテクチャと聞いてよくイメージされる、モノリシックなアプリケーションを分割したシステム的なアーキテクチャのコンセプトを、データ処理のプロセスも同じように適用します。モノリシックな1枚岩のデータ処理プロセスではなく、小さいプロセスを組み合わせることで、データを加工するプロセスをより迅速に開発し、リアルタイムにユーザに分析結果をフィードバックできるように、というのが Data Microservices のコンセプトだと思います。

 

コンウェイの法則で語られるように組織ごとにマイクロサービス化が進んでいっても、連携するシステムは相変わらずモノリシックだったり巨大なシステムが残り、それらを Integration Bus や ESB(Enterprise Service Bus) などで繋ぎ、ETL ミドルウェアで集約しデータ・ウェアハウスなどに蓄積するのが典型的なデータ分析のアーキテクチャですが、これは高価なソリューションであることが多く、また、夜間バッチなどで頑張って計算を行っているのが実情で、夜間バッチが遅れたりすれば分析業務にも影響が出ますし、リアルタイムな分析や機械学習は難しいという問題があります。

 

そこで Data Microservices では、モノリシックなデータ処理プロセスの一つ一つを分解し、それぞれをマイクロサービス化することで、迅速なデプロイや Blue-Green デプロイメントを可能にし、デリバリ速度を上げる事でデータ分析の精度を上げることができるということでした。

 

具体的には、一つ一つのデータ処理プロセスは Spring Boot のプロセスでマイクロサービス化し、それぞれのプロセス間や、メッセージキューなどの各種ミドルウェアとのメッセージングを Spring Cloud Stream で簡単に統合することができるそうです。

 

そしてこれらをクラウド上で実現することで、メトリクスやモニタリング、ログの集約やオートスケーリング、自動回復なども実現できるとも付け加えていました。また、データ処理パイプラインを Spring Cloud Data Flow を使って定義することで、それぞれのデータ処理プロセスをオーケストレーションすることができるようです。

 

ここまで説明したところで、デモとしてリアルタイムに入ってくる POS データを元にして機械学習を通して決済結果のリスク分析を行い、結果をリアルタイムにブラウザに出力するデモを披露していました。

デモ風景

デモのアーキテクチャ

 

こうした Spring Cloud Stream/Spring Cloud Data Flow を使ったアーキテクチャの全体像がこちらで、Business Microservices と Data Microservices とに分けられているのが特徴的です。

 

個人的にこの図を見た時に、Main Stage で紹介されていた Spring5 の Reactive Streams が目指す全てをストリームで扱える、という世界が具体的なイメージとして自分の頭の中に入ってきた感じがしました。

 

今回のデモはソースコードが GitHub にありますので、興味があれば是非読んでみてください。

 

Wall St. Derivative Risk Solutions Using Geode

ウォール街のデリバティブ取引のリスク分析に Apache Geode を使っている事例のセッションでした。が、ちょっと専門用語が多く、またスピーカーの喋り方がくぐもった声で聞き取りづらかったことで、あまり理解することができませんでした。。。そのうちセッションの動画が公開されると思うので、その際にまた見なおしてみたいと思います。Apache Geode 自体は、インメモリデータグリッドのソフトウェアで高速&スケーラブルである、ということくらいしかまだ知識がなかったのですが、セッション中で相当量のトランザクションを捌いている話をしていたと思うので、今後自分でも触ってみたいと思っています。

 

Cloud Native Streaming and Event-Driven Microservices

マイクロサービス間のメッセージングを行うフレームワークとしての Spring Cloud Stream の紹介と、その中身や仕組みについてコードやデモを交えて説明されていたセッションでした。上記で紹介した Data Microservices のセッションを見て、マイクロサービス間のメッセージングについてより興味が出てきていたため、Spring Cloud Stream の理解を深めるのにちょうどよいセッションでした。資料が公開されていましたので貼っておきます。

 

基本的には、Spring お得意のアノテーションを使って、メッセージの input/output を簡単に指定でき、具体的なメッセージングミドルウェアの実装も binder という概念で扱えるため、様々なメッセージングミドルウェアを透過的に扱える、という感じでしょうか。Spring Boot が基盤となっているため、アプリケーションを作るのも楽ちんなのが良いですね。

 

現在 Production Ready なミドルウェアとして、Apache Kafka や Rabbit MQ がサポートされており、Experimental ではありますが JMS や Google PubSub もサポートされているようです。他にも consumer ごとのグルーピングやパーティショニングなどもできるようです。セッションの最後に、Spring Cloud Stream 1.1 でサポートされる機能や、様々なデータソースのスキーマをバージョン管理する schema evolution の紹介や、将来的な展望も紹介されていました。

 

マイクロサービス化を進めていくと、この辺のメッセージングの仕組みも必要になってくると思うので、Spring Boot 同様、基盤となるソフトウェアになっていくかもしれないので、今後キャッチアップしていきたいですね。

 

Transforming the Monolith at 20M tph

2日目最後は、Comcast というケーブルテレビ・インターネットプロバイダの事業を行っている企業のマイクロサービス化の事例セッションを聴講しました。

 

内容としては、よく日本でも聞くような話でした。2億5000万/日の大規模トランザクションでかつ500台以上のサーバを抱える中で、以下の様な問題に直面したそうです。

 

  • レガシーなコードベース
  • 人手での手動オペレーション
  • 物理インフラ
  • ぐちゃぐちゃに混じりあったデータ
  • 開発速度が出ない

これだけでもどこかで聞いた話だなぁと思うわけですがw そんな中、Comcast は一つは文化的な側面、もう一つは技術的な側面という2つのアプローチで組織を変革していったそうです。

 

文化的な側面では、Dev, Ops, QA それぞれの間にあった壁を壊すために、一つのチームにそれぞれの役割を含むように変え、自己組織化を促していったそうです。

 

技術的な側面では、マイクロサービス化を進めていくとともに、データの責務を分けて整理したこと、そしてテクノロジースタックも

  • Weblogic -> CloudFoundry
  • Oracle -> Couchbase
  • IPベースのルーティング -> Consumer ベースのルーティング

に変えていき、CI やデプロイも

  • Jenkins -> GoCD
  • Maven -> Gradle
  • 自作スクリプト -> Continous Delivery

というモダンなものに変えていったそうです。

 

そうした変化が、現在では CloudFoundry 上でゼロダウンタイムデプロイを実現するプラグインや Canary デプロイメントを実現するプラグインを開発して OSS で公開するまでになったそうで、そうした成果は GitHub で公開されています。将来的には外部サービスの影響をさらに縮小し、より多くのサービスを CloudFoundry 上に持って行きたいとのことで、これからさらにマイクロサービス化を進めていくことが印象的でした。

 

個人的な印象として、アメリカでは AWS や Netflix の事例がよく挙げられるために企業のマイクロサービス化が大分進んでいるのだろうという思い込みがあったのですが、このセッションの他にもいくつかセッションを聞いていく中で、アメリカでもまだまだこれからマイクロサービス化しようとしている、もしくは現在進めている、という企業が多いことを知りました。こういう感覚を現地で知ることができたことも、今回来て良かったなぁと思うところでした。

2日目の感想

全体を通して、 Microservices と Reactive Streams、Data streaming, Messaging などが強調されたセッションが多かったと思います。そしてそれらをサポートするミドルウェアとしての Kafka や Geode, 統合するフレームワークとしての Spring Cloud が今後より進化していくことが印象的でした。これらの技術要素が結びついていくことが実感として感じられたことが、今日の大きな収穫です。

 

ただ大分広範囲に渡って色々出てきたので、日本に帰ってからキャッチアップするものがたくさんあって大変だなぁというw あと結構2日目も一日セッションだったので大分疲れました。部屋に戻ってから寝オチしていたのは内緒です。

 

明日は最終日ですが、まだまだ興味深いセッションが多いので明日も頑張ってレポートしたいと思います!

いいね!した人  |  リブログ(1)
同じテーマ 「海外」 の記事

テーマ:

秋葉原ラボの高野です。2016/07/29に日本心理学会第80回大会で村瀬美月氏、鈴木麗璽准教授、有田隆也教授(共に名古屋大学大学院情報科学研究科)との共同研究が発表されましたので、それについてご紹介いたします。

 

ソーシャルゲームでは、多くのヒトが思い思いに自由に行動した結果が詳細に記録されているため、ヒト行動の研究に有用です。これまで私たちはガールフレンド(仮)のデータを用いたヒトの協調行動について研究してきました(以下の関連発表を参照のこと)。本研究ではヒトの協調行動にコミュニケーションのタイプ(1対1、1対多、掲示板)が与える影響について知ることを目的として、そのデータを分析しました。その結果、1対1と1対多のコミュニケーションは協調行動に正の影響を与えることがわかりました。これはコミュニケーションの性質(時間的・心理的なコストなど)によってを効果が異なることを示唆します。また、社会関係の構築・維持におけるコミュニケーションの効果についても分析した結果を報告しました。

 

発表

  • M. Murase, M. Takano, R. Suzuki, and T. Arita, "A statistical analysis of play data in a social network game: Effects of communication on cooperative behavior", 31st International Congress of Psychology (ICP2016), Poster Presentation in Japanese, RC-05-2, 2016.

 

関連発表

1. M. Takano, K. Wada, and I. Fukuda, "Reciprocal Altruism-based Cooperation in a Social Network Game", New Generation Computing, 34, pp. 257-271, 2016.

2. M. Takano, K. Wada, and I. Fukuda, "How Do Newcomers Blend into a Group?: Study on a Social Network Game", 3rd International Workshop on Data Oriented Constructive Mining and Multi-Agent Simulation (DOCMAS) & 7th International Workshop on Emergent Intelligence on Networked Agents (WEIN) (workshop at WI-IAT 2015), 2015.

3. M. Takano, K. Wada, and I. Fukuda, "Environmentally Driven Migration in a Social Network Game", Scientific Reports, 5, 12481; doi: 10.1038/srep12481 (2015).

4. 高野雅典, 和田計也, 福田一郎, "ソーシャルゲームプレイヤーの協調行動の分析", 人工知能, Vol. 30, No. 1, pp. 74-82, 2015.

 

参考

 

いいね!した人  |  リブログ(0)

テーマ:

こんにちは。Ameba 統括本部のポイントプラットフォーム事業室でサーバーサイドエンジニアをやっている山田です。
普段はスプラトゥーンというゲームで狙撃手を務めつつ、ドットマネーという Ameba のポイントサービスの保守・開発をしています。

 

さて、今日も昨日に引き続き、 SpringOne Platform のレポートになります。
このイベントについて詳細を知りたい方は、昨日の記事をご覧ください。

TimeLine

今日のスケジュールはこんな感じ。

朝から晩までみっちり予定が入ってます。

Main Stage

9:00am から Main Stage が始まりました。

広くて薄暗い会場に重低音の効いた心地よい電子音が響き、否が応にも気持ちが高揚しました。

 

Pivotal の錚々たる方々が、手の込んだ Keynote で会場を湧かせます。技術的な話というよりは開発プロセスやチームビルドの話がメインで、 Cloud Foundry や Spring Boot、 OSS によりもたらされる DevOps や Microservice、 Continuous delivery の恩恵の話が多かったです。

 

最後は Stephane Nicoll と Josh Long の2人が、 Spring Framework 4.3、 Spring Boot 1.4 の新機能を漫才形式(?)で紹介して笑いをとっていました。

Test ユーティリティが充実したり、 Actuator で Gitコミットが見れたり、 Cache を同期化できたりと、様々な新機能が紹介されましたが、一番盛り上がったのは起動時のログに好きなロゴを表示できる機能だったと思いますw

Main Stage は間違いなくこのカンファレンスの一番の見所で、スケールの大きさ、クオリティの高さに終始圧倒されました。

Modern Java Component Design with Spring Framework 4.3

Main Stage 以降は、複数のルームでセッションがあるので、自分で何に参加するかを選択します。

まず Modern Java Component Design with Spring Framework 4.3 に参加。

Spring Framework 4.3 の新機能を Java8 のモダンな書き方で紹介してくれました。見たこともない機能などはなかったので、4.3 の新機能は普通にここで確認すると良いでしょう。

 

ちなみにこの 4.3 は、 4系で最後のマイナーバージョンになり、2019年までサポートが続くそうです。 4.2 のサポートはまもなく終了。

VerUp の時期を見計らっていた人は頃合いですね。

High Performance Microservices with Ratpack and Spring Boot

High Performance Microservices with Ratpack and Spring Bootに途中参加。

このセッションはソースコードを見ながらの解説がメインでした。

 

Ratpack とは、 Netty ベースの新しい 軽量な Web アプリケーションフレームワークです。Java8 か Groovy で開発できます。

これと Spring Boot で 高性能な Microservice を、という題材なので、興味を惹かれますよね。

 

ソースコードは Github に上げてくれているので、ご覧になってみてはいかがでしょうか?

s1p-high-perf-microservices

 

README.md に EC2 のインスタンス別でベンチマークが載っていますが、ちょっと信じられないような数字です。

Twelve Factor, or Cloud Native Apps

午後は、 Spring Boot と Cloud Native により Twelve Factor App を満たす、という内容のセッションでした。
が、私の英語力と前提知識がなさすぎて、今いち理解ができない部分が多かったため、説明を割愛します。
セッション自体も10分程度で終了し、後は質疑応答、という簡単なものでした。

Testing Spring Boot Applications

最後は Testing Spring Boot Applications

Spring Boot 1.4ではテスト関連の機能がたくさん追加されましたね。

  • 新しくなった @SpringBootTest
  • RANDOM_PORT で実際に起動した HTTP サーバーのテスト
  • @MockBean によるモッキング
  • @DataJpaTest による in-memory DB でのテスト
  • JSON のアサーション

といった機能の説明と実演をしてくれました。JSON のアサーション、毎回自分でゴリゴリ書くのは辛いので、地味だけど嬉しい機能ですね。

講演後は質疑応答の時間ですが、やはりテストコードは身近な問題なので、盛り上がってディスカッションのようになっていたのが印象的でした。

 

こちらも GitHub でコードが公開されています。

testing-spring-boot-applications

所感

最後に、海外のカンファレンスに初めて参加した立場から、感じたことを綴ってみます。

意外と忙しい

懇親会などは遅い時間まであり、また朝も早いので、時間の余裕はありません。

時差ボケも相まって、カンファレンス中にウトウトしてしまうこともしばしば。

時間管理をしっかりしないと大変です。

実はこの記事を書いている今も既に 2:30am... orz

会場が寒い

真夏のラスベガスなので、日中の外気温は40℃にも達しますが、会場内は冷房が効きすぎていて寒いです。

事前に参加経験者から忠告を聞いて用心していましたが、想像を超える寒さでした。

しかし現地の人はみんな半袖...

お祭り感がすごい

日本で開催される大きめのカンファレンスと比べても、演出が派手だったり、懇親会が豪華だったり、コミュニティが活性化するための努力が半端じゃないと感じます。お祭り感があってとても楽しいです。

 

ちなみに食事は朝昼晩すべてカンファレンス側が用意してくれます。贅沢ですね。

夜はお酒も出ます。

写真は、格闘ゲームで他国のエンジニアと交流する池田です。楽しそうですね。

 

書きたいことが多すぎて、取りとめのないエントリになりましたが、とにかく充実した時間を過ごせています。
エモいことも書きたい気分ですが、最終日も書く予定なので、今日はこのくらいで。

 

明日は池田の素晴らしい記事がありますので、期待していてくださいね。

いいね!した人  |  リブログ(0)