エンタープライズJava環境における マイクロサービス・アーキテクチャーの必要性 2015/7/29 日本アイ・ビー・エム株式会社
by user
Comments
Transcript
エンタープライズJava環境における マイクロサービス・アーキテクチャーの必要性 2015/7/29 日本アイ・ビー・エム株式会社
エンタープライズJava環境における マイクロサービス・アーキテクチャーの必要性 2015/7/29 日本アイ・ビー・エム株式会社 IBM Systems アプリケーションプラットフォーム テクニカル・セールス 田中 孝清 © 2013 IBM Corporation Microservices Architecture 2 © 2015 IBM Corporation Microservices Architecture(MSA)とは きっかけ –ソフトウェア・ アーキテクチャーの大家 マーティン・ファウラーの 2014年3月の Blogエントリー http://martinfowler.com/articles/microservices.html 3 © 2015 IBM Corporation Microservices Architectureの基本思想 技術面:分散配置と統合 –サービスによるコンポーネント化 –スマートなエンドポイントと単純なパイプ処理 –分散データマネジメント –インフラの自動化 –フェイルを前提とした設計 文化面:持続性と分権 –ビジネスケイパビリティに基づく組織化 –プロジェクトではなくプロダクト –分散ガバナンス –進化的な設計 4 グロースエクスパートナーズ(株)鈴木雄介氏 「マイクロサービスアーキテクチャとは何か」より http://www.slideshare.net/yusuke/msa-share-02 © 2015 IBM Corporation Microservices Architectureアプリケーション 単一の(モノリシックな)アプリとして実装するのではなく, 複数のサービスの統合として実装する – 変更の影響範囲を極小化 – 機能の再利用を促進 5 http://martinfowler.com/articles/microservices.html © 2015 IBM Corporation どこかで聞き覚えが・・・ SOA:Service Oriented Architecture 2004〜 IBM,Gartner他 6 © 2015 IBM Corporation Microservices ArchitectureはSOAの進化型 Monolithic App SOA Micro-services モノリシック・アプリケーション –全体を単一のコードとして実装 SOA(サービス指向アーキテクチャー) –サブシステムごとに独立して実装/依存関係が可視化 MSA(マイクロサービス・アーキテクチャー) –システムを構成する機能(ファンクション)単位でサービス化 7 © 2015 IBM Corporation 粒度を細かくして機能単位のスケールアウトを実現 小さなサービス単位でプロセスを起動することで 負荷に応じた柔軟なスケールアウト(拡張)が可能に http://martinfowler.com/articles/microservices.html 8 © 2015 IBM Corporation 結局Microservice Architectureとは SOAを追求し,改善を続けていったらMSAになった –SOAからのいくつかの改良 • サービスの粒度は「企業の組織単位」ではなく「業務の機能単位」で • 通信経路は高機能なSOAP通信ではなく単純なREST通信も活用 • ESBは必須ではなくメッシュ型の直接呼び出しもOK 「新しく考え出された理想論」ではなく 多くの成功したWebシステムのに共通する 「観測された現実解」に名前をつけたもの 9 © 2015 IBM Corporation SOA / MSA導入の目的 変化への対応を早く オペレーションのスピード ミッション・クリティカルな アプリケーションの管理、運用 Systems of Record 成長機会のための 探索、開発、デプロイ Systems of Engagement サービスレベル重視 ウォーターフォール開発 スピード開発 試行錯誤、継続的デプロイ 長期に渡るシステム構築 早期のシステム構築/改修 数ヶ月〜数年 マラソンランナー 10 イノベーションのスピード 数日〜数週間 スプリンター © 2015 IBM Corporation MSAを必要とする「変化」とは 11 © 2015 IBM Corporation 企業のITシステムが直面する大きな変化 クライアント・ブラウザの進化 モバイルへの対応 外部システム連携・APIエコシステム 12 © 2015 IBM Corporation 企業のITシステムが直面する大きな変化(1) クライアント・ブラウザの進化 モバイルへの対応 外部システム連携・APIエコシステム 13 © 2015 IBM Corporation クライアント・ブラウザの変化 MSIE 6 全盛期(2000年代〜) – Windows XP+MSIE 6をターゲットにすればよかった – HTML4によるフォーム型Webアプリケーション + マルチ・ブラウザ時代(2010年代〜) – Firefox / Google Chrome / Safariなどモダンブラウザの台頭 – MSIEが7から11まで進化 / Windows 10ではEdgeが標準に – HTML5によるSPA型Webアプリケーション 14 © 2015 IBM Corporation 今まで以上にPLとBLの分離が必要に プレゼンテーション・ロジック(PL)の変化と ビジネス・ロジック(BL)の変化の速度の大きな不一致 – 頻繁な変更を要求されるプレゼンテーションロジック – 長期にわたって使用されるビジネスロジック 独立したシステムとして構築するメリットが増大 – PLとBLをサービスとして連携 プレゼンテーション ロジック 15 ビジネス ロジック © 2015 IBM Corporation Webアプリケーションの実装スタイルの変化 「サーバーサイドMVC」から「クライアントMVC」へ Web Browser Web Browser Application Application Data Store Controller HTTP Request HTML/JS Session Data Controller View Model Model Business Logic Domain Domain HTML/JS View RESTful or WebSocket JSON Model Domain Domain Business Logic Application Server 16 Application Server © 2015 IBM Corporation 企業のITシステムが直面する大きな変化(2) クライアント・ブラウザの進化 モバイルへの対応 外部システム連携・APIエコシステム 17 © 2015 IBM Corporation モバイル機器の急速な普及 世界 スマートフォン売り上げ台数(単位:千) Source: Wikipedia 18 http://en.wikipedia.org/wiki/Mobile_operating_system © 2015 IBM Corporation Webからモバイルアプリケーションへ モバイル対応の第一段階 –Webアプリケーションの画面をモバイル用にカスタマイズ 本格的なモバイル対応 –モバイル・アプリケーションの実装 • モバイル環境に最適化されたUI • GPSやカメラなどの機能の活用 • オフライン処理 19 © 2015 IBM Corporation モバイルアプリケーションのバックエンド連携 モバイルアプリケーションは(多くの場合MEAP経由で) バックエンドシステムをサービスとして利用 –必然的にSOA / MSAになる MEAP製品 Mobile Enterprise Application Platform 20 SOAP / HTTP 基幹システムや クラウド・サービス REST 基幹システムや クラウド・サービス ESB製品 基幹システムや クラウド・サービス © 2015 IBM Corporation 企業ITシステムが直面する大きな変化(3) クライアント・ブラウザの進化 モバイルへの対応 外部システム連携・APIエコシステム 21 © 2015 IBM Corporation APIの提供や活用による効果 新たなチャネルによ る収益の増大 APIの提供 今までにない新しい 顧客体験の実現 外部 APIs APIの活用 パートナー APIs Assets & Services 22 • Assembly • Transformation • Rationalization 社内 APIs • Discovery • Composition • Deployment Application End Points © 2015 IBM Corporation 実例:SNSアカウントをつかったログイン メリット –利用者を煩雑なユーザー登録処理から解放 –万が一の情報漏洩発生時のリスクを軽減 –SNS上のバイラル(口コミ)マーケティングの促進 デメリット –頻発する外部システムの 仕様変更への追随 23 © 2015 IBM Corporation アプリケーション・アーキテクチャーの刷新 24 © 2015 IBM Corporation 変革期を迎えているエンタープライズJava 2000年代に多くの企業で Javaを使用した業務アプリケーションのWeb化を実施 –J2EEアーキテクチャー –Struts / Spring / Hibernate などのOSSフレームワークの活用 更新と改良をつづけてきたアプリケーションの中には 現行アーキテクチャーの限界がみえてきたものも多い –Strutsなどのサポート終了とセキュリティ脆弱性問題 –旧APIのみを使用したアプリを互換性モードで稼働 –最新の要件への対応ができない 大きく進歩したJava EE 7の登場 25 © 2015 IBM Corporation 式年遷宮と増改築 数年に一度, いちから作り直す神社 増築と改築を重ねた 温泉旅館 あなたのITシステムは 「増築を重ねた温泉旅館」になってませんか? 26 © 2015 IBM Corporation ITシステムの「式年遷宮」のすすめ 一定期間毎に,新しいアーキテクチャーで再実装する効果 –使用しているH/Wやミドルウェアの陳腐化の影響を排除 –新しいアプリケーション・アーキテクチャーの取り入れ –世代を超えてシステムの構築スキル・構成知識を継承 システムの寿命を超えて使い続けると・・・ –長期延長保守のための高額なサポート費用 –時代のニーズを満たせない旧式のアプリケーション –構築した技術者の引退とともにシステムがブラックボックス化 27 © 2015 IBM Corporation 次世代をみすえ最新のアーキテクチャーへの移行を アプリケーション・アーキテクチャ –モバイル・HTML5クライアントへの対応 –Microservices Architectureの採用 –APIエコシステムの構築 アプリケーション開発体制 –Agile開発・継続的インテグレーション –DevOpsの実現 アプリケーション実行基盤 –クラウド環境の利用 –構築の自動化・Immutable Infrastructure 28 © 2015 IBM Corporation Java EE 7とWAS Libertyプロファイル 29 © 2015 IBM Corporation 2013年に正式版となった最新仕様:Java EE 7 Java EE 7の三つのゴール –HTML5環境への対応 –開発生産性の向上 –エンタープライズ・ニーズへの対応 大幅な機能拡張 30 © 2015 IBM Corporation Java EE 7 の主なAPI群 JSR 342: Java Platform, Enterprise Edition 7 – HTML5環境への対応 • JSR 344: JavaServer Faces (JSF) 2.2 • JSR 353: Java API for JSON Processing (JSONP) 1.0 • JSR 356: Java API for WebSocket 1.0 • JSR 339: Java API for RESTful Web Services (JAX-RS) 2.0 – 開発生産性の向上 • JSR 345: Enterprise JavaBeans (EJB) 3.2 • JSR 346: Contexts and Dependency Injection for Java EE (CDI) 1.1 • JSR 907: Java Transaction API (JTA) 1.2 • JSR 349: Bean Validation 1.1 – エンタープライズ・ニーズへの対応 • JSR 343: Java Message Service (JMS) 2.0 • JSR 338: Java Persistence API (JPA) 2.1 • JSR 236: Concurrency Utilities for Java EE 1.0 • JSR 352: Batch Applications for the Java Platform 1.0 31 © 2015 IBM Corporation JAX-RS 2.0:JavaでRESTfulなWebサービスを実現 アノテーションベースでRESTfulなWebサービスを実装 @Path("repository") public class TestRepositoryService { @Path("version") @GET @Produces("text/plain; charset=UTF-8") public String getVersion() { return "Test Service version 1.0"; } JAX-RS 2.0の新機能 – クライアント用のAPI – 非同期クライアント・非同期サーバー – メッセージ・フィルタ およびエンティティ・インターセプター • ヘッダやコンテンツを操作するインターセプター Response response = ClientBuilder.newClient() .target("http://www.foo.com/book") .request(MediaType.TEXT_PLAIN) .get(); 32 © 2015 IBM Corporation CDIによるアプリケーション内のPL / BLの分離 画面デザイン 依存性注入・ビジネスロジック –JSF / EL / Servlet / JSP 外部連携 DB連携・ORマッピング –JAX-RS / WebSocket –JAX-WS CDI 33 –CDI / EJB / JTA JSF JAX-RS JSP / EL WebSocket –JPA . EJB / JTA JPA Database © 2015 IBM Corporation CDI使用のメリット 外部接続のパラメーターのハードコーディングの防止 –ネーミングサービス利用からアノテーション指定へ コンポーネント間の依存性の除去 –モックやスタブを利用したテストが容易に 本番環境で インジェクション 実際の サービス実装 業務DB @Inject Service s; テスト環境で インジェクション 34 テスト用の スタブ ダミーデータ © 2015 IBM Corporation WebSphere Application Server Java EE7対応 IBMのWAS Libertyプロファイルは6月25日出荷の V8.5.5.6でJava EE 7のFull Platformに対応 http://www.ibm.com/jp/press/2015/06/1601.html 35 © 2015 IBM Corporation WASの新しいランタイム:Libertyプロファイル 軽量ランタイム Java EE 7準拠 メモリー使用量が小さい: 60MB程度〜 ディスク使用量も100MB以下 Java EE 7のFull Platform標準に 準拠したアプリを完全サポート JAX-WS, JAX-RS, JMSもサポート 起動が速い 起動時間: 5秒程度 簡単な構成と動的変更 最低限必要な構成ファイルは server.xmlひとつだけ デフォルトベースで簡単構成 構成変更は再起動なしに反映 自動化ツールとの連携 多くのOSSツールに 無償でプラグインを提供 WAS V8.5.5 Liberty & WDT 統合ツール(WDT) 高機能なEclipse用の連携ツールを無償で提供 Eclipseから簡単に使用可能 36 Unzipによる導入とデプロイ パッケージをした サーバー + アプリ + 構成情報を Unzipでデプロイ可能 © 2015 IBM Corporation API・サーバー機能をFeatureとして定義 必要なものだけを構成 – 設定されたものだけがメモリにロード・初期化される → 最小限の起動時間・メモリー使用 <featureManager> <feature>jsp-2.3</feature> <feature>jdbc-4.1</feature> <feature>jaxrs-2.0</feature> <feature>sessionDatabase-1.0</feature> <feature>ssl-1.0</feature> </featureManager> 依存関係も 自動的に解決 構成ファイル server.xml sessionDatabase JAX-RS JSON SSL JDBC JSP Servlet © 2015 IBM Corporation Libertyプロファイルで提供されているFeature(抜粋) zosConnect-1.0 zOS zosSecurity-1.0 zosTransaction-1.0 zosWlm-1.0 zosLocalAdapters-1.0 scalingController-1.0 collectiveController-1.0 ND clusterMember-1.0 scalingMember-1.0 dynamicRouting-1.0 Base wsSecurity-1.1 wasJmsServer-1.0 mongodb-2.0 jms-1.1 jaxb-2.2 wmqJmsClient-1.1 jmsMdb-3.1 mdb-3.1 jcaInboundSecurity-1.6 jaxws-2.2 wasJmsClient-1.1 wasJmsSecurity-1.0 couchdb-1.0 jca-1.6 ldapRegistry-3.0 Core New in 1Q15 New in 4Q14 38 jaxrs-1.1 collectiveMember-1.0 osgiConsole-1.0 adminCenter-1.0 json-1.0 restConnector-1.0 oauth-2.0 osgiAppIntegration-1.0 concurrent-1.0 timedOperations-1.0 openid-2.0 wab-1.0 monitor-1.0 webProfile-6.0 sessionDatabase-1.0 webCache-1.0 openidConnectClient-1.0 blueprint-1.0 serverStatus-1.0 distributedMap-1.0 spnego-1.0 ejbLite-3.1 jdbc-4.0 ssl-1.0 jdbc-4.1 jsf-2.0 jndi-1.0 beanValidation-1.0 websocket-1.1 websocket-1.0 jsp-2.2 appSecurity-2.0 cdi-1.0 el-3.0 jsonp-1.0 servlet-3.0 managedBeans-1.0 jpa-2.0 jsp-2.3 servlet-3.1 openidConnectServer-1.0 © 2015 IBM Corporation パッケージ作成による複数環境の導入 開発環境でテストしたアプリケーションだけでなく 製品の構成・Fixpackレベルまでふくめて そのまま本番環境へ移行することが可能 –サービス単位でZIPを作成 –使用するFeatureだけパッケージされるので最小サイズのZIPに –必要に応じて展開・実行することで容易にスケールアウト ③アプリ開発 ②サーバー構成 ①インストール 開発環境 テスト・本番環境 ディスク ディスク アプリ サーバー構成 ④パッケージ ⑤展開 アプリ サーバー構成 Liberty Profile Liberty Profile Java SDK 39 ZIPファイル Java SDK © 2015 IBM Corporation Libertyとマイクロサービスの記事を公開中 JAX-RS/CDIのサポートで マイクロサービスの 開発も容易に 〜Java EE 7正式対応で 大幅強化された 「WebSphere Application Server Liberty Core」 http://codezine.jp/article/detail/8834 Codezine マイクロサービス で検索 40 © 2015 IBM Corporation 41 © 2015 IBM Corporation