「JJUG CCC 2015 Spring」に行ってきた
Javaのユーザグループ主催のカンファレンス「JJUG CCC 2015 Spring」に参加してきました。 普段見れない他社さんの仕組みの話とか流行りの技術の話とか聞けて、個人的には大満足。
今年でJava15年目。何度も他の言語に乗り換えようとするんだけど、なんだかんだ硬くて素直なところはJavaの良さではあります。あと、積み上げてきたスタックの大きさというか厚みというか、やっぱり信頼おける。と、個人的には思ってます。
13:00- G-1 Java が支える人気ニュースアプリ NewsPicks の裏側 by 文字 拓郎さん(株式会社ユーザベース)
プレゼンメモ
NewsPicks
- Platform/Publisher,Picker
- gunocyとかSmartNewsとは違う層
- 意思決定者層が多い、専門家が多い
- 35万人くらい。有料課金ユーザも増えてる。
- エンジニアの数は10人くらい
- プッシュはあえて手動でやっていたりする
- チーム(プラットフォーム、ブランドデザイン、編集部)
NewsPicks裏側
APP Server内側
SQS
- 可用性が担保された分散キュー。
- トランザクショナルではない。
ElasticSearch
- 全文検索。重複判定。
Backend
- CRONでスケジュール
- 取り込んだ記事がタイムラインに反映されるまで
- DynamoDBに一旦取り込む
- カテゴライズサービスでカテゴライズする
- ユーザのタイムラインに向けて波及させる
- 間にはキューを挟む
他の言語
Redis編
- Redisのマスタースレイブ。たまにこけてタイムラインがなくなる。
- ユーザ数10万人くらいで垂直分割
- selectする層を用意して使う
- 人気ユーザが寄っているので、実はユーザで分散しちゃダメ。
- 結局、ハッシュ分散
- Read/Writeをわけて読み出しはReadレプリカ
SEO編
- Angular で開発されたSPA。
- Phantom でスナップショット
急成長の代償
- 後方互換性を維持したままひたすら拡張
- レイヤリングがほどんどされていない
- スタートアップ
グロース編
- REDSHIFT トラッキングログを整備、KPIダッシュボード
- SPRING BOOT , DOMA2 ,ANGULAR JS ,D3 一週間くらい
- SQL20 がシンプル
Angularやめる
- SEO
- polyfill service ユーザエージェントでいろいろ
- THYMELEAF
- handlebars とか使うと便利かも
所感
- 知らないライブラリが出てきたのと実際に動いているサービスの裏側のアーキの話をしていただけるのは大変貴重で、かなり勉強になった。
- みんなreact使ってみたいんだな、と。
プレゼンスライド
https://speakerdeck.com/monzou/java-gazhi-eru-ren-qi-niyusuapuri-newspicks-falseli-ce
14:00- Web開発における最新テスト手法 by tokuhiromさん (subtech)
プレゼンメモ
- 導入
- サーバサイドの開発はテストコードを書く
- どこまで自動化するが
- 手動でやったほうが楽なものは手動で
- 繰り返すものは自動で
- テストコード「契約」となるので堅牢なものになる
- ビジネスロジックはモデルに入るのでモデルをテストする
- RDBまわり
- 外部APIのテスト
- embedded jetty を使う
- apimock
- コントローラのテスト
- ダミーデータ
- テストライブラリ
所感
- なるべく動作環境に近い環境でテストしましょう、っていうのは同感。なのでjetty立ち上げTDDは試してみてもいいかも。
- ただ、結局、何を確認したいかによるよねと。間違いようのないhttpアクセスのコードだったらモックでもいいじゃん、という気もする。というかそうしてる。
プレゼンスライド
- 見つからなかったです。
15:00- 大規模な負荷でもドキドキしない為のJava EE by nagaseyasuhitoさん (java-ja / グリー株式会社)
プレゼンメモ
- 負荷テスト
- アンチパターン
- 負荷テストの目的
- システムの限界性能を知る
- 高負荷時の不具合を発見する
- Stress Test meets Continuous Integration
- JMeter
- jmeter-maven-pluginで自動化
- 負荷テストのパラメタはMavenのプロパティ化してチューニングするとよい。
- jenkins performance plugin jmeterの結果を出力するプラグイン
- 負荷をかけるとどうなるか
- 他ユーザのレスポンすが返ってくる
- レスポンセウが返ってこない
- リソースは余ってるのにレスポンスが遅い
- リクエストが遅い
- レスポンスが遅い
- ボトルネックを探す
- Mission Control ,Flichg REcorderで取得したJVMの統計情報を可視化するツール
- 以下のオプションをつけてアプリサーバを起動する -XX;LUnlockCommercialFeatures -XX:+FlightRecorder
- JPAのスケールアウト戦略
所感
- 意外とjmeterで地味に負荷かけてるんだな、っていうところが驚き。
- CIにどこまでのシナリオを組み込むかは課題なのかな。uiが変わったら作り直しだし、毎回チューニングするわけにもいかないだろうし。
- エンタープライズの人だからか、やっぱり、負荷テストやってから「限界を知る」っていうのには違和感がある。いやまあ、実際そういう面もあるんだろうけど、出来高でやってていいのかなあ、っと。
プレゼンスライド
16:00 『Embulk』に見るモダンJavaの実践的テクニック ~並列分散処理システムの実装手法~
by なひ さん(トレジャーデータ株式会社)
プレゼンメモ
- Embulk
- Java実装技術
所感
- やっぱりEmbulk便利そう
- 噂には聞いているけどUnsafe API。名前からして触ってはいけないもの感が漂ってるんだよなあ。いつか触ってみよう。
プレゼンスライド
17:00- Grails 第3章 進化したSpring-bootベースフレームワーク
by 山本 剛さん(日本Grails/Groovyユーザーグループ, newcast inc.)
プレゼンメモ
- Grails
- Road to 3
- Grails1系:古代
- grails2.3系まで:近代
- Spring Bootをベースにする
- grails2.4 はspring4
- Grails 3
- Groovy 2.4
- Spring 4.1
- Spring Boot 1.2
- Gradle
- JavaやっててGradleやってないのはおかしい
- なぜspring boot?
- マイクロサービス
- fat jarと組み込みコンテナ
- モニタリングとヘルスチェック
- オートコンフィギュレーション
- Springの柔軟性
- *spring bootが簡単そう
- コアフィーチャ
- Groovy2.4 で速くなった
- 内部フローの変更
- 開発環境フィーチャ
- Intellij IDEAのgradleプロジェクトで開発
- テストフィーチャ
- まとめ
- spring boot
- 3.0はまだ不安定かも。3.1に期待。
所感
- うーむ、grails3もちょっと厳しそうだな。
プレゼンスライド
18:00 いろんなデータをKibana4で見てみよう by 大谷 純 さん (elastic.co)
プレゼンメモ
- elastic
- elasticsearch から elasticへ変更。
- ELK Stack
- DataをLogstash に食わせて、elasticsearchにためて、データをkibanaで見る。
- Logstash
- 概要
- ログデータの収集・管理
- 収集、パース・加工、送出
- jruby
- アーキ
- input Filter output
- 設定ファイルでinput,filter,outputを指定する
- 概要
- Elasticsearch
- Kibana4
- ユースケース:アクセスログ
- ユースケース:ツイート
- logstash
- ツイッターのinputもできる
- logstash
- ユースケース:git log
- gitのヒストリを取り出してelasticsearchに投げる
- ユースケース:javaのログ
- multilineを使うとstacktraceとかの複数行も取れる
- elasticsearch勉強会やってる
所感
- kibana4になってますますsplunkっぽくなったなあ
- raspberry pi2 に入れてみよっと
プレゼンスライド
- 見つからなかったです。