PROBLEM

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

-

SOLUTION

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

今回はプロセスプール管理アプリケーションをOTPを使ってつくる。

要件

  • サーバを最大でN個の並列接続に制限
  • アプリケーションによって開かれるファイルの数を制限
  • サブシステムに優先順位を与える
  • 不定期なアクセス負荷に対してキューにタスクを貯めることで、可用性を高める

実装

機能

  • アプリケーション
    • 起動
    • 停止
  • 特定のプロセスプール
    • 起動
    • 停止
  • プール内のタスク
    • プールに余裕がある場合
      • 実行
      • タスクが実行されたら呼び出し元は解放
      • できる限りタスクを非同期に実行
    • プールに余裕がない場合
      • 起動できないと告げる
      • タスクがキューの中にある間は呼び出し元のプロセスを待たせておく
      • タスクをキューに貯める

状態

  • 静的な状態
    • 下記から容易に取得
      • 設定ファイル
      • 他のプロセス
      • アプリケーションを再起動しているスーパーバイザ
  • 動的な状態
    • 再計算できるデータから取得
    • 状態の種類
      • 初期からの状態
      • 現在までの状態
      • 変換すべき状態
  • 再計算できない動的なデータ
    • 下記から取得
      • ユーザの入力
      • 生のデータ
      • 逐次的な外部イベント
      • など
    • 保存方法
      • データベースに登録

-

以上 :droplet: