PROBLEM

  • Elixirをさわりはじめてしばらく経つけどふかく理解した気になれない
  • Phoenixやほかのフレームワークに頼られないケースが出てきたとき自由な発想ができるようになっておきたい
  • 巷でいわれているSLA 99.9999999% などの実際がどうなのか腹落ちしてない

-

SOLUTION

というわけで、LYSE本を読むことにした。Elixirに関係ありそうな箇所を選定している。

12.2.1. 並列性の概念

  • Erlangの開発の背景
    • 大抵の人は並行ソフトウェアを書くことにうんざりしてる
      • 並行の解決策のほとんどがロックやミューテックスと呼ばれる小さな理論を扱うことに終始する
    • 通信業界では並行性・並列性をめざす文化があった
      • PLEX
      • AXE
  • 満たすべき要求
    • スケーラビリティ
      • リニアスケールが可能
      • 実装方針
        • 小さなプロセス
        • プロセスに共有メモリの使用を禁じる
    • フォールトレランス (交換機上の何千ものユーザをサポートすること)
      • クラッシュが可能
      • クラッシュ後リスタートが可能
      • 実装方針
        • 分散
        • 非同期メッセージングパッシング
  • 実装
    • 並列・並行に最適化されたVM
      • コア1つに対してスケジューラとして1つのスケジューラを起動
      • 実行キューにあるタスクが多すぎた場合、他スレッドのスケジューラに移される
      • 過負荷なプロセスに対して送れるメッセージ量を制御

12.3. すべてが線形にスケールするわけではない

  • アムダールの法則
    • 50%並行にしたコードは2倍ほど速くなる
    • 95%並行にしたコードは20倍ほど速くなる

-

以上 :droplet: