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