Spring Day 2016に行ってきた

http://springday2016.springframework.jp/

午後からになりましたが行ってきたので、参加したセッションをレポートしたいと思います。  

## 10 Ways to Get Super Productive with Spring

Nicollさんによる、OAuthからflywayでのマイグレーションまでライブコーディング。
席からスクリーンまで遠すぎて雰囲気しか分かりませんでした、、  
というのは言い訳、勉強しよう。

https://github.com/snicoll-demos/cfp-example

## Let's Visualize Your Spring Cloud Applications!

スライド
https://speakerdeck.com/shintanimoto/lets-visualize-your-spring-cloud-applications-number-jsug-number-springday

自分はマイクロサービス開発をしている訳ではありませんが、サービス成長によるサーバー数増加による苦悩は感じており可視化について興味がありました。

### Spring Cloud Sleuth + Zipkinでサービス間の依存関係を可視化
  - Spring Cloud Sleuthで、複数サーバーを跨って処理されるリクエストに共通のIDを振って処理を追跡
  - Zipkinで、サービス間の依存関係と、どのサービスがボトルネックになっているかも可視化できる
  
マイクロサービス化すると、こう言った可視化は必要になるよなーと納得
    
### Elasticsearch + Logstash + Kibana + Filebeatでログファイルを可視化
- FileBeatはログファイを読み込み、Logstashに送るのが仕事
- LogstashはファイルをJSONに加工してElasticsearchに渡す。
- Kibana+Elasticsearchでログを可視化。レベル別にログ件数を出したりできる。

重要なログが埋もれる、逆に重要じゃないログが邪魔する、などログの見やすさには問題意識を持っていたので、これが一番興味が使い方でした。
Elasticsearchにログを蓄積さえしておけば、後から集計軸を変えられるし、ダッシュボードも共有できると思うのでそこら辺に魅力を感じました。

### Elasticsearch + Kibana + Metricbeatでサーバーやプロセスの状態を可視化
- Metricbeatでリソース情報を収集。
- Kibanaでリソース状況を可視化。
- 他のツールと比較してのメリットはログ情報と並べてリソース情報を見れること

例えば高負荷をZabbixで検知したら、その時間に何が動いていたかアプリケーションのログやDBのログを調べる、みたいなユースケースは多いと思いますが、ログとCPU使用率、スロークエリなど並べてみれたら便利ですよね。今まで気づかなかった問題の予兆に気付けるかもしれないし検討する価値はありそうです。

- そのほか、可視化システムがこけた時にログをロストしないようために、Apaceh Kafka使うケースも。（ログのロストがクリティカルなシステムの場合は必要かも）

## 楽天トラベルとSpring

スライド
http://www.slideshare.net/rakutentech/springspring-day-2016

- 少し前にSeasr2系からSpringに移行したとのこと。
- APIの量産する時期を経て、現在はAPIをまとめたり整理している。
- そこで健在化した問題と対応についての発表

### APIのドキュメンテーションの問題

- 実際に動いてるものとドキュメントがずれていく問題
- ドキュメントに信ぴょう性がなくなり、理解もしにくいものに
- そこでSpring REST Docsを導入してドキュメントを自動作成
- 実際にテストを動かしてリクエスト・レスポンスがサンプルを自動で作ってくれる

### Session管理の問題

- Sticky sessions
    - サーバが落ちたらセッションも引き継げない
- Session replication
    - サーバー間でセッション情報を同期する
- 上記2つはそれぞれ問題があるので、Spring Sessionを採用
    - HAだしASやデータベースの選択肢が多い。
- 楽天トラベルではHazelcastを採用した
- Spring Security でCSRFチェック

マイクロサービス化した時に、真っ先にSessionの問題が思い浮かびますが、そこもSpringをサポートしてくれてるんですね。

### ログ追跡

- Spring Cloud Sleuthでログを収集して分析している

### Spring cloud Config

- コンフィグをGitでバージョン管理できる
- Config Server はHTTP APIを提供する
- 再起動なしでコンフィグのリフレッシュができる
- プロパティを暗号化してGitに格納している
- コンフィグサーバーからJSONでconfigを取得できる
- 一部のサーバだけで共用したいconfigにも対応している。
- デメリットはコンフィグでauto-completeが使えないこと

サーバーが増えてくるとコンフィグの管理が煩雑になるので、環境依存の設定ファイルを管理する仕組みは必須でしょうね。  
特に設定ファイルにパスワードを書くことも多いので暗号化の仕組みは魅力でした。

### そのほか

- Spring Initializrは社内のライブラリを追加したり、カスタマイズできる
- 新しく来た人にSpringを覚えてもらうには
https://spring.io/guildes
へのリンクを多用した（補足もして）ガイドを作った

- ~~スライドはまだ公開されてないっぽい。~~ 公開されました。（登壇者の方から直接ご連絡いただきました。ありがとうございます）

## 40 Tips & Tricks for Spring in IntelliJ IDEA

IntelliJは普段から使っているが、これまたSpringの知識がなさすぎて辛いことに。  
Configを可視化できるのは良さげでした。

使用していたGithubリポジトリはこちら
https://github.com/YannCebron/springtricks

## Spring で実現する SmartNews のニュース配信基盤

スライド
https://speakerdeck.com/kainoque/spring-deshi-xian-suru-smartnews-falseniyusupei-xin-ji-pan

- Seasar2のモノリシックなシステムをSpring Bootでサービス分割した
- サービス分割したことで個々のサービスに集中できるようになった
- Spring Bootを採用した理由は、高い開発効率、シンプルなインフラ・ミドルウェア構成、高度な周辺エコシステムの恩恵
- Spring Fox/Swaggerによるシステム可視化
- 高度な周辺エコシステム。Spring Cloud Config, Spring Cloud Consul, Reactor(Spring 5)

## まとめ

「マイクロサービス」と銘打ってないセッションでもマイクロサービスの話は普通に出てくるし、Spring界隈ではマイクロサービスは当たり前になってきている印象。それはマイクロサービスとの相性の良さでSpringが選ばれているのかなと思いました。
APIのドキュメント化やログについては共通の問題なようで、導入事例が沢山聞けて良かったです。
楽天トラベルさんの発表が良くまとまってました。

最後に、技術評論社さんのブースでSpring徹底入門とDevOps導入指南を購入して帰りました。
![IMG_5443.JPG](https://qiita-image-store.s3.amazonaws.com/0/387/204200bd-6cc0-5edc-93f4-c0cb14e80af9.jpeg "IMG_5443.JPG")

## セッションのスライドやサンプルコードまとめ

- ROOM1-2 [Spring Framework 5.0](https://speakerdeck.com/snicoll/spring-framework-5-dot-0-themes-and-trends)

- ROOM1-3 災害対策(DR)対応の超ミッション・クリティカル Cloud Foundry は Azure !!

- ROOM2-3 Application Re-Architecture Technology

- ROOM3-3 事例で知る！大規模エンタープライズ開発現場のリアル

- ROOM4-3 これからはじめるSpring MVC

- ROOM1-5 [10 Ways to Get Super Productive with Spring](https://github.com/snicoll-demos/cfp-example)

- ROOM2-5 Java EEユーザーから見たSpring

- ROOM3-5 [Spring Day 2016 - Web API アクセス制御の最適解](http://www.slideshare.net/daisuke_m/spring-day-2016-web-api)

- ROOM4-5 [Spring Bootで学ぶ初めてのWEBアプリ開発](http://www.slideshare.net/terahide/spring-bootweb-69236132)

- ROOM1-6 [Lineにおけるspring frameworkの活用](http://www.slideshare.net/tokuhirom/linespring-framework)

- ROOM2-6 [Let's Visualize Your Spring Cloud Applications!](https://speakerdeck.com/shintanimoto/lets-visualize-your-spring-cloud-applications-number-jsug-number-springday)

- ROOM3-6 [Spring 5に備えるリアクティブプログラミング入門](http://www.slideshare.net/TakuyaIwatsuka/spring-5)

- ROOM4-6 [Springの現在,過去,未来](http://www.slideshare.net/HasegawaDanna1/spring-day-2016-spring)

- ROOM1-7 Springからブロックチェーン、触ってみた！

- ROOM2-7 [Microservices Architectureを超大規模プロジェクトでやってみた](https://speakerdeck.com/kingofreverb/microservices-architecturewochao-da-gui-mo-puroziekutodeyatutemita)

- ROOM3-7 [楽天トラベルとSpring(Spring Day 2016)](http://www.slideshare.net/rakutentech/springspring-day-2016)

- ROOM4-7 [Springを使ったWebアプリにリファクタリングしよう](https://github.com/KouheiToki/jsug-handson-20161118)

- ROOM1-8 [Springのための、IntelliJ IDEAの40の秘訣](https://github.com/YannCebron/springtricks)

- ROOM2-8 [Grailsでドメイン駆動設計を実践する時の勘所](http://www.slideshare.net/bikisuke/grails-69293672)

- ROOM3-8 [アメブロの大規模システム刷新と それを支えるSpring](http://www.slideshare.net/nin2hanzo/spring-69237035)

- ROOM1-9 [Spring で実現する SmartNews のニュース配信基盤](https://speakerdeck.com/kainoque/spring-deshi-xian-suru-smartnews-falseniyusupei-xin-ji-pan)

- ROOM2-9 [Data Microservices with Spring Cloud Stream, Task, and Data Flow](
http://www.slideshare.net/makingx/data-microservices-with-spring-cloud-stream-task-and-data-flow-jsug-springday)

- ROOM3-9 amazon産クラウドのAWS Springのソースを纏わせ実用的アプリケーション仕立てに