Skip to content

Instantly share code, notes, and snippets.

@hondaYoshitaka
Last active April 23, 2020 02:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hondaYoshitaka/3eccf0686e9988e70c3a07cc9071809c to your computer and use it in GitHub Desktop.
Save hondaYoshitaka/3eccf0686e9988e70c3a07cc9071809c to your computer and use it in GitHub Desktop.
JJUG CCC 2019 Spring

Project Loom - 限定継続と軽量スレッド

Overview

  • 櫻庭 祐一 @skrb

資料

Memo

  • 余談
    • 「今回の発表、対して役に立たないヨ」
    • 「Project Loomでるまでに3年はかかるヨ」
    • この発表は「Safe Harbor Statement」
      • 信じないでね!って意味ですw
  • 皆さんは意味がわかりますか?
    • Thread
    • Fiber
      • 繊維
    • Loom
      • 織機
  • 並列/並行処理は難しい
    • モニタ,イミュータブル, アトミック, 競合状態, 再入...
    • スレッドセーフでもスケールしない (安全である≠スケールしない)
  • なぜスケールしないのか
    • CPUが遊んでいる
    • 同時に複数からアクセスできないもの
      • ロック ファイル 通信 DB ...
    • 待ち状態になったら他のものに譲る
      • コンテキストスイッチのような
  • コンテキストスイッチ
    • take/put的な処理もwait/notifyAllを使えば動くよね
    • takeが wait() で譲れば良い/putも同様に
      • ただ...
  • wait/notifyAllの問題点
    • OSによる Context Switch
      • スイッチがいつ行われるか不明
      • スレッドの状態をすべて保存
    • Work-ing Memory / Head...
      • Meta Space (旧パーマネント領域)
    • JVM Stack Area
      • N個スレッドがあったら N個スタックができる
      • Operand Stack / Local Variable、メソッドチェーン分はいるよね
        • メモリ領域めっちゃ喰うよね
    • まとめ
      • JVMスタック
      • オペランドスタック
      • ローカル変数
      • ...
  • OSによらず JVMが管理するスレッドが必要
    • Fiber
  • Fiber = Continuation + Scheduling(EcecutorService, Default: ForkJoinPool)
  • java.lang.Continuation
    • タスク処理の中断/再開
      • run()
      • yeild() ... だれかにゆずる的な意味で
      • Runnable
    • 普通の人はダイレクトにつかわないよねwww
      • 普通の人は Fiber のほう使うと思う
  • java.lang.Fiber
    • JVMが管理する軽量スレッド
    • Threadと同じように使う
      • 多少は制限があるが
    • タスク
      • Runnable
      • Callable
    • schedule()
    • park()
    • unpark()
  • park/unpark
    • 内部で Continuation.yield 呼んでいる
    • Package Privateなので普通の人は使えないw
  • park/unparkを行うAPI
    • Thread sleep,join
    • java.util.concurrent
    • I/O
      • Networking
      • Pipe
      • まだ未対応だが... File
  • 現状の制限
    • ネイティブスタックからは yeild できない
    • モニタからは yeild できない
      • これが結構痛い
  • どうすればいい?
    • MonoContainerをFiber対応に
      • wait/notifyAllを ReentrantLock に変更すればよい
    • 安易に synchronized はやめましょうねw
  • Thread Pool(ExecutorService) vs Fiber
    • (コード略)
      • Oracle Break New Groundで公開予定?
    • だいたい2倍のスループットがでている
  • FiberがThreadの代わりになる?
    • かなり置き換えられる!
      • 問題点は先述
    • 現状の問題
      • ThreadLocal
      • Thread.currentThread
        • 現状 shadowThread で対応
        • 今後はわからない...
  • Current Status
    • サポートしているOS
      • Linux x64
      • Mac OSX
        • Windowsは...笑
  • Conculusion
    • Fiber: JVMが管理する軽量スレッド
    • Continuation:限定継続を実現
    • いつリリースされるか...???

ホットペッパービューティにおけるモバイルアプリ向けAPIの BFF/Backend分割

Overview

  • 株式会社リクルートライフスタイル
    • Nawate Ippei @sakuna63

資料

  • ?

Memo

BFF

  • BFF/Backend分割
    • API 100本中25くらいローンチ済み
  • 保守運用の経験にもどづいて話せることはほとんどないですw
    • 発表時は運用5日目
  • SOE/SOR観点での分離

分割の目的

  • API開発のスピードがアプリ改善スピードのボトルネックになっていたため
    • Mobileアプリのサイクル1ヶ月に対してAPIは3ヶ月

分割の方針

  • 分担させるか
    • BFF = アプリチームで意思決定が完結することを目指す
      • アプリ特有
      • 表示要件
    • Backend
      • データアクセス
  • 通信
    • REST API

1400万ユーザーのWebサービスを15年運用して考える、Javaである理由

Overview

  • フリュー株式会社

資料

Memo

マイクロサービス:4つの分割アプローチの比較

Overview

  • 増田 亨

資料

Memo

  • 技術的には揃ってきたけど {クラウド, コンテナ, 設計スキル}
    • 必要条件だけど、十分条件ではないよね
  • まず増田さんの方針としてはレイトマジョリティ(十分に枯れた技術)
  • "部分適用" 保守的なアプローチですすめめている
  • can: どこまで小さくできる?
    • 理論: Java APIのメソッド単位
      • RMI(Remote Method Invoke)/コルバ とか昔あったがうまく行かなかった...
    • 限界: 習熟度
  • should: どこまで小さくするか?
    • 論理的なモジュール
      • ビジネスの成長にあわせて積極的にやるべきだ
    • 物理的な~
      • 慎重に
  • 勘違い/真実
  • 本題: MS 4つの分割のアプローチ
    • 4者択一ではなく、組み合わせとなるはずだ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment