【東京】JJUGナイトセミナー「Jakarta EE特集 - Mike Milinkovichさん（Eclipse Foundation代表）来日記念」に参加してきました(2018/11/19)

# [【東京】JJUGナイトセミナー「Jakarta EE特集 - Mike Milinkovichさん（Eclipse Foundation代表）来日記念」](https://jjug.doorkeeper.jp/events/81353)

# MicroProfileを利用したクラウドネイティブでのエンタープライズ品質(数村憲治さん)

- jakartaEEになって、富士通さんが最初のコントリビューターになっていた。
日本もまだまだやる気である。実はアルファベット順だった。

## 自己紹介
- Exlipse foundationのBoardを務める

## マイクロサービスの現状
- Oracle CodeOneでMicroProfile.ioが受賞している
- 新技術はエンタープライズに受け入れ難い。
<!-- ![新技術はエンタープライズに受け入れ難い](IMG_0337.JPG) -->
    - 品質が課題ではないか。
- マイクロサービスに期待すること
    - デプロイの期待が多い
    - カナリアリリース
        - 並行で動作させる。
        - 新リリースが問題あれば既存リリース
        - 今日はカナリアリリースがテーマ

### サービスは均一でない問題
<!-- ![サービスは均一でない問題](IMG_0338.JPG) -->
- SLAの高い低い
- プロダクトリリースとカナリアリリース
- SLAの低いサービスのデプロイでSLAの高いデプロイを汚染しては行けない

### クックパッドの例
- [開発者ブログ](https://techlife.cookpad.com/entry/2018/05/08/080000)
- service Meshを行った
    - どのサービスとどのサービスが通信していて、サービスの影響範囲が分かりづらい
    - タイムアウトリトライ、サーキとブレーカー、など、どこにどんな設定をしているかをアプリケーションを個別にかんしする
    - ここでservice meshを入れた
- Envoy , Prometeus, Grafana...で監視した 
    - 1hに5,6件のtrivialエラーが出てたが、劇的に少なくなった

### マイクロサービスの課題
<!-- ![マイクロサービスの課題](IMG_0339.JPG) -->
- 解決しないと行けないが、明確な答えはない

### Kayentaという解決策
<!-- ![Kayenta](IMG_0340.JPG) -->
- 自動カナリア分析ツール
- マイクロプロファイルはこことうまく付き合っていくことが大事

## 仮想フードコートの例
<!-- ![Kayenta](IMG_0341.JPG) -->
<!-- ![デモ内容](IMG_0342.JPG) -->

### 4つのサービス、Jax-RS
- 受付サービスはオーダーサービスに流すだけ
- オーダーサービスは、きた店によって振り分けることを行う

## fujitsu launcherというマイクロプロファイルの設定を行う? 起動する
- https://github.com/fujitsu/launcher

## Jaeger UIを使う
- リクエスト数ごとにトレースを見ることができる
    - リクエストリソースや、時間を見ることができる

### 来々軒の追加
- ただし2回に1回は3s遅延するように実装する

###  メトリクスを取る   
その際に以下のコードを仕込む

```java
@Metric Timer pekinTimer;
@Metric Timer rairaiTimer;

... 中略

Timer.Comtext timer = null;
timer = pekinTimer.time(); // ストップウォッチが開始する
timer = rairaiTimer.time() // ストップウォッチが開始する

if(time != null)
    timer.close; // タイマークローズと計測終了

```

- 何回かアクセスすると、メトリクスを見ることができる
    - /metrics で確認可能
- これをもう少し見やすくするために、prometeusが活躍する
<!-- ![メトリクス監視内容](IMG_0343.JPG) -->
- grafanaというのも使うことができる
<!-- ![grafana](IMG_0344.JPG) -->
    - これは色々なデータソースを見ることができる
    - 今回はprometeusを使う
        - prometeusのURLを指定してデータを収集する
    - DashBoardで、色々データをカスタマイズすることができる
        - リクエストの最大、平均などをリクエストごとに算出、比較することができる
    - 負荷をかけるとこんな感じでメトリクスを見ることができる(写真)

- 何も設定していないと、来々軒のせいで北京飯店がアクセスに8.6sほどかかる
- オーダーと来々軒にタイムアウトを設定する(マイクロプロファイルのアノテーション)
```
@Timeout(100)
...
Thread.interrupted();
return shop + "is bussy";
```

- タイムアウトが起こることで、北京飯店の影響はどうなるか?
    - 8.0sくらいに知人だ
- サーキットブレーカーを入れるとどうなるか?
```
@CircuitVreaker successThreshold = 5, ...
```
- タイムアウトが起こるとサーキットブレーカが失敗と判断する
    - 失敗したときのリトライ設定なども行うことができるs
- サーキットブレーカーを入れることで8.0s → 2.3sほどに短縮された

## まとめ
- 監視、表示はPrometheus/Grafanaがデファクト化
- カナリアリリース判定・分析の研究は活発である
- MicroProfileを使うと、Prometheus/Grafana対応が容易
    - 最新の研究成果がそのまま利用可能になる

## 質疑応答
- JakartaEEとマイクロプロファイルの統合はあり得るのか？ 
    - 最終的には一緒の方向
    - 今はまだその時期ではない。
        - マイクロプロファイルがJakartaEEのプロファイルになるのでは？
- 日本ではマイクロプロファイルはピンときていない
    - globalでも状況は変わらない
    - マーケットを広げるためには...?
        - Springが先行している。
        - ようやく reactiveが来年2月、その後にブレイクするのでは？？

# The Future of Cloud Native Java by Mike Milinkovich-san

## CloudでJavaを使う
- javaEEがEclipse Foundationに寄贈されて、JakaltaEEとしてリスタートされるお話が聞けるかもしれない
- Eclipse Foundation、IDEだけではない!

## Eclipse Foundationは何をしているか?
- infrastructure
- community Development 
- process & governance
- IP Management & Licensing

## 他のプロジェクトと何が違うか
 <!-- ![Eclipse Foundation](./IMG_6331.JPG)  -->
- Linux Foundation
- GitHub
- Apache Foundationとの比較

## An international Community
- ドイツ、アメリカ、フランス、カナダと続く

## Coloud Native Java
- mictoprofile
- vertx
- Jakarta EE
- Open j9

- これからはクラウドやk8sを利用したJavaが活発になるだろう

# Jakarta EE
- JavaEEはなくなり、JakartaEEと移管された
- Strategic Members
    - 富士通、IBM、ORACKE、redhat, pauara, tomitribe...
- Participation Members
    - could bees, picotal, みずほ, Microsoft, SAP...

## Working Group
- Industry consortium that ...
- Bendor Netural

## Recent Accomplishments
- 39 new Eclipse projects
- JavaEE 8 TCK agreement completed with oracle

## TCK is now open sourced
<!-- ![TCK](IMG_2165.JPG) -->

## Technical Direction Guiding Principles
![Technical Direction Guiding Principles](IMG_0329.JPG)

## High Level Roadmap
<!-- ![](IMG_0330.JPG) -->

## Guiding Principles (JCPは何が違うのか)
- Code First
- regerens compatitations...
<!-- ![](IMG_0331.JPG) -->


## What is Eclipse MicroProfile?
- オープンソースコミュニティ specification for Enterprise Java microservices→

## implementations
- redhat IBM oracle ...

# microprofile 2.1(Oct, 2018)
- Open Tracingが1.2に変更
- その他は2.0と同じ

## Other news in this 
- Reactive Streamsが追加されていく予定である(Springはもうある...)
<!-- ![](IMG_0332.JPG) -->
<!-- ![](IMG_0333.JPG) -->

# Eclipse Open J9
## JIT compiler Per Microservice
<!-- ![](IMG_0334.JPG) -->
- Cloud native
    - マイクロサービスではJavaのアプリケーション、メモリを多く消費する
    - JVMの初回起動は一般的に重くなるが
        - マイクロサービスにおいては初回起動が多く発生するため、なんとかしたい
    - OpenJDKに比べて、Open J9では性能が40%アップしている
    - [参考記事](https://www.infoq.com/jp/news/2018/03/OMR-OpenJ9)


## Cloud Nation Open Innovation
<!-- ![](IMG_0335.JPG) -->
- Jenkins GithubのようなWebベースで設定できるIDE
- IoTコミュミティ
    - hono IoTメッセージ (NTT Data Cloudではやく動く？)



## 質疑応答
### pipovtalがJakartaEEの参加者であることに疑問(Participete)
- マーケティングpeopleとテクノロジーpeopleが存在する
- モノリシック アプリケーションサーバーというイメージがあるが...
    - しかしJavaEEはツールキッドである
    - JPA JAX-RS の企画を作る上でPivotalとても大事な存在
    - Springとコラボレートもしている

### マイクロプロファイルは大きくなりすぎるのでは
- テクニカルの仕事なのでなんとも言えない
- ただ、小さくするのは大事だ
- しかしSpringだってFatじゃないか！

### IntelliJ J の急成長をどう見ているか？
- google switched IntelliJとeclipseをスイッチしている
- eclipseは 100% IBMが開発している
    - しかしとても多くのコミュニティがある
    - [参考記事](https://ja.wikipedia.org/wiki/Eclipse_(統合開発環境))
- eclipseはJunoで windows vistaで動かないバグを生み出した
- vs code はいいが、not visual studioである
- このように、EclipseとIntelliJの違いはあるだろう

### なんでJakartaという名前にしたの
 - [こちらの記事参照](https://furien.jp/columns/426/)

## [公式サイトはこちら](http://www.eclipse.org/)

# 所感
- Springではすでに取り入れられているReactive、ServiceMeshなどがMicroProfileにはまだないため(2019/2頃予定)、やはり足並みはSpringのほうが早いなあとの印象を受けました。