導入
Glaal VMパーフェクト入門
Glaal VMとは
ユニバーサルVM
Glaal VMとはOracle Labsが開発中である、あらゆる言語の実行環境となれる夢の環境(になる予定)
例)Javaとpythonを同じ実行環境で実行可能
demo
JavaScriptをGlaal VMで実行してみる
oracle cloudにて実行
/binの中に多数の言語の実行コマンドがある
メリット
パフォーマンスを劣化させることなく、言語間の相互呼び出しができる
ビジョン
言語間の抽象化をする
支援ツール
-chrome Devtools
debugしてくれる
--inspect(?)オプションをつけるとURLを出力し、アクセスするとデバッグツールが起動
-Graal VisualVM
導入事例
ゴールドマンサックスの事例
独自に開発した言語をtruffleベースに移行
増え続けるコードに対して、保守コストが増加
導入により、言語の相互利用等が可能になり、コストを抑えられた
究極目標
オレオレ言語を実行できる
ネイティブイメージ
ネイティブイメージとは
なんの関連が、、、?
oracle databaseが関連してくる
oracle databaseではユーザー定義関数をJavaで実装できる
しかし、oracle database内でJDK/JREをのもと実行しなくちゃいけない
そこで、VMをdatabase内でもつ
しかし、database内でJDK等を持つと、databaseの起動時間が初期化等で増える
そこで、ネイティブイメージをdatabaseで持つことにより、初期化時間を削減
ネイティブイメージのメリット
起動時間が短い
メモリ使用量がすくない
IOS上で実行できる
Lamda等の起動してすぐ終了もの
クラウド実行するものはメモリ削減により、コスト低下
demo
既存のJVMでの起動(java *.jar)
およそ起動に1秒
ネイティブイメージ
約0.1秒
チューニングで使えるところ
初期化に時間を要するクラスがある場合は、ビルド時に初期化するオプションを使用すれば、時間を削減できる
注意
exprimental
まだproductionでは使用しちゃいけない
目標
AOTでもJITと同様のパフォーマンス(ピーク時も)を出す
→JITいらなくなるんでは?
まとめ
Graal VMの二つのモード
・JITモード
・AOTモード
質問
言語間の変換をするとき、型の変換をどうするか。
→ドキュメントなし。分かりません、、、
とにかくドキュメントが少なく、手探りの状況
Getting Started IOT
yamamoto yusukeさん
Javaと物理世界の橋渡し
やりたいこと
既存のロボットに自由な動きをさせる
rego mind storm
demo
チェスとぼっとをJavaで操作
ラズパイの特徴
めっちゃ電力くう
高度なOSのため、容易に電源を落とせない
→そのため、ラズパイ+Javaは容易ではない
Arduinoをせんたく
電池でも何日/何か月と持つ電力消費
協力なライブラリ
1.回路をつくる
2.プログラミング
Ardiuno languageを使用(専用のIDE)
3.コンパイル→転送
4.実行
転送が終わったら勝手に実行
demo
指定した動きでLEDやモーターを動かせる
ここでようやくJava
firmata4j(mavenで提供)を使用する
Azure Spring Cloud
寺田さん
監視
監視は何から考える?
ツール?
アラート?
→監視対象から考える
監視フロー
監視:今何が起きているか
アラート:今と近い将来に問題がないか
解決:過去に何がおきたか
発見:ビジネス上役立つもの
例)スピードメータ
これは時系列ごとに表示されておらず、今の速度しか表示されていない
→今しか必要ないから
100kmを超えると音が鳴る
→みんな無視するし、その音で眠気を誘ってしまう
→柔軟性のないアラートは無視される
ドライブレコーダー
→トラブルシューティングのための存在
分析
→事故の傾向を探ることで、事故を起こす人の傾向を発見することができる
二つの取り方
サンプリングベース
一定時間ごとにメトリクス収集する
イベントドリブン
GCなど、イベントの発生を検知して、メトリクス収集する
メトリクス収集
監視対象の選定
なんでもかんでも監視すればよいというわけではない
最も重要なのを意識する(ユーザーへのレスポンス速度やリクエスト数)
そして、リクエスト数も上限だけでなく、下限も見る(そもそも障害でアクセスできないケースもあるため)
マイクロサービス化による監視影響
モノリシックなサービスでは、エラーが発生したスレッドナンバーでgrepすれば調査できる
しかし、マイクロサービスではこれでは追えない
→そこで、spring cloud sleuth/Elastic APMなど
これらは、リクエストごとに、各マイクロサービスで共通のIDを振ってくれる
調査時はこのIDを元に調査を実施する
アラート
予測できる問題しかアラートは上げられない
→でも求められるのは未知の問題
→ここで逆アプローチ
既知のログをフィルタリングで消していく
残ったログは未知のものであり、これは未知の問題につながるもの
KPI
事象発生から解決までの各種数値も収集する
アラート発生までの時間
メンバーが検知するまでの時間