Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
-
Upload
takuya-iwatsuka -
Category
Technology
-
view
1.037 -
download
2
Transcript of Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Copyright©2016 NTT corp. All Rights Reserved.
Spring I/O 2016 報告Test / Cloud / Other Popular Sessions2016年6⽉22⽇NTT ソフトウェアイノベーションセンタ岩塚 卓弥
2Copyright©2016 NTT corp. All Rights Reserved.
• 名前:岩塚 卓弥
• 所属:NTT ソフトウェアイノベーションセンタ• NTTの研究所のうちソフトウェアを専⾨に扱う• ⾃部署ではソフトウェア⼯学を研究• Springベースのグループ共通フレームワークの整備を担当• Spring本2冊にレビュアーとして参加
• 改訂新版 Spring⼊⾨,Spring徹底⼊⾨• 良い本なので両⽅買おう!
• Spring I/Oには⼆年連続での参加• 去年よりTシャツがカッコイイ!• 今年は⽇本からの参加者が増えて素晴らしい!
⾃⼰紹介
3Copyright©2016 NTT corp. All Rights Reserved.
• Spring I/O 2016のセッションのうち以下を紹介• テストに関するセッション
• Testing Spring Boot Applications• Phil Webb
• JUnit 5 – Shaping the Future of Testing on the JVM• Sam Brannen
• クラウドに関するセッション• Spring Cloud *: Exproling Spring Cloud Implementations
• SPENCER GIBB
• (Optional)その他の⼈気セッション• Cacheing with Spring: Advanced Topics and Best Practices
• MICHAEL PLÖD• Understanding Microservice Performance
• ROB HARROP
今⽇話す内容
4Copyright©2016 NTT corp. All Rights Reserved.
テストに関するセッション
5Copyright©2016 NTT corp. All Rights Reserved.
• Spring Boot 1.4におけるテスト機能の改善について
Testing Spring Boot Applications
コミットログを古い順から追っていくと1.3→1.4への変更が分かるようになっている
6Copyright©2016 NTT corp. All Rights Reserved.
• 時間がないのでダイジェストでお送り致します• コミットログを追いながら10個のポイントを紹介
• 気になるところは以下の資料をチェック!• リポジトリ:https://github.com/philwebb/testing-
spring-boot-applications
• リファレンス:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle
• 公式ブログ:https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4
7Copyright©2016 NTT corp. All Rights Reserved.
1. SpringRunnerの使⽤
機能は同じ
Before (≦ Spring Boot 1.3)
After (Spring Boot 1.4 ≦)
8Copyright©2016 NTT corp. All Rights Reserved.
2.@SpringBootTestの使⽤Before (≦ Spring Boot 1.3)
⼀つのアノテーションに集約After (Spring Boot 1.4 ≦)
9Copyright©2016 NTT corp. All Rights Reserved.
3. ContextConfigurationの推論Before
After消えた!
classesを省略&@Configurationが内部に定義されていない場合⾃動的に@SpringBootConfigurationを探す
10Copyright©2016 NTT corp. All Rights Reserved.
4. @LocalServerPortの使⽤Before (≦ Spring Boot 1.3)
After (Spring Boot 1.4 ≦)
汎⽤的な@Valueに代わって専⽤のアノテーションを使⽤
11Copyright©2016 NTT corp. All Rights Reserved.
5. TestRestTemplateを@AutowiredBefore
Before
Before (≦ Spring Boot 1.3)
12Copyright©2016 NTT corp. All Rights Reserved.
5. TestRestTemplateを@AutowiredAfter
After
After (Spring Boot 1.4 ≦)
“http://localhost:${local.server.port}” が設定済み
13Copyright©2016 NTT corp. All Rights Reserved.
6. @DataJpaTestの使⽤
New(Spring Boot 1.4 ≦)
デフォルトで@Transactional &⾃動的に組み込みDBが設定される
New (Spring Boot 1.4 ≦)
14Copyright©2016 NTT corp. All Rights Reserved.
7. @AutoConfigurableTestDatabaseの使⽤New (Spring Boot 1.4 ≦)
⾃動的に組み込みDBが設定され,既存のDataSourceを置き換える
15Copyright©2016 NTT corp. All Rights Reserved.
8. @JsonTestの使⽤New (Spring Boot 1.4 ≦)
…
New (Spring Boot 1.4 ≦) Spring Boot 1.4からはspring-boot-starter-testでAssertJが依存ライブラリに
追加される
16Copyright©2016 NTT corp. All Rights Reserved.
9. @MockBeanの使⽤New (Spring Boot 1.4 ≦) Mockitoのmockを作成し
applicationContextに登録/置換
17Copyright©2016 NTT corp. All Rights Reserved.
10. @WebMVCTestの使⽤New (Spring Boot 1.4 ≦) テスト対象のController
⾃動設定されたMockMvc
必要なコンポーネントのMockを作成
18Copyright©2016 NTT corp. All Rights Reserved.
JUnit 5 – Shaping the Future of Testing on the JVM
・Modular全部⼊りのjarをやめてモジュール化
・ExtensibleRunner, @Rule, @ClassRuleをやめてシンプルに
・ModernJava8対応(Lambda, Stream, …)
・Forward & backward compatibleJUnit4でJUnit5のテストが動くJUnit5でJUnit4のテストも動く
5.0.0.GA late 2016!
スライド:http://www.slideshare.net/sbrannen/junit-5-from-lambda-to-alpha-and-beyond
19Copyright©2016 NTT corp. All Rights Reserved.
Springとの連携
@RunWith(SpringRunner.class)@ContextConfigurationpublic class HogeTest{
Before (JUnit4)Spring 4.2までの場合は
SpringJUnit4ClassRunner.class
@RunWith(Theories.class)@ContextConfigurationpublic class HogeTest{
@ClassRulepublic static final SpringClassRule SPRING_CLASS_RULE =
new SpringClassRule();@Rulepublic final SpringMethodRule springMethodRule = new SpringMethodRule();
Spring 4.1までの場合はTestContextManagerを使⽤
他のRunnerを使いたい場合
Before (JUnit4)
20Copyright©2016 NTT corp. All Rights Reserved.
Springとの連携
@ExtendWith(SpringExtension.class)@ContextConfigurationpublic class HogeTest{
After(JUnit5)
必要ならば複数のExtensionを指定できる
@AutowiredDog dog;
@Testvoid autowiredParameter(@Autowired Dog dog){
従来通りDI可能
メソッドの引数にもDIできる(by JUnit5 Extension API)
参考資料:https://github.com/sbrannen/spring-test-junit5/
21Copyright©2016 NTT corp. All Rights Reserved.
クラウドに関するセッション
22Copyright©2016 NTT corp. All Rights Reserved.
• Spring Cloundのロードマップ• Brixton GA:2016/5/11• Camden:2016年3Q (follow Spring Boot 1.4)• Dalston:2017年2Q (follow Spring 5 & Spring Boot 2.0)
• Service DiscoveryとDistributed Configurationについて3つのプロダクトを⽐較
• Eureka• Consul• Zookeeper
Spring Cloud *: Exproling Spring Cloud Implementations
Proʼs・Service Discovery & Configuration・HTTP API & DNS Interface・Health Check ・…(多数)Conʼs・Young・Agent on every host
スライド:https://spencer.gibb.us/preso/2016-05-18%20Spring%20Cloud%20Discovery%20and%20Config%20Sys%20Comparison.pdf
23Copyright©2016 NTT corp. All Rights Reserved.
Consulの利点 – Service Discovery & Configuration
Node_A
Consul Agent (Client)
Service_A Service_B
Node_B
Consul Agent (Client)
Service_B Service_C Service_D
…
K/V Store
Node_S
Consul Agent (Server)
Data Center
…GET /v1/catalog/service/Service_C
[{“Node”:”Node_B”, “Address”:...
Service Discovery
24Copyright©2016 NTT corp. All Rights Reserved.
Consulの利点 – Service Discovery & Configuration
Node_A
Consul Agent (Client)
Service_A Service_B
Node_B
Consul Agent (Client)
Service_B Service_C Service_D
…
K/V Store
Node_S
Consul Agent (Server)
Data Center
…GET /v1/kv/foo
[{...,”Value”:” YmFy”, ...,
Configuration
25Copyright©2016 NTT corp. All Rights Reserved.
Consulの利点 – HTTP API & DNS Interface
Node_A
Consul Agent (Client)
Service_A Service_B
HTTP API経由だけでなくDNSでService Discoveryできる
$ dig @127.0.0.1 -p 8600 Service_C.service.consul SRV
…;; ANSWER SECTION:Service_C.service.consul. 0 IN SRV ...
26Copyright©2016 NTT corp. All Rights Reserved.
Consulの利点 – Health Check
Node_A
Consul Agent (Client)
Service_A Service_B
Node, Serviceに対してそれぞれチェック内容を定義可能
・Script Check:外部スクリプトを定期実⾏・HTTP Check:GETリクエストを定期発⾏・TCP Check:TCPコネクションを定期試⾏・TTL Check:
⼀定期間内にステータスが更新されているかチェック・Docker Check:
Dockerコンテナ内の外部スクリプトを定期実⾏
27Copyright©2016 NTT corp. All Rights Reserved.
Spring Cloud Consul
・Service DiscoveryやDistributed ConfigurationにConsulを使⽤
・Spring Cloud Netflixを使ってRibbonやZuulとも連係可能
28Copyright©2016 NTT corp. All Rights Reserved.
その他の⼈気セッション
29Copyright©2016 NTT corp. All Rights Reserved.
• Spring I/O 2016 ⼈気No.2セッション• エンタープライズアプリケーションにおけるキャッシュについての9つのベストプラクティス
• 分散の⽅針やキャッシュの対象について• Springのキャッシュ抽象化機能について
Cacheing with Spring: Advanced Topics and Best Practices
スライド:https://www.innoq.com/de/talks/2016/05/caching-spring-best-practices/
30Copyright©2016 NTT corp. All Rights Reserved.
• Spring I/O 2016 ⼈気No.3セッション• 性能に関する以下のトピックをシミュレーションしながら解説
• 性能を正しく測る• 潜在的な性能障害を⾒つける• 最適化の候補を正しく特定する• 複雑なマイクロサービスをモデル化する• システムのスケーラビリティを予測する
Understanding Microservice Performance
スライド(動画):https://www.youtube.com/watch?v=SjC9bFjeR1k
31Copyright©2016 NTT corp. All Rights Reserved.
参考:レイテンシとパーセンタイル
42回リクエストすれば約9割の確率で95パーセンタイル値以上のレイテンシを経験する
1 � 0.9542 = 0.88401...
レイテンシはロングテイルな分布になることが多い→ 分布を測定し,テイルに着⽬することが重要
数
レイテンシ
多
少⼩ ⼤
多くのユーザが⾼確率でこの辺りのレイテンシを経験することになる
32Copyright©2016 NTT corp. All Rights Reserved.
参考:リトルの法則
L = �W
リトルの⽅式:安定したシステムにおいて
L:平均待ち⾏列数(同時処理リクエスト数)λ:平均到着率(スループット)W:平均待ち時間(レイテンシ)
Lがシステムの限界を超えるとどこまでも性能が劣化する→ 利⽤率が⾼いというのは危険な兆候
33Copyright©2016 NTT corp. All Rights Reserved.
参考:Universal scalability law
C(N) =N
1 + �(N � 1) + �N(N � 1)
Universal scalability law:
C:キャパシティN:並列数α:競合コストβ:⼲渉コスト
(0 � �, � < 1)
・理想的(α=β=0)にはNを増やすだけスケール(C(N)=N)・β=0のときはアムダールの法則と⼀致・0<βのときは,Nが単調増加しなくなる
→ βを突き⽌めて最適化の対象とすることが重要
34Copyright©2016 NTT corp. All Rights Reserved.
•今⽇紹介できたのはほんの⼀部だけ• 是⾮スライドやリポジトリを⾒に⾏って下さい!
•できれば現地で聴講するのがベスト• デモやライブコーディングはこういった場での再現が難しい
• 機会があれば是⾮参加しましょう!
終わりに