SlideShare a Scribd company logo
1 of 39
Copyright 2017 FUJITSU LIMITED
MicroProfile
背景と意義、そしてこれから
2017年3月21日
数村 憲治
0
JJUG ナイト・セミナー
Copyright 2017 FUJITSU LIMITED
アジェンダ
Java EEではだめなのか
仕様が先か、実装が先か
MicroProfile 1.1
MicroProfileとは
サマリ
1
自己紹介
Copyright 2017 FUJITSU LIMITED
Java VM Developer
JCP Executive Committee
富士通沼津工場に勤務
Interstage Application Serverの開発
@kkzr
2
Copyright 2017 FUJITSU LIMITED
アジェンダ
Java EEではだめなのか
仕様が先か、実装が先か
MicroProfile 1.1
MicroProfileとは
サマリ
3
MicroProfile.io
Copyright 2017 FUJITSU LIMITED
An open forum to optimize Enterprise Java for a
microservices architecture by innovating across
multiple implementations and collaborating on
common areas of interest with a goal of standardization.
The Mission
4
マイクロサービスアーキテクチャ(MSA)
Copyright 2017 FUJITSU LIMITED
マイクロサービスアーキテクチャとは
モノリシックなソフトウェアではなく、
疎結合な小さなサービスの集合・分散
サービスとして実装するアーキテクチャ。
マイクロサービスが訴求するのは
意思決定とビジネスの速さ
マイクロサービスの価値
Observe
Orient
Decide
Action
OODAループ
迅速な意思決定を助けるアーキテクチャと
フィードバックループによる進化
5
アプリケーション
サーバー
MSAレイヤーと要素技術
Copyright 2017 FUJITSU LIMITED
VM/コンテナ
アプリケーション
サーバー
アプリケーション
docker
memory
footprint
resiliency
IaaS
PaaS
ステートレス
API化
サービス分割
サーバレス
非同期
REST
MicroProfile 1.0
Java EE 7
Java EE 8/9
MSAで必要な機能
(3)(2)
(1)
(1)JAX-RS、CDI、JSON-P
(2)Websocket、JPA等
(3)Healthcheck等
6
Java EE にも Profile
Copyright 2017 FUJITSU LIMITED
Java EEにProfileを追加できるのはOracleだけ
Java EE Full Profile
Java EE Web Profile
Java EE Micro Profile
追加
7
Java EE 歴史
Copyright 2017 FUJITSU LIMITED
JSR
Initiation
Early Draft
Review
Public
Review
Final
Release
J2EE 1.4 2001/10 - 2002/5 2003/11
Java EE 5 2004/5 2005/4 2005/6 2006/5
Java EE 6 2007/7 2008/10 2009/1 2009/12
Java EE 7 2011/5 2012/4 2013/1 2013/5
Java EE 8 2014/8 2015/10 2017/7?
J2EE 1.2 J2EE 1.3
J2EE 1.4
Java EE 5
Java EE 6
Java EE 7 Java EE 8
2000 2005 2010 2015 2020
リリース間隔
8
JCPステージ
Copyright 2017 FUJITSU LIMITED
Initiation Draft
Release
Final
Release
Main-
tenance
Expert Group設立
(SpecLead)
最終承認投票
(EC)
保守投票
(EC)
ドラフト
レビュー
JSR
レビュー
ドラフト承認投票
(EC)
RI & TCK
(EG)
JSR承認投票
(EC)
9
Java EE 8 状況
Copyright 2017 FUJITSU LIMITED
JSR 機能 状況
(2016/3)
状況
(2017/3)
366 Java EE 8 Platform EDR EDR2
367 JSON-B 1.0 – JSON Binding EDR PR
371 MVC 1.0 – Model View Controller EDR2 EDR2
372 JSF 2.3 – Integration with WebSocket EDR FD
369 Servlet 4.0 – HTTP/2 EDR EDR
365 CDI 2.0 – outside of Java EE container EDR PR
375 Security API - EDR
370 JAX-RS 2.1 – non-blocking I/O - EDR
373 Management 2.0 - WD
380 Bean Validation 2.0 - EDR
368 JMS 2.1 EDR WD
374 JSON-P 1.1 EDR FD
10
GlassFish issues
Copyright 2017 FUJITSU LIMITED
created
resolved
11
Copyright 2017 FUJITSU LIMITED
アジェンダ
Java EEではだめなのか
仕様が先か、実装が先か
MicroProfile 1.1
MicroProfileとは
サマリ
12
仕様が先か、実装が先か
Copyright 2017 FUJITSU LIMITED
仕様が先
実装が先
仕様策定に時間がかかる
公正な議論と、複数実装による適切な競争
イノベーションに向いている
どこで誰が仕様を決めているか不明
13
JCP v.s. OpenJDK
Copyright 2017 FUJITSU LIMITED
JEPによる開発
JDKのオープンソース Java SE の RI
JCP
JSRによる開発
(Java Enhancement Proposal)
openjdk.java.net
OpenJDK
14
JCP構成
Copyright 2017 FUJITSU LIMITED
Executive Committee
JSR
JCP member
非営利団体
企業
個人
Oracle 1シート
Elected 6シート
Ratified 16シート
SpecLead 1-2名
Expert Group 数名選出
承認
設立
Associate 2シート
15
OpenJDKとMicroProfile
Copyright 2017 FUJITSU LIMITED
競争原理が働かない
ベンダ独自実装期間が短い
JSR開始から仕様FIXまで、時間が短い
OpenJDKの仕様が
Java SEの仕様になる
Java SE Java EE
Microprofileの仕様が
Java EEの仕様になる
競争あり
マルチベンダによる実装
16
Copyright 2017 FUJITSU LIMITED
アジェンダ
Java EEではだめなのか
仕様が先か、実装が先か
MicroProfile 1.1
MicroProfileとは
サマリ
17
MicroProfile沿革
Copyright 2017 FUJITSU LIMITED
2016年6月設立
2017年1月 富士通が参加
2016年9月 JavaOne で Version 1.0 リリース
2017年2Q Version 1.1 リリース予定
2017年3Q Version 1.2 リリース予定
18
MicroProfileとは
Copyright 2017 FUJITSU LIMITED
市場が評価
NG
OK
APSベンダーが
MicroProfileを提供
フィードバックを反映
JCPへ提案
アジャイル的に
OODAループを実践
最終的にはJCPへ
19
Copyright 2017 FUJITSU LIMITED
アジェンダ
Java EEではだめなのか
仕様が先か、実装が先か
MicroProfile 1.1
MicroProfileとは
サマリ
20
MicroProfile 1.0
Copyright 2017 FUJITSU LIMITED
2016/9 JavaOneでリリース
JAX-RS
CDI
JSON-P
21
MicroProfile 1.1
Copyright 2017 FUJITSU LIMITED
2017/2Q リリース予定
Configuration API
Health Check API
JWT Token Definition
Fault Tolerance (stretch goal)
22
Configuration API
Copyright 2017 FUJITSU LIMITED
設定の外だし
別環境への移動時等、設定変更のためのリビルドを不要に
環境が変更するたびに、リデプロイが不要に
設定動的反映
Netflix/archaiusの考え方
優先度づけされた複数の設定(ConfigSource)で構成
1. システムプロパティ
2. 環境変数
3. 設定ファイル
META-INF/microprofile-config.properties
高
(優先順位)
低
23
Configuration API
Copyright 2017 FUJITSU LIMITED
Config config = ConfigProvider.getConfig();
ConfigValue portConfig =
config.access(“com.fujitsu.interstage.port”)
.as(Integer.class)
.cacheFor(5, TimeUnit.MINUTES)
.logChanges(true)
.evaluateVariables(true)
.withDefault(8080);
Integer port = portConfig.getValue();
5分間キャッシュする
Apache DeltaSpike由来のAPI
org.apach.delatspike.core.api.config.Config.Resolver
値が変化したらINFOログ
出力
${foo}のような変数の再評価
24
Configuration API
Copyright 2017 FUJITSU LIMITED
@Inject
@ConfigProperty(
“com.fujitsu.interstage.port”,
cacheFor=5,
timeUnit=TimeUnit.MINUTES,
evaluateVariables=true)
ConfigValue<Integer> portConfig;
int port = portConfig.get();
アノテーションも使えるように
25
Interoperable JWT RBAC
Copyright 2017 FUJITSU LIMITED
OpenID ConnectベースのRole Based Access Control
OpenID ConnectのIDトークンに
認可のためのクレームを加えたbearer/accessトークン
が提案されている
まだ具体的な仕様は少ない
HTTPヘッダからトークン情報を取得したり、ハンドリングす
るAPIも考えられているが。
JavaOne 2016のMicroProfile Meetingでセキュリティとして
優先だが高いとされた
26
Interoperable JWT RBAC
Copyright 2017 FUJITSU LIMITED
{
"iss": "https://server.example.com",
"sub": "24400320",
"preferred_username": "jdoe",
"aud": "s6BhdRkqt3",
"nonce": "n-0S6_WzA2Mj",
"exp": 1311281970,
"iat": 1311280970,
"auth_time": 1311280969,
"realm_access": {
"roles": ["role-in-realm", "user", "manager"]
},
"resource_access": {
"my-service": {
"roles": [
"role-in-my-service"
]
}
},
例:
27
Service Healthchecks
Copyright 2017 FUJITSU LIMITED
アプリケーションのヘルスチェックをするRESTエンドポイント仕様
Consumer Producer
Health Check Procedure
GET /health
200:UP
or
503:Down
全てのProcedureを実行し、
結果をまとめてJSONで返却
Kubernetes health check互換
Health Check ProcedureHealth Check Procedure
チェック対象のアプリケーションProducerの生存を特定するマシン
(Kubernetesとか)
28
Service Healthchecks
Copyright 2017 FUJITSU LIMITED
Health Check Procedureの例 (JAX-RS)
@Path("/app")
public class HealthCheckResource {
@GET
@Path("/diskspace")
@Health
public HealthStatus checkDiskspace() {
long freeBytes = path.getFreeSpace();
long threshold = 1024 * 1024 * 100; // 100MB
return freeBytes>threshold ?
HealthStatus.named("diskspace")
.up().withAttribute("freebytes", freeBytes) :
HealthStatus.named("diskspace")
.down().withAttribute("freebytes", freeBytes);
}
29
Fault Tolerance
Copyright 2017 FUJITSU LIMITED
RetryPolicy
Fallback
アプリケーションの実行論理と実行時のエラーハンドリングを
分離する機能
CircuitBreaker
BulkHead
Timeout
30
Fault Tolerance
Copyright 2017 FUJITSU LIMITED
RetryPolicy rp = retryPolicy
.retryOn(TimeOutException.class) // リトライの条件
.withDelay(2, TimeUnit.SECONDS) // リトライ間隔
.withMaxRetries(2); // リトライ回数
Connection conn = execution
.with(rp) // RetryPolicyの設定
.withFallBack(this::connectToBackup)
// getのリトライに失敗した際の処理
.get(this::connectToPrimary)
RetryPolicy
Fallback
31
Fault Tolerance
Copyright 2017 FUJITSU LIMITED
CircuitBreaker cb = circuitBreaker
.withFailureThreshold(3, 10)
.withSuccessThreshold(5)
.withDelay(1, TimeUnit.MINUTES);
Connection conn = execution.with(cb).run(this::connect);
CircuitBreaker
closed
CircuitBreaker
open
CircuitBreaker
half-open
10回中3回失敗した 5回連続成功した
正常時
リクエスト送信遮断なし
リクエスト送信遮断
1分後
5回連続成功しなかった
リクエスト送信再開
CircuitBreaker
32
Fault Tolerance
Copyright 2017 FUJITSU LIMITED
@Inject
@CircuitBreaker (
delay=1, failThreshold=3, successThreashold=5)
CircuitBreaker cb;
Connection conn = execution.with(cb).run(this::connect);
CircuitBreaker (アノテーションでも)
33
Fault Tolerance
Copyright 2017 FUJITSU LIMITED
BulkHead bh = bulkHead.withPool(“myPool”);
Connection conn = execution
.with(bh)
.run(this::connect);
Connection connect = execution
.withTimOut(2, TimeUnit.SECONDS)
.run(this::connect);
BulkHead
処理ごとに個別のスレッドプールを使用することで、
異常時の影響を分離
Timeout
34
Copyright 2017 FUJITSU LIMITED
アジェンダ
Java EEではだめなのか
仕様が先か、実装が先か
MicroProfile 1.1
MicroProfileとは
サマリ
35
サマリ
Copyright 2017 FUJITSU LIMITED
フィードバックループによるマイクロサービスを実践
既存のJavaコミュニティを分裂するものではない
アプリケーションポータビリティ
最終的にはJCPで標準化
オープンイノベーション
実装(ベンダー)を選択可能
36
37
Copyright 2017 FUJITSU LIMITED
Javaは、Oracle Corporationおよびその子会社、関連会社の米国および
その他の国おける登録商標です。
本ドキュメントに記載されている、社名、商品名等は各社の商標または
登録商標である場合があります。
その他の記載されている、商標および登録商標については、
一般に各社の商標または登録商標です。
38

More Related Content

What's hot

What's hot (20)

Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
Azure Network Security Group(NSG) はじめてのDeep Dive
Azure Network Security Group(NSG) はじめてのDeep DiveAzure Network Security Group(NSG) はじめてのDeep Dive
Azure Network Security Group(NSG) はじめてのDeep Dive
 
Keycloak で SSO #渋谷java
Keycloak で SSO #渋谷javaKeycloak で SSO #渋谷java
Keycloak で SSO #渋谷java
 
JDK:新しいリリースモデル解説 @ 熊本・福岡
JDK:新しいリリースモデル解説 @ 熊本・福岡JDK:新しいリリースモデル解説 @ 熊本・福岡
JDK:新しいリリースモデル解説 @ 熊本・福岡
 
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションレガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
 
Cloud OS Tech Day 2014:Windows Azure Pack プライベートクラウドとセルフポータル(仮)
Cloud OS Tech Day 2014:Windows Azure Pack プライベートクラウドとセルフポータル(仮)Cloud OS Tech Day 2014:Windows Azure Pack プライベートクラウドとセルフポータル(仮)
Cloud OS Tech Day 2014:Windows Azure Pack プライベートクラウドとセルフポータル(仮)
 
Kubernetes on Azure ~Azureで便利にKubernetesを利用する~
Kubernetes on Azure ~Azureで便利にKubernetesを利用する~Kubernetes on Azure ~Azureで便利にKubernetesを利用する~
Kubernetes on Azure ~Azureで便利にKubernetesを利用する~
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight Keycloak
 
WildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE Apps
 
俺的 Build 2021 Update まとめ
俺的 Build 2021 Update まとめ俺的 Build 2021 Update まとめ
俺的 Build 2021 Update まとめ
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
今すぐ試せるブルーグリーンデプロイメント入門とその実装 - OpenStack最新情報セミナー(2017年3月)
今すぐ試せるブルーグリーンデプロイメント入門とその実装 - OpenStack最新情報セミナー(2017年3月)今すぐ試せるブルーグリーンデプロイメント入門とその実装 - OpenStack最新情報セミナー(2017年3月)
今すぐ試せるブルーグリーンデプロイメント入門とその実装 - OpenStack最新情報セミナー(2017年3月)
 
クラウド上のシステム監視 入門編
クラウド上のシステム監視 入門編クラウド上のシステム監視 入門編
クラウド上のシステム監視 入門編
 
ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編
ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編
ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編
 
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
 
2016 1102 EnOcean Alliance Japan Event
2016 1102 EnOcean Alliance Japan Event2016 1102 EnOcean Alliance Japan Event
2016 1102 EnOcean Alliance Japan Event
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
 
OpenStackネットワーク実装の 現状と運用自動化開発の実際 第二部:運用自動化開発の実際 – OpenStack最新情報セミナー 2015年7月
OpenStackネットワーク実装の 現状と運用自動化開発の実際 第二部:運用自動化開発の実際 – OpenStack最新情報セミナー 2015年7月OpenStackネットワーク実装の 現状と運用自動化開発の実際 第二部:運用自動化開発の実際 – OpenStack最新情報セミナー 2015年7月
OpenStackネットワーク実装の 現状と運用自動化開発の実際 第二部:運用自動化開発の実際 – OpenStack最新情報セミナー 2015年7月
 

Viewers also liked (7)

CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
 
Challenge for GlassFish Builpack
Challenge for GlassFish BuilpackChallenge for GlassFish Builpack
Challenge for GlassFish Builpack
 
Python + GDB = Javaデバッガ
Python + GDB = JavaデバッガPython + GDB = Javaデバッガ
Python + GDB = Javaデバッガ
 
JavaDayTokyo2015 [3-1]
JavaDayTokyo2015 [3-1]JavaDayTokyo2015 [3-1]
JavaDayTokyo2015 [3-1]
 
The Monitoring and Metic aspects of Eclipse MicroProfile
The Monitoring and Metic aspects of Eclipse MicroProfileThe Monitoring and Metic aspects of Eclipse MicroProfile
The Monitoring and Metic aspects of Eclipse MicroProfile
 
Soft layer users_community_20140523_bitisle_narisako_subset
Soft layer users_community_20140523_bitisle_narisako_subsetSoft layer users_community_20140523_bitisle_narisako_subset
Soft layer users_community_20140523_bitisle_narisako_subset
 
Javaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使うJavaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使う
 

Similar to microprofile

C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
Insight Technology, Inc.
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)
Kazuho Oku
 

Similar to microprofile (20)

今のJava
今のJava今のJava
今のJava
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
 
[ダウンロード推奨]OOW2017 and Javaone2017 report Daisuke Nishino(Sompo Systems)
[ダウンロード推奨]OOW2017 and Javaone2017 report Daisuke Nishino(Sompo Systems)[ダウンロード推奨]OOW2017 and Javaone2017 report Daisuke Nishino(Sompo Systems)
[ダウンロード推奨]OOW2017 and Javaone2017 report Daisuke Nishino(Sompo Systems)
 
JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれ
 
LIGでのDocker活用
LIGでのDocker活用LIGでのDocker活用
LIGでのDocker活用
 
Tin Can Moodle(j)
Tin Can Moodle(j)Tin Can Moodle(j)
Tin Can Moodle(j)
 
【15-E-7】セキュアな環境でDevOpsを実現する厳選ツール
【15-E-7】セキュアな環境でDevOpsを実現する厳選ツール【15-E-7】セキュアな環境でDevOpsを実現する厳選ツール
【15-E-7】セキュアな環境でDevOpsを実現する厳選ツール
 
Javaユーザに知ってほしい Processing入門
Javaユーザに知ってほしいProcessing入門Javaユーザに知ってほしいProcessing入門
Javaユーザに知ってほしい Processing入門
 
JDK: 新しいリリースモデル解説(ver.2.0)
JDK: 新しいリリースモデル解説(ver.2.0)JDK: 新しいリリースモデル解説(ver.2.0)
JDK: 新しいリリースモデル解説(ver.2.0)
 
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
 
OpManager導入事例 日テレITプロデュース様
OpManager導入事例 日テレITプロデュース様OpManager導入事例 日テレITプロデュース様
OpManager導入事例 日テレITプロデュース様
 
WWDC2017 レポート & Quick Look Preview Extension について
WWDC2017 レポート & Quick Look Preview Extension についてWWDC2017 レポート & Quick Look Preview Extension について
WWDC2017 レポート & Quick Look Preview Extension について
 
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
 
裏クラウドデザインパターン
裏クラウドデザインパターン裏クラウドデザインパターン
裏クラウドデザインパターン
 
JDK:新しいリリースモデル解説 @ 岡山・広島
JDK:新しいリリースモデル解説 @ 岡山・広島JDK:新しいリリースモデル解説 @ 岡山・広島
JDK:新しいリリースモデル解説 @ 岡山・広島
 
Yahoo! JAPANのOSS Cassandra貢献の今までとこれから
Yahoo! JAPANのOSS Cassandra貢献の今までとこれからYahoo! JAPANのOSS Cassandra貢献の今までとこれから
Yahoo! JAPANのOSS Cassandra貢献の今までとこれから
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)
 
Com camp2014
Com camp2014Com camp2014
Com camp2014
 

microprofile

  • 1. Copyright 2017 FUJITSU LIMITED MicroProfile 背景と意義、そしてこれから 2017年3月21日 数村 憲治 0 JJUG ナイト・セミナー
  • 2. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 1
  • 3. 自己紹介 Copyright 2017 FUJITSU LIMITED Java VM Developer JCP Executive Committee 富士通沼津工場に勤務 Interstage Application Serverの開発 @kkzr 2
  • 4. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 3
  • 5. MicroProfile.io Copyright 2017 FUJITSU LIMITED An open forum to optimize Enterprise Java for a microservices architecture by innovating across multiple implementations and collaborating on common areas of interest with a goal of standardization. The Mission 4
  • 6. マイクロサービスアーキテクチャ(MSA) Copyright 2017 FUJITSU LIMITED マイクロサービスアーキテクチャとは モノリシックなソフトウェアではなく、 疎結合な小さなサービスの集合・分散 サービスとして実装するアーキテクチャ。 マイクロサービスが訴求するのは 意思決定とビジネスの速さ マイクロサービスの価値 Observe Orient Decide Action OODAループ 迅速な意思決定を助けるアーキテクチャと フィードバックループによる進化 5
  • 7. アプリケーション サーバー MSAレイヤーと要素技術 Copyright 2017 FUJITSU LIMITED VM/コンテナ アプリケーション サーバー アプリケーション docker memory footprint resiliency IaaS PaaS ステートレス API化 サービス分割 サーバレス 非同期 REST MicroProfile 1.0 Java EE 7 Java EE 8/9 MSAで必要な機能 (3)(2) (1) (1)JAX-RS、CDI、JSON-P (2)Websocket、JPA等 (3)Healthcheck等 6
  • 8. Java EE にも Profile Copyright 2017 FUJITSU LIMITED Java EEにProfileを追加できるのはOracleだけ Java EE Full Profile Java EE Web Profile Java EE Micro Profile 追加 7
  • 9. Java EE 歴史 Copyright 2017 FUJITSU LIMITED JSR Initiation Early Draft Review Public Review Final Release J2EE 1.4 2001/10 - 2002/5 2003/11 Java EE 5 2004/5 2005/4 2005/6 2006/5 Java EE 6 2007/7 2008/10 2009/1 2009/12 Java EE 7 2011/5 2012/4 2013/1 2013/5 Java EE 8 2014/8 2015/10 2017/7? J2EE 1.2 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 Java EE 7 Java EE 8 2000 2005 2010 2015 2020 リリース間隔 8
  • 10. JCPステージ Copyright 2017 FUJITSU LIMITED Initiation Draft Release Final Release Main- tenance Expert Group設立 (SpecLead) 最終承認投票 (EC) 保守投票 (EC) ドラフト レビュー JSR レビュー ドラフト承認投票 (EC) RI & TCK (EG) JSR承認投票 (EC) 9
  • 11. Java EE 8 状況 Copyright 2017 FUJITSU LIMITED JSR 機能 状況 (2016/3) 状況 (2017/3) 366 Java EE 8 Platform EDR EDR2 367 JSON-B 1.0 – JSON Binding EDR PR 371 MVC 1.0 – Model View Controller EDR2 EDR2 372 JSF 2.3 – Integration with WebSocket EDR FD 369 Servlet 4.0 – HTTP/2 EDR EDR 365 CDI 2.0 – outside of Java EE container EDR PR 375 Security API - EDR 370 JAX-RS 2.1 – non-blocking I/O - EDR 373 Management 2.0 - WD 380 Bean Validation 2.0 - EDR 368 JMS 2.1 EDR WD 374 JSON-P 1.1 EDR FD 10
  • 12. GlassFish issues Copyright 2017 FUJITSU LIMITED created resolved 11
  • 13. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 12
  • 14. 仕様が先か、実装が先か Copyright 2017 FUJITSU LIMITED 仕様が先 実装が先 仕様策定に時間がかかる 公正な議論と、複数実装による適切な競争 イノベーションに向いている どこで誰が仕様を決めているか不明 13
  • 15. JCP v.s. OpenJDK Copyright 2017 FUJITSU LIMITED JEPによる開発 JDKのオープンソース Java SE の RI JCP JSRによる開発 (Java Enhancement Proposal) openjdk.java.net OpenJDK 14
  • 16. JCP構成 Copyright 2017 FUJITSU LIMITED Executive Committee JSR JCP member 非営利団体 企業 個人 Oracle 1シート Elected 6シート Ratified 16シート SpecLead 1-2名 Expert Group 数名選出 承認 設立 Associate 2シート 15
  • 17. OpenJDKとMicroProfile Copyright 2017 FUJITSU LIMITED 競争原理が働かない ベンダ独自実装期間が短い JSR開始から仕様FIXまで、時間が短い OpenJDKの仕様が Java SEの仕様になる Java SE Java EE Microprofileの仕様が Java EEの仕様になる 競争あり マルチベンダによる実装 16
  • 18. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 17
  • 19. MicroProfile沿革 Copyright 2017 FUJITSU LIMITED 2016年6月設立 2017年1月 富士通が参加 2016年9月 JavaOne で Version 1.0 リリース 2017年2Q Version 1.1 リリース予定 2017年3Q Version 1.2 リリース予定 18
  • 20. MicroProfileとは Copyright 2017 FUJITSU LIMITED 市場が評価 NG OK APSベンダーが MicroProfileを提供 フィードバックを反映 JCPへ提案 アジャイル的に OODAループを実践 最終的にはJCPへ 19
  • 21. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 20
  • 22. MicroProfile 1.0 Copyright 2017 FUJITSU LIMITED 2016/9 JavaOneでリリース JAX-RS CDI JSON-P 21
  • 23. MicroProfile 1.1 Copyright 2017 FUJITSU LIMITED 2017/2Q リリース予定 Configuration API Health Check API JWT Token Definition Fault Tolerance (stretch goal) 22
  • 24. Configuration API Copyright 2017 FUJITSU LIMITED 設定の外だし 別環境への移動時等、設定変更のためのリビルドを不要に 環境が変更するたびに、リデプロイが不要に 設定動的反映 Netflix/archaiusの考え方 優先度づけされた複数の設定(ConfigSource)で構成 1. システムプロパティ 2. 環境変数 3. 設定ファイル META-INF/microprofile-config.properties 高 (優先順位) 低 23
  • 25. Configuration API Copyright 2017 FUJITSU LIMITED Config config = ConfigProvider.getConfig(); ConfigValue portConfig = config.access(“com.fujitsu.interstage.port”) .as(Integer.class) .cacheFor(5, TimeUnit.MINUTES) .logChanges(true) .evaluateVariables(true) .withDefault(8080); Integer port = portConfig.getValue(); 5分間キャッシュする Apache DeltaSpike由来のAPI org.apach.delatspike.core.api.config.Config.Resolver 値が変化したらINFOログ 出力 ${foo}のような変数の再評価 24
  • 26. Configuration API Copyright 2017 FUJITSU LIMITED @Inject @ConfigProperty( “com.fujitsu.interstage.port”, cacheFor=5, timeUnit=TimeUnit.MINUTES, evaluateVariables=true) ConfigValue<Integer> portConfig; int port = portConfig.get(); アノテーションも使えるように 25
  • 27. Interoperable JWT RBAC Copyright 2017 FUJITSU LIMITED OpenID ConnectベースのRole Based Access Control OpenID ConnectのIDトークンに 認可のためのクレームを加えたbearer/accessトークン が提案されている まだ具体的な仕様は少ない HTTPヘッダからトークン情報を取得したり、ハンドリングす るAPIも考えられているが。 JavaOne 2016のMicroProfile Meetingでセキュリティとして 優先だが高いとされた 26
  • 28. Interoperable JWT RBAC Copyright 2017 FUJITSU LIMITED { "iss": "https://server.example.com", "sub": "24400320", "preferred_username": "jdoe", "aud": "s6BhdRkqt3", "nonce": "n-0S6_WzA2Mj", "exp": 1311281970, "iat": 1311280970, "auth_time": 1311280969, "realm_access": { "roles": ["role-in-realm", "user", "manager"] }, "resource_access": { "my-service": { "roles": [ "role-in-my-service" ] } }, 例: 27
  • 29. Service Healthchecks Copyright 2017 FUJITSU LIMITED アプリケーションのヘルスチェックをするRESTエンドポイント仕様 Consumer Producer Health Check Procedure GET /health 200:UP or 503:Down 全てのProcedureを実行し、 結果をまとめてJSONで返却 Kubernetes health check互換 Health Check ProcedureHealth Check Procedure チェック対象のアプリケーションProducerの生存を特定するマシン (Kubernetesとか) 28
  • 30. Service Healthchecks Copyright 2017 FUJITSU LIMITED Health Check Procedureの例 (JAX-RS) @Path("/app") public class HealthCheckResource { @GET @Path("/diskspace") @Health public HealthStatus checkDiskspace() { long freeBytes = path.getFreeSpace(); long threshold = 1024 * 1024 * 100; // 100MB return freeBytes>threshold ? HealthStatus.named("diskspace") .up().withAttribute("freebytes", freeBytes) : HealthStatus.named("diskspace") .down().withAttribute("freebytes", freeBytes); } 29
  • 31. Fault Tolerance Copyright 2017 FUJITSU LIMITED RetryPolicy Fallback アプリケーションの実行論理と実行時のエラーハンドリングを 分離する機能 CircuitBreaker BulkHead Timeout 30
  • 32. Fault Tolerance Copyright 2017 FUJITSU LIMITED RetryPolicy rp = retryPolicy .retryOn(TimeOutException.class) // リトライの条件 .withDelay(2, TimeUnit.SECONDS) // リトライ間隔 .withMaxRetries(2); // リトライ回数 Connection conn = execution .with(rp) // RetryPolicyの設定 .withFallBack(this::connectToBackup) // getのリトライに失敗した際の処理 .get(this::connectToPrimary) RetryPolicy Fallback 31
  • 33. Fault Tolerance Copyright 2017 FUJITSU LIMITED CircuitBreaker cb = circuitBreaker .withFailureThreshold(3, 10) .withSuccessThreshold(5) .withDelay(1, TimeUnit.MINUTES); Connection conn = execution.with(cb).run(this::connect); CircuitBreaker closed CircuitBreaker open CircuitBreaker half-open 10回中3回失敗した 5回連続成功した 正常時 リクエスト送信遮断なし リクエスト送信遮断 1分後 5回連続成功しなかった リクエスト送信再開 CircuitBreaker 32
  • 34. Fault Tolerance Copyright 2017 FUJITSU LIMITED @Inject @CircuitBreaker ( delay=1, failThreshold=3, successThreashold=5) CircuitBreaker cb; Connection conn = execution.with(cb).run(this::connect); CircuitBreaker (アノテーションでも) 33
  • 35. Fault Tolerance Copyright 2017 FUJITSU LIMITED BulkHead bh = bulkHead.withPool(“myPool”); Connection conn = execution .with(bh) .run(this::connect); Connection connect = execution .withTimOut(2, TimeUnit.SECONDS) .run(this::connect); BulkHead 処理ごとに個別のスレッドプールを使用することで、 異常時の影響を分離 Timeout 34
  • 36. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 35
  • 37. サマリ Copyright 2017 FUJITSU LIMITED フィードバックループによるマイクロサービスを実践 既存のJavaコミュニティを分裂するものではない アプリケーションポータビリティ 最終的にはJCPで標準化 オープンイノベーション 実装(ベンダー)を選択可能 36
  • 38. 37
  • 39. Copyright 2017 FUJITSU LIMITED Javaは、Oracle Corporationおよびその子会社、関連会社の米国および その他の国おける登録商標です。 本ドキュメントに記載されている、社名、商品名等は各社の商標または 登録商標である場合があります。 その他の記載されている、商標および登録商標については、 一般に各社の商標または登録商標です。 38

Editor's Notes

  1. 0
  2. 1
  3. 3
  4. 12
  5. 17
  6. 20
  7. 35