基調講演以外のセッションも魅力たっぷり!
SpringOneでは基調講演以外にも、次のようなテーマで聞きどころたっぷりのセッションが多数行われました。ここからは基調講演以外で注目度の高かったセッションをいくつか紹介したいと思います。
- クラウドネイティブなSpringアプリケーション開発の事例や具体的な実装方法
- Springの中でも特に新しい領域(Reactiveプログラミング、マイクロサービスでのバッチ処理)
- マイクロサービス開発のデリバリを効率化するための仕組み
セッション「Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud First Future」
このセッションではDISH Networkから3名が登壇し、レガシーなシステムをいかにマイクロサービス化して改善したかについて話しました。
DISH Networkは衛星放送サービスの大手企業です。同社では1990年中盤から2000年代前半にかけ、システムをSOA(Service Oriented Architecture)で構築していました。 しかし、このシステムはJavaコードすら5%しかないレガシーなシステムで、 とても変更に弱い構造になっていたそうです。 そこで、DISH Networkはこの状況を改善するために、システムをマイクロサービスアーキテクチャに書き換えるという大きな方針転換を決断しました。
レガシーシステムからマイクロサービスへの移行は、次のように複数の段階(Stage)に分けて行われました。
- Stage 1
- レガシーなSOAPサービスのAPI仕様や挙動を変更することなく、Spring WS(@Endpoint)を使用したアプリケーションに作り直し、Pivotal Cloud Foundry上にデプロイできるようにした。
- Stage 2
- Stage 1のJavaコードを活用しつつ、SOAPサービスをSpring MVCベースのREST APIアプリケーション(@RestController)に作り直し、完全なマイクロサービスへ移行した。
Stage 1、2ともにSpring Bootを採用したことで、 環境ごとの設定の切り替えが簡易になり、セットアップ作業が大幅に削減されました。開発や運用にかかっていた負担も減ったとのことです。 このような段階的な移行は、現在も100を超えるレガシーなSOAPサービスに対して続けられており、7つのサービスをマイクロサービスへ移植できたそうです。
最後に彼らは、システムのマイクロサービス化を行う際の重要な点として、 「事前に移行対象のサービスのカテゴライズ」「スケープ決めや優先度付け」「適切な技術の選択を適切に行うこと」を挙げ、 ゆえにマネージャー層の理解や支援が不可欠であると強調しました。
セッション「Spring Boot @ PayPal」
PayPal上級ソフトウェアエンジニアのFabio Carvalhoさん(以下、Fabioさん)と同MTSソフトウェアエンジニアのEduardo Solisさんは、Spring Bootベースの新しい社内フレームワークについて講演しました。
PayPalでは2008年までC++を使って開発していましたが、それ以降はプレゼンテーション層にSpring MVCを利用した独自Javaフレームワークを導入。現在では250個ほどのサービスでJavaを使用しているそうです。
2014年、それまでのフレームワークを廃して新しく「Raptor」というフレームワークを作成しましたが、 「Raptorの設計思想はSpring Bootと類似点が多く、マイクロサービス化を目指すPayPalの目的にも合致することから、 RaptorをSpring Bootベースのフレームワーク(Raptor on Spring Boot)に作り変えることを決めた」(Fabioさん)とのこと。 ただし、Spring Bootをそのまま使うだけでは満たせない要件が複数あり、決して平坦な道ではなかったようです。
講演の後半では、2016年4月にRaptor on Spring Bootをリリースするまでに解決してきた課題について説明されました。 例えば、PayPalではRESTful Webサービスの実装にRESTEasyを採用しているため、Spring BootでRESTEasyを使うためのプロジェクトを立ち上げる必要があったそうです。 このプロジェクトはOSSとしてGitHub上で公開されています。
その他にも自社向けにいろいろカスタマイズしているそうですが、 「今後は独自の実装部分を削減し、Spring Bootの機能を活用する方向で改善を続けていく」と、意気込みを語っていました。 Spring Bootの機能を上手に使えば、独自の作り込みはほとんど不要だと感じているのかもしれません。
