JJUG CCC 2019 Fall
11:00-11:45 Javaプログラマのための頑張らないGo入門
https://www.slideshare.net/yyyank/javago
- おすすめ資料
- Go言語の初心者が見ると幸せになれる場所 #golang
- [A Tour of Go}(https://go-tour-jp.appspot.com/list)
- IDEはVSCodeがおすすめ
if err := nilがすごいでてくる。Javaと違って例外がないのでこれを使う- deferは関数の最後に処理される。finally
- 関数を引数に取る高階関数も使える
- クロスプラットフォーム(win,mac,linux)で使える
- 静的型付け言語。型は基本型と構造体がある。クラスがないので構造体にメソッドを追加する
- gofmtでフォーマットが決まっているので、タブ空白の数などの争いがない
- パッケージはHTTPサーバクライアント、json、ユニットテストなど揃っている
- コレクション系がJavaと比べて強力じゃない
13:30-14:15 Reliability Engineering Behind The Most Trusted Kafka Platform at LINE
https://speakerdeck.com/line_devday2019/reliability-engineering-behind-the-most-trusted-kafka-platform
- デイリーメッセージ360Billion、イン・アウトデータ550TB、60以上のサービスで利用
- 単一のクラスタだと世界最大クラス
- SLO 99.999%、99パーセンタイルでレスポンスタイム40ms以下
- Reliability
- SLO Visualization
- オペレーションの自動化
- クライアントライブラリの開発、リファレンス提供
- Troubleshooting
- SLO Visualization
- SLO Visualization
- APIレスポンスタイム、エラーレート
- Kafkaのような分散システムだと、クライアント側の処理も考える必要がある
- Prober(プルーバー)というサービスを使って計測している
- writer, Reader, Reporterのスレッドが動いている
- TroubleShooting
- 根本的な原因究明を必ずやるようにしている
- レプリカが2つ抜ける時点で障害になってしまう→replication factor=2?
17:45-18:30 DIコンテナ入門
https://bit.ly/2D9n8WY
- DIで実装を隠蔽できるので、ラッパークラスでログを差し込めたり、テストでモックに差し替えることができる
- DIとは、あるクラスが使用する他のクラスのインスタンスをコンストラクタなどを通じて外部から渡すようなクラス設計
- コンポーネントは、インジェクションされるインスタンスのこと。Beanとも呼ばれる
- @Autowiredアノテーションでインジェクションできるため、これをつけるだけでインスタンスを構築できる
- インスタンスの構築にはnewしたりsetterメソッドを呼び出したりする定型的なコード(ボイラープレートコード)が多く、これをDIコンテナに任せることによってコードの見通しがよくなる
- インスタンスの構築以外にDIコンテナの嬉しい機能
- スコープ
- AOP
- スコープ
- シングルトンは、DIコンテナの開始から終了までのスコープ。Spring Frameworkだとデフォルト
- プロトタイプは、インスタンス構築はされるがその後は管理されないスコープ。インジェクションされた数だけインスタンスが生成される
- リクエストスコープは、HTTPリクエストの開始から終了までがスコープ。セッションスコープは、セッションが生成されて破棄されるまでがスコープ
- おすすめの使い方
- なるべくシングルトンを使う
- なるべくプロトタイプは使わない
- HttpServletRequestを使うくらいならリクエストスコープを使う
- HttpSessionを使うくらいならセッションスコープを使う
- AOP
- コンポーネントのメソッドにコードを変えずに処理を追加できる機能
- 例えば、helloを返すメソッドにAOP処理を追加するとhello worldと返すようにできる
- コンポーネントのメソッドにコードを変えずに処理を追加できる機能
- DIコンテナの良い使い方
- ルックアップではなくインジェクションを選ぶ
- ApplicationContextからコンポーネントをルックアップする機能があるが、できればインジェクションを選ぶ。インジェクションでは依存がシグネチャに表れる
- シグネチャはメソッド名と引数の型の組み合わせ
- インジェクションでは、DIコンテナ起動時に依存関係をチェックできる
- ルックアップでは、実行されるその時まで依存関係はチェックできない
- コンストラクタインジェクションを選ぶ
- インジェクション方式は、コンストラクタインジェクション、フィールドインジェクション、セッターインジェクションがある
- コンストラクタインジェクションは、コンストラクタを通じてインジェクションすることはJavaのクラス設計としてごく自然な方式なのでこれを選ぶべき
- ルックアップではなくインジェクションを選ぶ