あるふぁべっとがおおすぎる

ITネタとか勉強会とか色々

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関連の話を中心に聞いてきた気がする。

ログの可視化やトレース、監視とかは外部サービスがいいよなーという再確認。