JJUG CCC 2019 Fall 行ってきた | Advent Calendar 2019
IT系の勉強会行ってきた Advent Calendar 2019 - Adventar の22日目
参加したいセッションが被ってることが多いJJUG CCC。
Gradle を完全に理解した人が、何も分からなくなるための第一歩
- ファイル操作とかGradleで柔軟にできそうな話
- 自作のタスクが作りやすい
詳細はQiita見たほうが早いやつ…。
入門 例外
GitHub - mike-neck/practical-exception
- 契約による設計 という本を元に解説
- 例外:メソッド実行時に発生。メソッド仕様が満たせなくなるような状態やイベント
- Javaにおける例外:例外を意味するオブジェクト。Exception関連のクラス
try catch で受け取れる。catchすると後続処理には行かない
finally or AutoCloseable で必ず処理を行うことが可能 - ルート例外を使わない
独自例外クラスを作る場合はデフォルトコンストラクターを無効化 - 例外を無視しない
運用を支えるためのログを出すにはどうするか?
- ログの必要性
運用では色んな事が起こる。問い合わせ、パフォーマンス劣化、バグ… - いつ、どういう動作を行ったかを読み解く
- 誰が読むのか
運用してる人、問い合わせ対応してる人、半年後の自分 - ログの場所
関数の最初でログを出力しない、出力するなら最後 - システム間通信の結果はログに出す
- ログレベルを使い分ける
- 構造化されたログで出力
おすすめはJSON - トランザクションに紐づくIDをログに付与
ServletFilterでMDCにrequestIDを付与する - 問題の原因や回復手段を書く
「エラーが発生」だけではわからない、どこで何が起きて次のアクション
長く続くサービスがモダンであり続けるには
- 自分たちが楽をするため
ドキュメントや事例が多い、つまづきから解決が早い - 脆弱性の発表は急に来るもの、定期的にアップデートする必要がある
- 改善活動、チームにあったスピードで段階的に進めていく
- GradleVersionsPlugin プロダクトの依存ライブラリのバージョン情報をチェックしてくれる
→Slack通知&JIRAチケットの自動生成
こわくないソースコードリーディング生活
- 読み方を知ればソースコードリーディングはこわくない
簡単なものから読んでいけばよい - cloneしたりしてIDEで見るのがおすすめ。参照先やマウスーオーバーで定義が見れるので便利
- ライブラリのソースコードを読むことはハードル高くない
JavaだとApacheCommons程度なら読めるしJavaDocもある - 難しく感じる理由
多重知能理論:色んな物差しがあり単純ではない - ソースコードリーディングはスキル
トレーニングすることでスキルが上がる
最初は誰でもつまづく - コード読む上で大事なこと
目的や目標を設定、読み飛ばすのか深く読む場所
深く掘り下げすぎない、最初は浅く広く - 図を書いたりすることで理解しやすくなる
JavaでTracing
- トレーシングの前にマイクロサービスの簡単な説明
それぞれのサービスはPolyglotで構成、監視や通信のロジックが個別に実装
大規模なアプリを素早く開発
→統一的に監視が難しくなっていく - ServiceMesh、Istioの登場
- OpenShiftServiceMeshを使うことでIstio+αの機能を提供
- OpenTracing + OpenCensus = OpenTelemetry
- Quarkus:クラウドネイティブなフレームワーク
→ビルド時間は長くなるがサイズが小さくなり起動時間が短い
Istioの簡単な解説とかあって学びが多かった。詳細は資料に大量に書いてある。
分散トレーシングの技術選定・OSS 貢献とStackdriver Tracer での性能可視化・改善
- 分散トレーシング
どの処理に時間、呼び出しやお役関係、エラーが発生時の検知
システム処理のボトルネックを把握できる - 分散システムでなくてもトレーシングは有用
処理の親子関係、ログ集計の手間、可視化ツール - Zipkinを導入
Zipkinサーバーにデータを入れるだけで便利
→Cassandraを運用する必要がある+情報大量過ぎて受けきれなくなる+バージョン対応 - OpenCencusとOpenTracingという2大APIが登場
- Stackdriver Traceの活用
Spanはトレースする処理の単位
振り返るとSRE関連の話を中心に聞いてきた気がする。
ログの可視化やトレース、監視とかは外部サービスがいいよなーという再確認。