1月23日、
JJUG ナイト・セミナー 「入門Spring Boot&Spring Cloud」
を聞いてきた!
SpringMVCを中心とした、フレームワークのフレームワークであるSpring Bootについては
確かに入門したが・・・
Springのクラウドを使う為のユーティリティ(ロードバランサとか)のSpring Cloudについては
う~ん、入門できなかったかも・・
ということで、とにかく、聞いた内容をメモメモ
■さくっと理解するSpringBootのしくみ
・自己紹介
・今日話すこと
SpringとSpring Bootの関係
使われる機会増えた:Bootでてきてから
Spring Bootがカイゼンする開発プロセス
Spring Bootの構成要素
・そもそもSpringってなに?
Springフレームワーク
・SpringとSpring Bootの関係
ざっくり言えば
Spring - spring config(面倒な設定排除) + Tomcat = Spring Boot
・一般的な開発のプロセス
1.必要なライブラリのリストアップ
2.起動に必要なBeanの定義をする
3.プログラミング
4.パッケージング・デプロイ
5・モニタリング
1.必要なライブラリをリストアップ
最小限で記述できる仕組み:
pom,gradleに記載する記述少なくなる
ライブラリのバージョン互換性をキープしたまま依存性注入
2.起動に必要なBeanの定義をする
同じようなBean定義→Boot側が持っている
Bean定義が自動的になされる:オリジナルの動作変更もできる
3.プログラミング
Tomcat内包。生産性が上がる
デモ:は上手くいかなかったので省略
4.パッケージング・デプロイ
実行可能Jarでパッケージングできる
5.モニタリング
ヘルスチェック、REST APIエンドポイント自動生成
・Spring Bootの仕組み
Spring Bootの構成要素 7つのコンポーネント
core:DIコンテナの起動楽に
Starter:ライブラリ同士のバージョン互換
AUto-configure:自動でBeanを定義
CLI:CLIで作れる
Actuator:エンドポイントを提供(モニタリング)
Test:JUintユーティリティ
Tools:自動再起動など
・Core
起動が簡単に
Tomcatがないほうされている
Jetty,Undertowに置き換えできる
Tomcat7から組み込み版対応→Spring Bootが組み込んだ
Fully Excutable jar
1つにパッケージング
ubar jar(fat jar)→どんなものかわからなくなる
→Spring BootはNested jar(Jarの中にJarを入れる)
特殊なクラスローダーがある
Maven Gradle、Excutableをtrueにする
・Starters
実体:pomしかない
自分でStarterを作れる
・Auto-configure
進化した設定の簡易化
いままでXMLで定義→Java config→進化した設定の簡易化Boot
@conditipnalOnClass/Bean
必要なBeanだけを定義
クラスパスにクラスがあるかないかでBeanの定義を切り分け
→実行時に自動的に判断
・Actuator アプリのモニタリング
クラウドネイティブなアプリを付けるとき
Spring Cloudフレンドリ
マイクロサービスの状態チェック
・Tools
Dev Tools:
オートマチックリスタート
設定で有効になる:2つのクラスローダー(再起動用、非再起動用)
2つのクラスローダーの使い分け
JRebel Spring Loaded:リロードになっている
Live Reload
自動でリロードしてくれるブラウザのプラグインに対応
→F5を押す手間なくなった
開発時のデフォルトプロパティ
・Maven/Gradle plugin
Maven→Gradle
地味にビルドを助けてくれるプラグイン
・まとめ
Spring Bootのはじめかた
IDE:いんてりJ、STS,Eclipse
イニシャライザー
CLI
↓
Maven・Gradle
↓
メインメソッド実行でTomcat
・むすびに
ちょっとしたカイゼンの積み重ねで開発が楽になる
アイデアがGood
クラウドサービスの登場:Javaがお手軽に
Q&A
・内部構造でのポイント
Auto-configureのソースコード
Bean Definitions
・SpringMVCとAOPは?
AOP:SpringフレームワークのCoreプロジェクト
MVC:Coreのソースコード
・UIはTimeleafをつかうけど、JSPをつかったら?
JSPがHTMLとロジックをまぜこぜにする点で・・・
不都合はないが、選ぶ理由がない
マニュアルに避けろと書いてある
組み込みで動かないことがある
■ぱぱっと理解するSpring Cloudの基本
・自己紹介
・Spring Cloudとは
クラウドネイティブアプリのツールの集合体
・クラウドネイティブなメリット
変化に強い、
性能のスケールアウト
障害に強い
・Spring Cloudで抑えておきたい基本技術
そもそもできること
クラウドネイティブなアプリ
マイクロサービスアーキテクチャ→疎結合
サービスの多重化:処理性能・耐障害性
・要素を簡素化した題材で基礎技術
結合した文字列を返す
りんごとペンを結合する Uh
もし、爆発的な人気が出たら・・・
・サービスディスカバリとクライアントサイドロードバランシング
発生しうる問題:集中
→多重化
Eurekaサービス:DNSみたいなもん
アプリ名、IPアドレス、ポート番号
【実際のコーディング】
3ステップ
1)Eurekaサービスの立ち上げ :イニシャライザー
依存関係にEurekaサーバー追加
2)サービス登録:Eurekaディスカバリ
3)ロードバランスで負荷分散:リボンを追加 Rest Templateを介して
・サーキットブレーカーで障害検知
1箇所の障害でサービス全体が応答しなくなる可能性
→障害時の規定の動作を定義、継続性を担保
→サーキットブレーカーパターン
【実際のコーディング】
2ステップ
1)EnableCircuitBreaker:Hystrix追加
2)HystrixCommandで障害の規定動作の指定
・Config Serverで設定情報の集中管理
サービスの数だけ設定ファイル:設定変更が大変、不整合の恐れ
→設定ファイルの集中管理
configサービスとgit
設定ファイルの更新
Git更新
refresh要求:管理者→アクチュエーターで
設定の再取得
【実際のコーディング】
2ステップ
1)EnableConfigServiceでConfigサービス立ち上げ
→イニシャライザーで設定ファイル
Git側アプリ名.propertiesでプッシュ
2)EnableConfigClientでクライアント作成
アクチュエーター経由で環境変数の確認
http://アプリ名/env
Spring Cloudを使ってみて感じた疑問
・信頼性は大丈夫(SPOFの問題)
→必要に応じて冗長化の必要がある
実際にはLBの後に複数のConfigインスタンスをおく場合が多い
・Eureka冗長化の考え方
可用性>整合性
Eureka動詞の間にお互い登録
→障害時、Eureka同士が持っている情報がずれている場合がある
・Config First or Discovery First
Config firstでしょう(ただし、両方とも動く)
config first:Configサーバーを起動→Eurekaへ登録
Discovery First:Eurekaを起動→Configを登録
→必要に応じて検討
・EurekaとDNSの違い
サービスレジストリと負荷分散
Eurekaだと、アノテーションを付けるだけ
ミドルウエアか、アプリか→検討
・おわりに
本セッションは基礎に絞って紹介
Q&A
・パフォーマンスは?
アプリレイヤでやるので、パフォーマンスは・・
それなのにアプリでやるのは、柔軟にできる点
・Spring Cloudのデザインパターンみたいなまとめはないの?
CloudFoundryが流行ってるよね。
SpringCloud公式ドキュメンテーションにいろいろある
・アクセスキューの動的制御は?
動的スケールアウト:ないかなあ・・・?
・悪意のあるユーザーがいたら?
デフォルトで認証機能が有効でない
認証してね
・ロードバランシングのカスタマイズは?
メトリクスの取得は?
クラスで定義、注入する
パフォーマンス:Spring Actuatorはリアルタイムで情報見える
・開発コスト
マイクロサービスをどう考えるか
・整合性担保
おなじリポジトリを見るので、いつかは整合性:Config
Eureka:一人でも動くようになっている
■CM
・JSUGでSpring勉強会
・年1回 Spring Day→10月中旬
JJUG ナイト・セミナー 「入門Spring Boot&Spring Cloud」
を聞いてきた!
SpringMVCを中心とした、フレームワークのフレームワークであるSpring Bootについては
確かに入門したが・・・
Springのクラウドを使う為のユーティリティ(ロードバランサとか)のSpring Cloudについては
う~ん、入門できなかったかも・・
ということで、とにかく、聞いた内容をメモメモ
■さくっと理解するSpringBootのしくみ
・自己紹介
・今日話すこと
SpringとSpring Bootの関係
使われる機会増えた:Bootでてきてから
Spring Bootがカイゼンする開発プロセス
Spring Bootの構成要素
・そもそもSpringってなに?
Springフレームワーク
・SpringとSpring Bootの関係
ざっくり言えば
Spring - spring config(面倒な設定排除) + Tomcat = Spring Boot
・一般的な開発のプロセス
1.必要なライブラリのリストアップ
2.起動に必要なBeanの定義をする
3.プログラミング
4.パッケージング・デプロイ
5・モニタリング
1.必要なライブラリをリストアップ
最小限で記述できる仕組み:
pom,gradleに記載する記述少なくなる
ライブラリのバージョン互換性をキープしたまま依存性注入
2.起動に必要なBeanの定義をする
同じようなBean定義→Boot側が持っている
Bean定義が自動的になされる:オリジナルの動作変更もできる
3.プログラミング
Tomcat内包。生産性が上がる
デモ:は上手くいかなかったので省略
4.パッケージング・デプロイ
実行可能Jarでパッケージングできる
5.モニタリング
ヘルスチェック、REST APIエンドポイント自動生成
・Spring Bootの仕組み
Spring Bootの構成要素 7つのコンポーネント
core:DIコンテナの起動楽に
Starter:ライブラリ同士のバージョン互換
AUto-configure:自動でBeanを定義
CLI:CLIで作れる
Actuator:エンドポイントを提供(モニタリング)
Test:JUintユーティリティ
Tools:自動再起動など
・Core
起動が簡単に
Tomcatがないほうされている
Jetty,Undertowに置き換えできる
Tomcat7から組み込み版対応→Spring Bootが組み込んだ
Fully Excutable jar
1つにパッケージング
ubar jar(fat jar)→どんなものかわからなくなる
→Spring BootはNested jar(Jarの中にJarを入れる)
特殊なクラスローダーがある
Maven Gradle、Excutableをtrueにする
・Starters
実体:pomしかない
自分でStarterを作れる
・Auto-configure
進化した設定の簡易化
いままでXMLで定義→Java config→進化した設定の簡易化Boot
@conditipnalOnClass/Bean
必要なBeanだけを定義
クラスパスにクラスがあるかないかでBeanの定義を切り分け
→実行時に自動的に判断
・Actuator アプリのモニタリング
クラウドネイティブなアプリを付けるとき
Spring Cloudフレンドリ
マイクロサービスの状態チェック
・Tools
Dev Tools:
オートマチックリスタート
設定で有効になる:2つのクラスローダー(再起動用、非再起動用)
2つのクラスローダーの使い分け
JRebel Spring Loaded:リロードになっている
Live Reload
自動でリロードしてくれるブラウザのプラグインに対応
→F5を押す手間なくなった
開発時のデフォルトプロパティ
・Maven/Gradle plugin
Maven→Gradle
地味にビルドを助けてくれるプラグイン
・まとめ
Spring Bootのはじめかた
IDE:いんてりJ、STS,Eclipse
イニシャライザー
CLI
↓
Maven・Gradle
↓
メインメソッド実行でTomcat
・むすびに
ちょっとしたカイゼンの積み重ねで開発が楽になる
アイデアがGood
クラウドサービスの登場:Javaがお手軽に
Q&A
・内部構造でのポイント
Auto-configureのソースコード
Bean Definitions
・SpringMVCとAOPは?
AOP:SpringフレームワークのCoreプロジェクト
MVC:Coreのソースコード
・UIはTimeleafをつかうけど、JSPをつかったら?
JSPがHTMLとロジックをまぜこぜにする点で・・・
不都合はないが、選ぶ理由がない
マニュアルに避けろと書いてある
組み込みで動かないことがある
■ぱぱっと理解するSpring Cloudの基本
・自己紹介
・Spring Cloudとは
クラウドネイティブアプリのツールの集合体
・クラウドネイティブなメリット
変化に強い、
性能のスケールアウト
障害に強い
・Spring Cloudで抑えておきたい基本技術
そもそもできること
クラウドネイティブなアプリ
マイクロサービスアーキテクチャ→疎結合
サービスの多重化:処理性能・耐障害性
・要素を簡素化した題材で基礎技術
結合した文字列を返す
りんごとペンを結合する Uh
もし、爆発的な人気が出たら・・・
・サービスディスカバリとクライアントサイドロードバランシング
発生しうる問題:集中
→多重化
Eurekaサービス:DNSみたいなもん
アプリ名、IPアドレス、ポート番号
【実際のコーディング】
3ステップ
1)Eurekaサービスの立ち上げ :イニシャライザー
依存関係にEurekaサーバー追加
2)サービス登録:Eurekaディスカバリ
3)ロードバランスで負荷分散:リボンを追加 Rest Templateを介して
・サーキットブレーカーで障害検知
1箇所の障害でサービス全体が応答しなくなる可能性
→障害時の規定の動作を定義、継続性を担保
→サーキットブレーカーパターン
【実際のコーディング】
2ステップ
1)EnableCircuitBreaker:Hystrix追加
2)HystrixCommandで障害の規定動作の指定
・Config Serverで設定情報の集中管理
サービスの数だけ設定ファイル:設定変更が大変、不整合の恐れ
→設定ファイルの集中管理
configサービスとgit
設定ファイルの更新
Git更新
refresh要求:管理者→アクチュエーターで
設定の再取得
【実際のコーディング】
2ステップ
1)EnableConfigServiceでConfigサービス立ち上げ
→イニシャライザーで設定ファイル
Git側アプリ名.propertiesでプッシュ
2)EnableConfigClientでクライアント作成
アクチュエーター経由で環境変数の確認
http://アプリ名/env
Spring Cloudを使ってみて感じた疑問
・信頼性は大丈夫(SPOFの問題)
→必要に応じて冗長化の必要がある
実際にはLBの後に複数のConfigインスタンスをおく場合が多い
・Eureka冗長化の考え方
可用性>整合性
Eureka動詞の間にお互い登録
→障害時、Eureka同士が持っている情報がずれている場合がある
・Config First or Discovery First
Config firstでしょう(ただし、両方とも動く)
config first:Configサーバーを起動→Eurekaへ登録
Discovery First:Eurekaを起動→Configを登録
→必要に応じて検討
・EurekaとDNSの違い
サービスレジストリと負荷分散
Eurekaだと、アノテーションを付けるだけ
ミドルウエアか、アプリか→検討
・おわりに
本セッションは基礎に絞って紹介
Q&A
・パフォーマンスは?
アプリレイヤでやるので、パフォーマンスは・・
それなのにアプリでやるのは、柔軟にできる点
・Spring Cloudのデザインパターンみたいなまとめはないの?
CloudFoundryが流行ってるよね。
SpringCloud公式ドキュメンテーションにいろいろある
・アクセスキューの動的制御は?
動的スケールアウト:ないかなあ・・・?
・悪意のあるユーザーがいたら?
デフォルトで認証機能が有効でない
認証してね
・ロードバランシングのカスタマイズは?
メトリクスの取得は?
クラスで定義、注入する
パフォーマンス:Spring Actuatorはリアルタイムで情報見える
・開発コスト
マイクロサービスをどう考えるか
・整合性担保
おなじリポジトリを見るので、いつかは整合性:Config
Eureka:一人でも動くようになっている
■CM
・JSUGでSpring勉強会
・年1回 Spring Day→10月中旬