http://monkey.org/~marius/checklist.pdf
1 comment | 1 point | by WazanovaNews 1日前 edited
TwitterのMarius Eriksenは分散システムのエキスパートであり、モジュール化され、安全でかつ効率よく機能するサーバソフトの構築のノウハウは、「Your Server as a Function」という論文にまとめられています。
また、分散システム設計における留意点も、下記の内容のチェックリストというかたちで紹介してくれています。
1. 障害耐性
- もし依存先が障害を起こしたらどうなるか?その障害がゆっくりと起きたらどうか?
- システムをどのようにスムーズにデグレードさせることができるか?
- システムは想定以上の負荷にどう対処するようになっているか?
- 大きな障害が起きた時の最悪のケースはどうなるか?
- どれだけすばやく復旧できるか?
- 処理を遅らせることができる箇所はきちんと遅れて動作してくれるか?
- シムテムは可能な限りシンプルにできているか?
- システムは負荷をどのように分散できるようになっているか?
- どのような障害であれば影響を軽減できるか?どのような方法で?
- どのオペーレーションは再試行できるか?本当にそうなっているか?
**2.スケーラビリティ **
- システムはどのようにスケールしていくか?その際の最も重要なメトリックスは何か?
- どうやって複数のデータセンターにスケールさせるか?
- トラフィックはどのように変化するか?負荷のピークに耐えられるかどうかをどのように判断するか?
- どれくらいのクエリを処理できるか?処理するデータをクエリで換算できるか?
- システムはレプリケーションが可能か?
3. オペレーション能力
- 各機能をどのようにオン/オフの切り替えができるか?
- どうやってシステムをモニタリングし、異常を検知するか?
- そのアプリ特有のオペレーションが必要となっているか?
- デプロイの手順はどうなっているか?緊急時のデプロイはどうやるか?
- システムがどう成長して、キャパをどう増やしていくか?
- システムの設定手順はどうなっているか?必要あらば瞬時に設定変更できるか?
- システムは予想可能な振る舞いをしてくれているか?想定の難しい増え方をする負荷やレスポンス失敗の箇所はないか?
4. 効率性
- データを事前に計算できる仕組みになっているか?
- 作業工数がなるべく少なくなるように工夫されているか?
- 並行処理できる箇所はしているか?
- バッチ処理を活用しているか?
- 計測してパフォーマンスボトルネックなどを把握しているか?外部の影響がない独立したかたちで計測できるか?
- 並列処理できるところはあるか?
- 負荷テストは可能か?パフォーマンスの劣化をどう検知するか?