KanJava 10th Anniversary Party 参加してきました #kanjava #mixleap #mixleapなう
- Mix Leapについて
- 関ジャバ10周年について
- モデリングのきほん
- JVMのJITコンパイラにダイブする
- Kubernetesを導入して1年間本番運用した話
- DIコンテナ入門(裏面)
- ドキッ!失敗だらけのシステム開発!!
- DAPRを動かしてみた話
- togetter & 他の感想ブログ
Mix Leapについて
https://yahoo-osaka.connpass.com/
ヤフー大阪オフィスで、毎週勉強会を開催してるコミュニティ。
関西圏のクリエイター(エンジニア・デザイナー)の成長を目的にしたるのでジャンルは幅広そう。
https://yahoo-osaka.connpass.com/
毎週開催してるのはすごいな。
関ジャバ10周年について
阪田 浩一(じゅくちょー) @jyukutyo
まじめなcero_tさんからの返信コメントとkiy0takaさんの3人から始まった。
その二人は東京、名古屋へと関西を離れてしまったが、他のメンバーも加わり
Javaとそれに関係する勉強会を10年続けてきた。
何はともあれ、10周年おめでとうございます!!!
モデリングのきほん
いろふ @irof
資料
自分の理解を独自モデリングしてみた。
感想
タイトルとから、勝手にドメインモデルとかクラス図とかそういう話が出てくるのだと想像してた。
モデリングとはなんぞやというメタなモデリングだった。モデリングをそういうふうに考えたことがなくて
これ聞けてよかった。こういうのを視座が高くなったというのだろうか。
JVMのJITコンパイラにダイブする
阪田 浩一(じゅくちょー) @jyukutyo
資料
JITコンパイル
- JVMでのJITコンパラの仕組み。地獄の13階層の1階層目ぐらいでみんな楽しめるよ!
- 一番最初の処理はインタプリタで実行する
- アプリケーション実行中は、プロファイルで、実行ルート、実行状態にあわせた効率の良い機械語を生成し、コードキャッシュする
- JITコンパイル自体もリソースを消費するので、頻繁に使う(HotSpot)コードだけを機械語にする
- コンパイル時間と速いコードのトレードオフになる
- Java SE 8からTierd Complicationがはいったので、今は「-server」、「-client」の指定は不要で、JVMがC1とC2の両方を自動的に使い分ける
- プロファイリング自体にもオーバーヘッドがある。
- IR:コードをデータ構造で表現できる
- 最適化、脱最適化
オプション
- JITの最適化レベルを見るには-、XX:PrintCompilaton
- JITが生成するアセンブリコードを見るには、-XX:+PrintAssembly -XX:+UnlockDiagnosticVMOptions
ツール
- HSDIS(HotSpot Disassembler):-XX:+PrintAssemblyでアセンブリを出力するのに必要
- JITWatch:JavaのソースとJavaのバイトコードとアセンブリを見やすくする
- IdealGraphVisualizer:IRグラフを見られる。赤が処理の流れ、青がデータの流れ。
みなさんがやること
- javavpを実行したことがない人はjavap
- HSDISをビルドして、JITWatchで見ること
Q&A
-XX:+PrintAssembly 付けてコンパイル結果の機械語を見るために必要な HSDIS の作り方はここ。 #kanjava #mixleaphttps://t.co/BFFVOzJrEP
— YujiSoftware.java (@YujiSoftware) 2019年11月30日
- Q.コードキャッシュ溢れを起こすと性能が著しく劣化するとあったが事例はあるか?
A.Cybozuのキャッシュ溢れの例がある
https://blog.cybozu.io/entry/2016/04/13/080000はい!コードキャッシュ関連の事例として挙げた、サイボウズさんのブログエントリはこちらです! #kanjava https://t.co/pPkQskKka2
— Koichi Sakata (じゅくちょー) (@jyukutyo) 2019年11月30日- A.コンパイル時間がネックというよりは、コードキャッシュを埋めてしまうので外れているので敬遠されているのではないかと。 拡大するオプションもある。 https://twitter.com/jyukutyo/status/1200663095951015936:
感想
明日から、潜れ!と言われて、ダイビングスクールに来てみたら、酸素ボンベという便利なものがあると教えられ、これなら生き残れるかも!?と救いがすこし見えた気分。
気分だけなので、実際には溺れるんだろうけれども。
もし13階層目をやるなら低レイヤーな集まりの カーネル/VM探検隊 だろうか。
Kubernetesを導入して1年間本番運用した話
kiy0taka @kiy0taka
資料
メモ
送信元IPがLBになってしまう原因は?X-Fowarded-Forを付け忘れている?どこで?
- tcpdumpでネットワークが調べられるとインフラエンジニアっぽい、インフラエンジニアとしても一人前になった
k8s完全に理解した
山ごもり制度
- 年1で9連休とらないとならない。休み中は社内人へ連絡もも社内からも連絡をとってはならない
- 属人製をとりのぞくため
山ごもり制度をとった瞬間、大規模障害
- クラスタがいきなり落ちた
- システムからのアラートなので、人からの連絡ではないのでギリセーフ
新しいクラスタを作って全部移動
- 原因不明
- 避難訓練的なことをしてなかった。バックアップはしっかりとってあった。
新たな障害:帰ってこないノード@朝の5時
→なんやかんやで復旧k8sやめる?
- 実績あるIaaSなら起きなかったかも
- k8sで構築したサービスを理解しているメンバーがいない
でも、やめない 『「便利」も大事。「面白い」も大事。でも、どちらかなら必ず「面白い」を選ぶ。』という会社だから
Google Cloud Shell(無料)が便利
Q&A
- Q.基盤のアップデートをどうしている?
A.月1回か2ヶ月に1回アップデートしてる
Q.属人化の解決は?
A.事業部から会社になったが、人は増えてない。 人を増やすしかないので採用がんばってます。
Q.負荷対策は?
A.真ん中のPod対応で、Kubernetesの標準のでAutoScaleの設定にしている。
アップデートするときに、新たなコンテナが立ち上がってるときぐらいQ.スケールしてもログは見れる?
- A.ファイルサーバにログを書いている
感想
サウナの話から始まったから、サウナー向けのサービスをKubernetesで運用したのかと思ったけど違った。
まじめな業務の話だった。
詳細なところを抑えてるのが一人で、Pixel+携帯キーボードでいつでもどこでも障害対応は嫌だな。
tcpdumpでとったキャプチャは、Wireshark か、
もし、ターミナルしか使えないという制約があるなら、Termshark 使うと幸せになれると思う。
『「便利」も大事。「面白い」も大事。でも、どちらかなら必ず「面白い」を選ぶ。』っていいですね。
DIコンテナ入門(裏面)
うらがみ @backpaper0
本人の写真はNG
資料
https://backpaper0.github.io/ghosts/bytecode-enhance/#1
クラスファイルの構造
- constant_pool 呼び出すクラス名、呼び出すメソッド名、文字列リテラルなどの配列
- constant_poolの配列の添字でメソッドを呼び出す
javapでバイトコード
- aload:局所変数から参照値を取り出してスタックに積む
- aload_0:thisをスタックに積む
- clacの例
- iload_1:1つ目のintのローカル変数をスタックに積む
- iload_2:2つ目のintのローカル変数をスタックに積む
- iadd:スタックから取りだした1番目の値に2番目の値を加え、スタックに積む。
- iretrun:スタックのint値を戻り値にする
- こう言われると足し算してるのがわかりますよね
バイトコードをエンハンスする方法
-すでにあるバイトコードを改変するのではなくサブクラスを書き出す方式 - DIコンテナで採用が多い - Instrumentation APIを使用してバイトコードを改変する - JMockitで採用 - https://docs.oracle.com/javase/jp/8/docs/api/java/lang/instrument/Instrumentation.html - 動的にバイトコードを弄るので「黒魔術」
スコープとプロキシ
Proxyをインスタンス化する場合、コンスタラクタには何を渡せば良いのだろうか?
Q&A
- Q.どうやってデシリアライズをしてるかを突き止めたか?
A.知識と観察と発想。 デシリアライズではコンストラクタは呼ばれないという「知識」と
デバッガーでブレイクポイントで止まらないという「観察」と
デシリアライズの仕組みを使ってるかもなという「発想」。- A.デシリアライズしてるわけではなくて、デシリアライズのインスタンス化する処理を使用している。
感想
裏面(りめん)うらがみさんの真骨頂?、黒魔術の解説。
デシリアアライズしたときにコンストラクタ呼ばれないなんてどういう契機に知るんだろう。
Q&Aの回答で、「知識と観察と発想」とさらりと決める。カッコいい。
ドキッ!失敗だらけのシステム開発!!
こざけ https://twitter.com/s_kozake:title=@s_kozake
発表資料は、盛っている持っている可能性あり
どんなシステムを開発してるか
入力チェックの役割
データの整合性
- ゴミを入れるとゴミが出てくる
-
- 操作ガイドを兼ねる
- 適切なエラーメッセージで操作を導く
画面のレンダリングが遅い
IE11で遅い
- CSSの属性背レクターを使うと遅い!
- これを書くと一気に遅くなる、これを書かないと速い。
- https://medium.com/@aantipov/ie11-performance-bottleneck-de304569361d
タブレットで遅い
loupe
Javascriptのイベントとかコールスタックを見ることができる
締め
challenge! challenge! #kanjava
— Koichi Sakata (じゅくちょー) (@jyukutyo) 2019年11月30日
🙆♂️:challenge
— EOA (@fukamiAO) 2019年11月30日
🙅♂️:charenge#kanjava #mixleap
感想
失敗がテーマの発表で、最後の締めのスライドで失敗するというすごいオチ。
笑かしてもらった。
仕込みではなく天然らしい。愛されるキャラだわ。職場では知らんけど。
DAPRを動かしてみた話
せろ @cero_t
資料
- デモアプリケーション https://github.com/cero-t/dapr-trial
はい、非公開ですー。そのうち他の場所でも似た内容で登壇して、そっちを公開しようと思いますー。
— 谷本 心 / CERO-METAL (@cero_t) 2019年12月1日
dapr
- dapr:ダッパー
- フレームワーク疲れ
- サイドカーなのかビルディングブロックなのか
- ステート管理
- Pub/Subの非同期
- 分散トレーシング
- Zipkin
- x-correlation-id
- アプリとインフラが充分に分離されてたら統制とらなくていい
- ジョークがクール
- 他の登壇者「すべった?」cero_t「滑ってないよ」
感想
daprの機能は盛りだくさん。 サイドカー?ビルディングブロック?まずはそこからの状態なので、daprの売りが全然つかめていない。 スベリ芸は初めて見た。こういう雰囲気なのね。
全体の感想
第1回プログラミングGroovy勉強会(大阪) のまとめ、第1回「Play framework勉強会」IN 関西で大阪の勉強会に参加したことはあるけど、関ジャバは初めて。
わざわざ静岡から行ったかいがあった。(嘘です。前日に神戸に用事があったので参加できた。)
一番遠くからの参加かなと思ったけど、どうやら違ったようだ。
@YujiSoftware よし、大阪に着いたどれ、関東の技術者の実力を大阪勢に思い知らせてやるわ〜ww #kanjava
関ジャバの人って、技術的な「面白さ」と笑いの「面白さ」と両方を詰め込んで発表している印象。
なので、非常に面白かったし、参加できてよかった。
終わったら、時間的に帰らないとならないのが残念だった。