今日、Google App Engine のシャード カウンターについて読みました。この記事では、データ ストア内のエンティティごとに 1 秒あたり約 5 回の更新が最大になると予想する必要があると述べています。しかし、このソリューションは、1 秒あたりに実行している更新の数を知る方法がない限り、「スケーリング」しないように思えます。たとえば、10 個のシャードを割り当てることができますが、1 秒あたり 50 回の更新で窒息し始めます。
では、更新の速さをどのように把握し、その数をシャードの数に戻すにはどうすればよいでしょうか?
私の推測では、カウンターと一緒に最近のアクティビティの記録を保持することができ、スパイクを検出した場合はシャードの数を増やすことができます. それは一般的にどのように行われますか?もしそうなら、サンプルコードでそれが行われていないのはなぜですか? コードで自動的に行うのではなく、ウェブサイトのアクティビティを監視し、トラフィックの増加に応じてシャード数を更新する方が一般的な方法ですか?
更新:破片が少なすぎたり窒息したりすると、実際にはどのような影響がありますか? Web サイトが応答しなくなったということですか、それともタイムアウトのためにカウンターの更新が失われる可能性がありますか?
余談ですが、この質問はシャーディングなしでカウンターを実装することについて述べていますが、回答の 1 つは、トラフィックが多い場合は memcache もシャーディングする必要があることを示唆しています。したがって、シャードの割り当てとチューニングの問題は重要なようです。