1

私はいくつかのクライアント/サーバー ソフトウェアを作成していますが、次の設計上の問題に直面しています。通常、私は VERIFY マクロを非常に寛大に使用します。ユーザーのマシンに何か問題がある場合、ソフトウェアが失敗し、エラーをログに記録して修正できるようにしたいと考えています。私はどんな種類のエラーも無視するのが好きではありませんでした。

しかし、私は今サーバーを書いています。サーバーが停止した場合、多くのクライアントがダウンするため、サーバーの停止はできるだけ少なくする必要があります。したがって、そうでなければ致命的な例外として扱ういくつかの条件を扱う方法がわかりません。

たとえば、ログインしていないユーザーからネットワーク パケットを受信したとします。これは起こるべきではありませんが、「不可能な」エラーが時々発生することを十分に経験しています。したがって、これらのケースで致命的なエラーが発生した場合、サーバーは最終的にクラッシュすることは間違いありません。一方、ログに記録してエラーを無視して続行することもできますが、この方法では一部のバグが検出されない可能性があります。

このような状況であなたはどうしますか?

4

1 に答える 1

3

エラーから回復できれば、明らかに致命的ではありませんでした。エラーをログに記録して実行を継続できる場合、失敗する利点はわかりません。最も重要なことは、エラーをログに記録したことです。回復して通常通りの運用を継続できるのであれば、それが最善の策です。

さらに、エラーレベルに応じてさまざまな緊急度で通知する通知システム (サーバー監視) を実装して、タイムクリティカルなものをできるだけ早く取得する必要があります。NagiosMuninなど、サーバー用の一般的なシステムがあります。彼らが何をしているのかを見て、彼らから何かを取り、それをシステムに実装/統合できるかどうかを確認する必要があります。

とにかく、クライアント インスタンスができる限りサンドボックス化されていることを確認する必要があります。クライアント スレッドがダウンしても、サーバー全体がダウンすることはありません (少なくとも理論上は)。

于 2009-01-05T19:33:54.050 に答える