12月2日Javaで創るクラウド時代のエンタープライズ開発
~マイクロサービス、DevOpsとJavaの最新動向~
を聴いてきたのでメモメモ
■ごあいさつ
・こんなに集まると思わなかった・・・
・本社の人きている
・マイクロサービスに興味→既存はどうする?
JavaOneでも話題
■Java EE for cloud Native and Microservices
・業界の傾向3つ
1.レガシー、ERPのような成熟したもの(進化早くない)
2.ミッションクリティカル 進化している
3.次世代のイノベーション クラウドネイティブ
・クラウドネイティブ
大きな変化
ビジネスを動かす:ソフトの重要性 例うーばー
特徴
1.DevOps
2.as a service
3.マイクロサービス
4.分散している
・DevOps
Developmentの測定:
サービス、製品、機能
どのくらい動いているか
→コードを変えると環境が安定しなくなる
マニュアルの介入はあるべきではない
→自動化
Dockerイメージがきちんとできて・・・
ハードワイヤー依存があってはいけない
プロビジョニングできて、エラスティック
アプリケーション
ステートが必要ならば、管理する:別のサービスに持っていく
→独立したコンフィグ・サービス
レイテンシー
クラウド:分散=レイテンシーある
終わるまでブロックは効率よくない、非同期に
・マイクロサービスの原則
1つのアプリケーションに押し込むと問題起こる
アプリケーションの書き直し、テストしなおし
APIだけがコミュニケーション(内部プロセス使わない。すべてREST)
・なぜマイクロサービス
コンウェイの法則
組織の構造がプロダクトに反映
アプリケーション
1つのフィールドで数週間:このモデルでは機能しない
→マイクロサービス アジャイルで 俊敏性
マイクロサービスの特徴
・アプリケーション分割→バージョン:複雑さ
・多言語対応
・強固なバウンダリー:境界線がしっかり
最初から始める
・まず、マイクロサービス
既存の資産ある(多い)
→オプションいろいろ
1.アプリを分解(推奨しない)
2.アプリケーションの追加:マイクロサービスで
サイズは?
1つの答えはない
原則:2つのピザが足りるくらい(7,8人)
1,2人も理想ではない
パッケージ
・Dockerコンテナ(他のコンテナでもいい)
パッケージを別にすること大事
JavaEE
・とても成功している:包括的API
・クラウド上に展開
変化
マイクロサービス
ディストリビューテッド コンピューティング
多言語
新しい技術
アプリケーション
分散された環境でも動かす
JavaEE:色々技術、次世代に関連あるものも
・投資したものを使えるように
・JavaEE API
・JavaEE:標準がない
クラウド開発
クライアント
データストア
モバイルファースト→モバイルオンリ
ステートレスをまず考える→うまくいかなかったら、ステートフルに
JavaEE処方せん的プログラミングモデル
テクニカルな詳細
・プログラミングモデル
・結果整合性:100%あてはまるわけではない
・シンプルなデータ構造:NoSQL
セキュリティ:重要
OpenIDConnect:事実上標準
ロケーション
うすいレイヤ:コンフィグレーション:外部化
回復性
回復用コマンド
レポートする・しない
パッケージング;どっかー
サーバーれす:
マルチテナンシー:効率よくない?
→効率よくなる、人の数も減る
独立性
全体像
ロードバランス
1.エンドユーザーのロードバランス
2.サービスのロードバランス
JavaEE7→JavaEE8
■JavaSE9 アップデートと移行のポイント
資料公開されるので、リラックスして聞いてね
・自己紹介
3つのカテゴリ
・大きな非互換性:コードいじる必要有り、アプリ多い
・中:コードいじる必要有り、アプリ少ない
・小:簡単に回避可能
サーベイ
・9 いない
・8 結構いる
・7 いる
・6 いる
・5 0ではない
Javaは相変わらず後方互換性に専念
しかし、既存のプログラムに大きい影響を及ぼす可能性のある変更は多い
注意:本セッションは全ての非互換性をカバーしない可能性がある
甲の薬は乙の毒
・JDKがバグを直したら・・・バグの振る舞いに依存していた人が!
SunからOracleへ
JDK7 HashMap:マップの順番を保証しない
→JDKの中にも順番に依存しているものが(^^;)
このような例は、やまほどある
Javaは相変わらず後方互換性に専念
しかし、すべての既存プログラムが必ず正しく動作することを保証したわけではない
リリース互換性の範囲
バイナリー、ソース、振る舞い
セキュリティアップデート:バイナリーがロードできなくなることはない
フューチャーリリース:幅は広いがバイナリーがロードできなくなることはない
プラットフォームリリース:場合によって、バイナリーの互換性ない
非互換性の原因(代表)
・バグ修正
・対応アルゴリズム変更(セキュリティなどで)
・セキュリティ改善
・サポート来往のプラットフォームの変更
・ネイティブコードの使用
・プロパティの変更
・非推奨の警告
・デプロイ系の変更
・内部実装の変更
GC
内部API
・パッケージ
・ツールやファイルの削除
・非推奨のメソッド・クラス・機能削除
赤字は今回JDK9の修正
JDK9の非互換性→最新版コンポーネントを
OpenJDK
JDK 9
来年7がつあたり
JEPに書いてある
大
・JEP250:JDKの内部APIを利用不可に!
プロジェクト ジグゾー
JDK8に含まれるjdepsツールで検出できる
→JDK9に含まれるほうを利用したほうがいい
マルチリリースJarファイル(JEP238)
コマンドラインのフラグで従来の振る舞いに戻すことが出来る
→一番重要
・JEP223 New Version String Schema
セマンティックバージョニングに準拠
バージョンを見て処理している場合、必要
・JEP220:rt.jarがなくなる
中
・ほとんどのsun.misc.*とsun.reflect.*APIの排除
注意!sun.misc.Base64
・JEP214:GCの組み合わせ
・認識されないVMオプションに注意→JVMが起動しない
→起動するか、警告が出るかをまず確認
・JEP231:ほとんどつかわれていない
・JEP182:Javacでの-source,-target
JDK9では1.6以上しかサポートしない
(One plus three back)
・Java.awt.peerとjava.awt.dnd.peerパッケージなくなる
・JEP240:hprof削除
JVMの内部で実装されている jmap -dump,gc.heap・・・
・JEP241:jhat削除
・RMIのHTTPの仕組み(JDK8で非推奨)
・Thread::stop(Throwable)が例外をThrowする
・Serialized Appletなくなる・・・気づく人いない?
・JNLP Parsingきびしくなる
・アップル時代のAPI排除
・com.sun.image.codec.jpeg
・GCのログ関係変わる
・_は識別しとして利用できなくなる
・32ビットWindowsのクライアントVMの排除
・デプロイの機能はクライエントのぷらっとっふぉーむだけをサポートする
・G1がデフォルトのGCに
・JavaDBの排除
・JDK9で非推奨になったものが・・・
アーリーアクセスで確認
■Oracleクラウドプラットフォームで実践するアプリケーション開発と運用の最新トレンド
・オラクルのアプリケーション開発の全体像
企業のソフトウェア3とおり
コア
差別化
イノベーション
・クラウド活用の3つのパス
1.IaaS
2.PaaSにもっていく
3.クラウドネイティブ
・オラクル:多くのサービス群
・2つの主要な開発アプローチ
クラウドネイティブ
既存
・クラウドネイティブ
マイクロサービスをベース:Oracle隙間なくサービス
・アプリケーションコンテナクラウドサービス
Docker
・Developerクラウドサービス
・APIプラットフォームサービス:近日
APIライフサイクル管理
・アプリケーションパフォーマンスもにたりんぐクラウドサービス
コールのトレース:
・OracleJET
Javascriptツールキット
多くのUI
・クラウドネイティブのデモ
JAX-RSベース
ステートレス
SPAをOracleJETで
アイデンティティクラウドサービス
・まとめ
・既存アプリケーションのモダナイゼーション
JavaとDatabaseのモダナイゼーション
力を入れている
AppToCloud
Javaクラウドとデータベースクラウドによるライフサイクル自動化
オープンソースを使ったものの(PHP,MySQL,Tomcat)クラウド移行
クラウドレガシー:インフラは変わった。オペレーションが・・・
・でも
AppToCloudツール
Weblogic→Java CloudServiceへ
■Oracle cloudで実現するDevOps
・新しい機能を迅速に&安定性
・DevOpsが求められる企業=ITの力をコアに
・DevOps実現のサイクル
Plan
課題管理、アジャイル、Wiki
Code
Gitリポジトリ、クラウド上でプログラミング、
コードレビュー(プルリク)IDE連携
マージリクエスト
ビルド
ハドソンが入ってます。Jenkinsを使える人は使えます
シェルも使えます(=ネットにアクセスできます。クラウドをRESTで)
テスト
JUnit,Seleniumの自動実行
リリース
デプロイ
簡単なコンフィグレーション
クラウドスタックマネージャー
オペレート
スケーリング、パッチ適用
もにたりんぐ
機械学習による分析
デモ
Cargo Tracker:宅急便確認システム
選択する理由
・速い
・サービスの選択肢を提供
・コミュニケーションとコラボレーション
開発の自動化
でぷろいめんと:イミュータブルインフラストラクチャ
実例Developer Cloud Serviceの開発チームによる利用