問題タブ [reliability]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
120 参照

azure - Azure のグローバル タイムについてどのような仮定を立てることができますか?

突然の障害が発生した場合に備えて、Azure ロールでデータを再処理する必要があります。次のオプションを検討します。

処理するデータのブロックごとに、データベース テーブルの行があり、「処理ノードからの最後の ping の時間」を意味する列を追加できます。したがって、ノードが処理のためにデータブロックを取得すると、「処理中」状態とその時間が「現在の時間」に設定され、その時間を1分ごとに更新するのはノードの責任です。次に、定期的に一部のノードが「処理状態と ping 時間が 10 分を超えるすべてのブロック」を要求し、それらのブロックを放棄されたと見なし、何らかの形で再処理のためにキューに入れます。

1 つ、非常に深刻な懸念事項があります。上記のアプローチでは、ノードが多かれ少なかれ同じ時間を持っている必要があります。すべての Azure ノードが妥当な精度 (数秒など) で同じ時間を持っていることに依存できますか?

0 投票する
1 に答える
129 参照

windows - Azure ロール ホストを破棄して、クリーンアップせずに同じホストで開始することはできますか?

私の Azure ロールが Windows 一時フォルダーに大量の一時ファイルを作成し、それらを削除するのを忘れたとします。ある時点で、「一時ファイルを作成できません」というエラーが表示されます。これが発生すると、ロール コードが例外をスローしRoleEntryPoint.Run()、ロールが再起動されたとします。

ここでは、完全な Azure 対応コードについて話しているわけではありません。私の役割は、Azure と "ローカル ストレージ" については何もせず、単にSystem.IO.Path.GetTempPath()Azure に適していない場所にファイルを呼び出して作成するサード パーティのブラック ボックス コードを使用する可能性があります。

問題は、役割がまったく同じホストで開始され、一時フォルダーがサードパーティによってクリーンアップされていない場合、フォルダーがまだファイルでいっぱいであり、役割が機能しないことです。この回答によると、私の役割のためにローカルの変更が保持される可能性があります。これは、上記のシナリオでは大きな問題です。

作成された一時ファイルなどのローカルの変更は、ロールが再起動されたときにリセットされることが保証されていますか? 開始されたロールが適切にクリーンな状態であることを確認するにはどうすればよいですか?

0 投票する
1 に答える
167 参照

windows - ロールがクラッシュしたとき、または管理 API を介して再起動されたときに、Azure ロール ホストは実際に再起動されますか?

私の Azure ロールが何らかの形でシステム全体のリソースを使い果たしたとします。たとえば、多くのプロセスを生成し、それらすべてのプロセスがハングして、システム内のすべての仮想メモリを消費します。または、無数の Windows API イベント オブジェクトを作成し、それらを解放できず、そのようなオブジェクトを作成できなくなります。ファイルシステムを破棄する以外は何でも意味します。

ここで説明した変更は、通常の Windows マシンの再起動時に取り消されます。プロセスが終了し、仮想メモリが「リサイクル」され、イベントやその他の同様のオブジェクトが「リサイクル」されます。

しかし、懸念があります。ホストが実際には再起動されず、「再起動」または「停止」を押してから「開始」を押したときに、他のプロセスが実行された場合はどうなりますか?

役割を再起動したり、インスタンスを再起動したりすると、ホストは実際に再起動されますか?

0 投票する
1 に答える
874 参照

reliability - システムの故障率

Microsoftのインタビューで、私は次の質問をされました。

システムは、特定の時間内に10%の確率で故障することが保証されていますが、2時間後の故障率はどれくらいですか?百万時間後?

私は信頼性理論と故障率の経験があまりありませんが、この質問に関するご意見をいただければ幸いです。

0 投票する
2 に答える
5148 参照

.net - AzureロールでSQLAzureへの接続が突然失われた場合の対処方法を教えてください。

私のAzureロールは、データベースから処理するものを取得します。インスタンスを保持し、System.Data.SqlClient.SqlConnection定期的にSqlCommandインスタンスを作成して、SQLクエリを実行します。

たまに(通常は数日に1回)クエリを実行するとSqlException例外がトリガーされます

サービスでリクエストの処理中にエラーが発生しました。もう一度やり直してください。エラーコード40143。現在のコマンドで重大なエラーが発生しました。結果がある場合は、破棄する必要があります。

これはすでに何度も見てきましたが、コードがそれをキャッチしDispose()SqlConnectionインスタンスを呼び出してから、接続を再度開いてクエリを再試行します。後者は通常、別のSqlException例外が発生します

タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

これは、SQLAzureサーバーが何らかの理由で応答しないか利用できないように見えます。

現在、私のコードは後者の例外をキャッチしていません。それは外部RoleEntryPoint.Run()に伝播され、役割が再開されます。通常、再起動には約10分かかります。再起動が完了すると、問題は1日ほど解消されます。

役割を再開するのは好きではありません。しばらく時間がかかり、サービス機能が妨げられます。もっと賢いことをしたいのですが。

この問題に対処するための戦略は何でしょうか?クエリを数回、何回、どのような間隔で再試行する必要がありますか?私は何か他のことをすべきですか?いつあきらめて、役割を再開させますか?

0 投票する
1 に答える
1813 参照

java - メールサーバーがダウンしている場合、Apache Camel smtp コンポーネントがバス全体をハングアップさせる

非常に一般的なシナリオだと思います。Apache Camel を介して管理される請求書システムがあります。何か問題が発生した場合、管理者に電子メール アラートを送信したいと考えています。

Camelの例外処理について読んだ後、私はこれを思いつきました:(Spring XML内)

これは私のユースケースでは問題なく機能します。例外がスローされると、実際に定義されたアドレスに電子メールが送信されます。

ただし、まれなケースをテストするために、内部の電子メール サーバーを停止して何が起こるかを確認しました。Camel がメール送信を試行し、5 秒後に試行を停止すると予想しました (上記の smpt URL の connectionTimout オプションで設定)。

しかし実際には、Camel アプリケーション全体がハングします。これは絶対に受け入れられません。メール サーバーが 100% 稼働することを保証することはできません。

ここで何か不足していますか?メールアラートのアイデアを完全に削除する必要がありますか、それともメールサーバーがダウンしたときにハングしないようにするための別の特別なオプションが Camel に必要ですか?

答え

この線

する必要があります

0 投票する
1 に答える
328 参照

.net - SqlException.LineNumber を使用して、例外が接続に関連しているかどうかを識別できますか?

SQL Server への接続が一時的に失われたことに対処しようとしているTransient Fault Handling Frameworkコードを調べました。重要なポイントが 1 つあります。これは、SQL 関連の問題 (構文エラーなど) と、SQL に関連しない問題 (接続がないなど) がある場合の両方でスローされます。SqlException

もちろん、後者のクラスの問題からのみ回復を試みる必要があります。コードが不正なクエリを実行する場合は、何も再試行せずに、すぐに失敗する必要があります。

SqlError.Numberフレームワークは、ハードコーディングされた膨大な値のセットを調べて比較することにより、これらのクラスを区別しようとします。これは多くの知識であり、この戦略に基づいたコードは、SQL Server の内部構造が変更されたら、間違いなくメンテナンスが必要になります。

SqlException.LineNumber代わりに使えるのではないかと思いましたか?MSDNによると、行番号は1から始まり、行番号0は行番号が適用されないことを意味するため、問題がSQLに関連していないことを意味すると思います。私はしばらくこれを試しました - 接続の問題LineNumberは常にゼロです。

SqlException.LineNumber例外が SQL クエリの問題によるものなのか、それとも接続の問題によるものなのかを特定するための信頼できる優れた方法を使用していますか?

0 投票する
3 に答える
3262 参照

windows - Windows Azure には、サービス拒否攻撃に対してすぐに利用できるものはありますか?

Windows Azure でホストされる Web サービスを開発しています。時々、悪者が DDOS を試みることが予想されます。Windows Azure にサービス拒否攻撃に対する機能があるかどうかについて、Google で検索しましたが、新しく決定的なものは何も見つかりませんでした (これはかなりあいまいです)。

何か特別な措置が必要ですか?サービス拒否攻撃から保護するために、Windows Azure は何を提供していますか?

0 投票する
1 に答える
4748 参照

networking - C#での信頼性の高いUDP

udpを信頼できるものにする方法については、インターネット上にいくつかの記事があります。私はc#で1つを見つけることができませんでした。だから多分私は自分のアルゴリズムを実装することができます。

インターネットでの調査から、udpには2つの問題があると思います。


  1. すべてのデータが宛先に到達することを保証するものではありません。
  2. データは別の順序で宛先に到達する可能性があります
  3. 多分それを信頼できるようにするために私が見逃している3番目の問題があります

udpの信頼性を高めたい理由と、代わりにtcpを使用しない理由を知りたい場合は、この質問をご覧ください。私を信じてください、私は長い間tcpパンチホールをしようとしていました。

とにかく、これを可能にするc#で使用できるライブラリがすでにあるかもしれません。ライブラリを見つけることができたので、次のアルゴリズムについて考えていました。


"コンピューターAとコンピューターBがあり、コンピューターAがコンピューターBにファイルを送信していると想像してください。";

これが私が考えていたステップです:


1)コンピュータAが読み取り用にファイルを開き、5000バイトであるとしましょう。つまり、コンピュータAは5000バイトをコンピュータBに送信して、バイトが失われないようにし、正しい順序で送信する必要があることを意味します。


2)コンピュータAはファイルの最初の500バイトを取得し、それらのバイトのハッシュを取得します。したがって、コンピュータAには、これらの500バイトのハッシュとバイトの2つのハッシュがあります。(ハッシュは、データが正しい順序で受信されたことを確認するためのmd5などの効率的なアルゴリズムになります。つまり、md5(1,2,3)!= md5(2,1,3))


3)最初の500バイトのハッシュをイメージングすると、kj82lkdi930fi1になります。


4)コンピュータBはハッシュとバイトをリッスンする必要があります。


5)コンピューターAはコンピューターBにハッシュを送信し、500バイトも送信します。送信するとすぐに、応答を待ち始めます。


6)コンピュータBはハッシュとバイトを受信するはずです。コンピュータbは、受信したバイトに対して同じアルゴリズムmd5を実行します。その結果が受信したハッシュと等しい場合は、{1,1,1,1,1,1}でAに応答します。それ以外の場合は、{2,2,2,2,2,2,2}で応答します。


6.5)コンピュータBが正しい順序でデータを取得したため、{1,1,1,1,1、}と応答し、ハッシュコードもメモリまたは配列に保存するとします。


7)コンピュータAは、次の500バイトを送信するために応答を待機する必要があります。{1,1,1}を受け取ったとしましょう。1を受信したため、続行して次の500バイトをそれらの500バイトの新しいハッシュコードで送信できることがわかります。


8)コンピュータAは、ハッシュコードとともに次の500バイトを送信します。


9)コンピューターBがデータを受信しなかったため、Aに応答しないとしましょう。コンピューターBは引き続きバイトとハッシュを待機します。


8)コンピュータAが妥当な時間1,1,1,1,1、または2,2,2,2,2を受信して​​いないため、Aは同じバイトを送信し、1秒間再度ハッシュします。時間。


9)コンピュータBがハッシュとバイトを受信したが、バイトが別の順序で受信されたと仮定します。コンピューターBがそれらのバイトのハッシュを計算すると、そのハッシュは受信したハッシュと一致しません。その結果、{2,2,2,2,2,2}で返信されます


10)コンピュータAが2,2,2,2,2,2を受信すると、同じバイトとハッシュを送信します。何らかの理由で2,2,2,2,2を受信しなかった場合は、一定期間後に同じバイトとハッシュを送信します。コンピューターAが2,2,2,2,2を受信したふりをしましょう


11)コンピュータAは同じバイトとハッシュを3回送信します。


12)コンピュータBは正しい順序でハッシュとバイトを受信します。その結果、1,1,1,1,1,1と応答し、その前のハッシュをメモリに保存します。(ステップ6.5を思い出してください)


13)コンピュータAがBから1,1,1,1応答を受信しなかったふりをします。その後、同じバイトを4回送信します。


14)コンピューターBはハッシュをチェックし、それが受け入れられた最後のハッシュと等しい場合、それらのバイトをファイルに書き込まずに1,1,1,1を再度応答します。


15)アルゴリズムは、ファイルが転送されるまでそのように続行されます。


つまり、転送が完了したときにコンピューターBに通知するなど、このアルゴリズムに追加する必要のあるものが他にもあることは明らかです。たぶんもっとエラーをチェックしています。コンピュータAが長時間切断された場合はどうなりますか。しかし、メインプロトコルは私が説明したもののようなものになります。

では、このアルゴリズムの実装を開始する必要があると思いますか?毎回バイトを増やして送信する必要があります。500ではなく1000を送信するという意味ですか?インターネット上にはいくつかのテクニックについて説明している記事がたくさんありますが、必要な言語の実用的な例を示している記事はほとんどありません。この場合、c#でこれが必要です。