Read: The Amazon Builders' Library

読んだ記事:The Amazon Builders’ Library

re:Invent 2019にて公開された、ソフトウェアエンジニアリングのベストプラクティス集。 内容は主に分散Webサービスに関するもの。Amazon ECサイトやAWSのサービス構築で培った知見がベースになっているとのことで、分散システムの要点がよくまとまっていて参考になった。いくつか印象に残った記事についてまとめる。

Using Load shedding to avoid overload

Webサービスを題材に、load sheddingを用いたサーバー高負荷時のサービスのスループットを維持する戦略について解説している。 以下要点

load sheddingでは、最大コネクション数による制御と比較して、フレキシブルな制御が可能になるので、リクエストの処理内容によって応答時間が大きく異なるようなケースで有効性が高いように思う。 また、クライアントタイムアウトが減るのでリソース使用効率が向上することが見込める。 一方で、制御の複雑さは増すため、実装やテストのコストは高くなってしまう。 サービス立ち上げの初期の段階では、最大コネクション数等比較的簡易な仕組みを利用しておいて、トラフィックやサーバー数の増大に従って導入していくのがいいのではないかと考える。

Avoiding insurmountable queue backlogs

平常時FIFOなキューの捌き方をしているアプリケーションでも、クライアントからすると実はバックログがたまった際のリカバリはLIFOがよいというケースも考えられる。 平常時とリカバリ時のスケジューリングを変えるというのも一考の余地がありそう。

Workload isolation using shuffle-sharding

Shuffle shardingというのは初めて聞いたが、シンプルな割に過負荷時の可用性向上に効果が大きそうに思う。 どのレイヤで実装するものなのかが気になる。Route 53やELBあたりで実装できると嬉しそうだが。

Avoiding fallback in distributed systems

Implementing health checks

これまでWebサーバのヘルスチェックを実装していて、検知の範囲や異常の対処を場当たり的に考えていたことが多かったので、整理のために役立った。 ヘルスチェックを実装する上で一番の課題は、false positiveを防ぎ、誤判断による状況悪化を防ぐことで、考え始めるとなかなか設計がまとまらなかった。 典型的なパターンを理解して、手札を増やしておくのがよいと感じた。 以下要点 ヘルスチェックの範囲について、おおまかに4つに分類している。

また、ヘルスチェックエラーの対処方法についてもAmazonで多用される手法、ベストプラクティスの解説がある

今後も記事を追加する予定ということなので、更新を追っていきたいと思う。