- 「Java EEが最近生意気だ」
- 「Seasarがカンファレンスやるらしいけど、もうライバルじゃないのでどうでもイイ」
「寺田生意気だ」
- 2003 Spring 0.9
- 2004 Spring 1.0
- 2015 Spring 4.2
- Boot, Data, Cloud, Batch...
- 将来?
- Spring : Cloud (CloudFoundry)
鈴木さん、アジャイルで痛い目にあったことがあるのか?と疑問に思う発言がちらほら
- Martin Fawlerのブログで取り上げられたのがキッカケで広がった。
- 2つの側面
- 技術面:分散配置と統合
- 文化面:持続性と分権
- 分散配置と統合
- サービスをサービスで構成する
- メッセージによる統合
- サービスをマネージする
- 持続性と分権
- サービス全体を持続的に 動作させる
- ドメイン固有の技術と運営
- ドメイン毎の自主性を認め、標準化を否定する
- 「社内標準フレームワークなんていらないですよね?」 by 鈴木さん
- ドメイン固有のライフサイクル
- ウェブサービスのレガシー化
- サービス共有の一般化
- サービスレベルがコードで管理できる
- 動作構成パターンの共有化
- 新しい理想論ではなく現実解
- 「アジャイルという言葉が先鋭化して、理想論化されたけど騙されないでください」 by 鈴木さん
- 技術論よりは技術管理論
- 粒度ではなく関係性に注目を
- どの粒度でも良い(マイクロに惑わされない)
- アプリとコンポーネント
- システムとサブシステム(この辺の事例が多い)
- システム全体と個別システム
- 重要なのはサービス相互の関係性のあり方
- SOA: トップダウン
- 個別システムの集合を統治(すべき)
- MSA: ボトムアップ
- 全体サービスを分割して統治(するしかない)
- アーキテクチャは統治の手法
- 封建制 -> 君主制 -> 民主制への変化と似てる
- 乱立 = 封建制: 孤立した統治
- SOA = 君主制: 偉大な王がいれば可能な統治
- MSA = 民主制: 有識な市民が必要な統治
- MSAは銀の弾丸ではない
- アーキテクチャの逆襲
- 柔軟性をアーキテクチャが保証する
- ドメインに適したプロセスを選択する
- 前提: 企業システムにおける適用
- ドメインの発見
- プラットフォームの利用
- ドメイン = 変化の境界線
- 変化の境界線を見つける
- 変化の要因を品質特性から理解する
- 変化の濃淡に線を引く
- ドメインは境界を維持したがる
「ドメインというものがあるのではなく、ドメインというものを決めて考える(結果論)」 by 鈴木さん
- プラットフォーム = 共有の動的資産
- バランスをいかに取るか
- 独立させすぎると無駄が増える
- 共有しすぎると対応できない
- 企業システムで言えばECサイト
- 特性
- 流入 -> 商品検索 -> 購買
- 個人情報やカード番号
- 基幹システム(請求/在庫)との連携
(小さい図)
- 商品管理
- コンテンツ管理
- 商品検索エンジン
- ...
- 当然、「正解はない」
- 「手段は目的にしない」
- 「いい形に進めると、アジャイルもMSAも自然とそうなる」
- Spring Bootだけじゃない
- Framework: アプリ内の関係性管理
- Integration: アプリ間の関係性管理
- Springはなにかを規定しないからこそ、アーキテクトにとって魅力的
- MSAについて
- MSAを理解する
- MSAのデザイン
- MSAの実例
- Springについて
- 「私はJava EEを好きになれなくて、最後までそこは寺田さんと折り合いがつかなかった」 by 鈴木さん
- 最後に
- 「MSAにする」のではなく「MSAになる」のが健全
- 標準プロセス
- 開発環境
- サポート
「Struts1はEOL迎えてるけど、これからも使い続けていく(古いTERASOLUNA)」 by NTT Data
- Spring Security, MVC, Data JPA
- Struts1とはサヨナラ
- Java 5(???)
- 開発リソースの確保のしやすさ
- 変化への対応
- セキュリティ面の強化
- 社内に蓄積したノウハウ量
- Software Framework
- Common lib
- Guideline
- Tutorial
- Samples
- Blank project
- e2e, Performance test suite
「Githubで公開してて誰でも使える」 by NTT Data
- Springのバージョン組み合わせ選定
- Spring IO Platformに従うことで解決
- Spring等の膨大な設定
- 乱雑なプロジェクト構成
- レイヤ分割したマルチプロジェクト構成
- 環境依存を集約し、アプリケーションと分離
- 各種設定・ライブラリ依存関係をデフォで設定
- 不完全な例外ハンドリング・ロギング
- (ありえないレベルの酷いコードが例として...)
- 必要な設定はブランクプロジェクトで設定済み
- 信頼性の低いコードの模倣
- ガイドラインを提供
- コピペしても安全なコード
GitBucket -> Jenkins -> APServer, Selenium
(以前、竹添さんが在籍していたからGitBucketなのかな)
- 脆弱性の報告(2件)
- バグの報告
TERASOLUNA FWの紹介でした
CDの話が主だった。
(スクリーンに映らないというトラブルで10分押し)
- Microservices
- CI
- Cloud Computing
- Agility
- 速いDeliveryが大事
- DevOps
- the Devops Handbook
- 各フェーズ、チーム間の待ち行列を無くす
- Value chain mapping (http://www.computerweekly.com/opinion/Value-chain-mapping-learning-to-use-IT-as-a-strategic-weapon)
- 事例: amazon.com
- CloudFoundry is Cool!
- Monolith
- the art of scalability (http://theartofscalability.com/)
- Netflix (http://www.slideshare.net/adrianco)
- Conway’s Law (http://haacked.com/archive/2013/05/13/applying-conways-law.aspx/)
- DDD
- 開発プロセス
- Jenkins, CircleCI, Travis CI
- 10+ Deploys Per Day (http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr)
- Spring Boot
- Spring Cloud
Companyの会社だけど、HUEプロジェクトでの事例について
- 初期
- MariaDB
- Spring Bootは時期的な問題があってパス
- 現状
- RDBMS -> Cassandra, Elasticsearch, ...
- Batch -> Spark Streaming, Spark Batch, ...
- Cache -> ...
- Front -> SPA, karma + jasmine, ...
- 要求
- クラウドベースで動く
- 応答速度は100ms
- 条件
- 同時並行的に開発
- APサーバ起動時間が遅くなっていく
- プロジェクト間の依存関係が...
- DIって言うけど何が読み込まれてるの?
- 依存関係が謎、解決できない
- 起動時間が遅い
- plugi-in的に扱うものは?
- Modularityの担保
- 実装とインタフェースの分離
- フレームワークの設定は@Importで管理
- 2重ロード防止
- 速度も考慮
- ComponentScanをしないという選択肢
- 人の増加は大規模プロジェクトの宿命
- Modularityを考えるのは大事
- SPRING INITIALIZR (http://start.spring.io)
- Spring Bootのライブコーディング
- Endpoints (http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html)
- SpringでRedisを操作するためのライブラリ
- JedisのローレベルAPIではなくTemplateを提供している
- RedisCacheManagerによりspring-contextのCache機構と連携可
- Redisに存在しない場合のみメソッドの中身が呼ばれる(@Cachable)
- Redis Cluster
- Redis Sentinel
- Load Balancer
- Spring + Redis Cluster
- Spring Data Redisは未対応
- Spring + Redis Sentinel
- Sentinel, Master, Slaveと接続切り替えの対応が必要?
- Spring + VIP(これがシンプルそう)
-
ニジボックス
-
カードエンジンと呼ばれるPHPオレオレフレームワーク
-
リクルートライフスタイル
-
Seasar2ベースのR2と呼ばれるJavaオレオレフレームワーク
-
R2にロックインされたインフラ
- 社内標準フレームワークを作りこむこと
- 社内標準フレームワークの縛りを増やすこと
- ベースフレームワーク(Spring)のスタンダードから逸脱した構成にすること
- オレオレフレームワークを作ること
- 柔軟に選択可能な状態
- ベースフレームワーク(Spring)のスタンダードに沿った構成で使う
- 独自の作りこみがどうしても必要な場合はプラグイン的な実装にする
- Spring Frameworkの理解を進める
-
Spring BootでMicroservicesなサービスを開発するライブコーディング
-
start.spring.io の Cloud部分をメインに
-
Netflixは600以上のサービスから構成されている
-
一元管理されたコンフィギュレーションが重要
-
共通化された1バイナリのデプロイができる
-
spring-cloud-config-server が全Microservicesのコンフィギュレーションを管理する(これのライブコーディング)
-
bootstrap.properties
-
Cloud Bus AMQPにより全Microservicesにコンフィギュレーションの変更を一斉に周知できる
-
Eureka Server
-
ParameterTypeReference
-
API Gateway - Edgeサーバの追加(AWSのじゃない)
-
Integration Component
-
Zero instanceの際のFallback
-
@EnableFeignClient
-
@EnableZuulProxy
-
@EnableCircuitBreaker
-
Hystrix Dashboard
-
@EnableHytrixDashboard
-
/hystrix.stream
分散システムのパターンをサポートする