問題タブ [clock-synchronization]
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.
javascript - クライアント側の JavaScript クロックをサーバーの日付と同期させる最良の方法
HTMLページに固定タイムゾーン(現在の日付に応じてMSKまたはMSD)でデジタル時計(分精度)を表示するタスクがあります。クライアントのシステム クロックに依存したくないので、サーバーとの同期が必要です。HTTP サーバーは各応答で Date ヘッダーを送信するため、AJAX GET または HEAD 要求をサイトの任意の URL に送信してサーバーの日付を取得し、クライアントの日付との差を計算し、setTimeout() でクロックを更新するときにそれを使用できます。他にも問題が残っています: 昼光設定のタイムゾーンの切り替え、非常に遅い接続の原因となる遅延。
このタスクの最も簡単な方法はありますか? サーバー側のプログラミングなしで解決したいと思います。
silverlight - WCFメッセージから時間情報を削除するには?
Silverlight クライアントで使用されている安全なサービスの maxclockskew を設定しようとしていました。
私が試したことは、関連記事にまとめられてい ます HTTPS Silverlight アプリケーションコンテキストで WCF maxClockSkew 問題を修正する方法?
私もそれを行う方法が見つからなかったので、timeinfos も削除して、クロック スキューの検証がスキップされるようにします。それはどのように行われますか?InclueTimestamp を false に設定するだけでは機能しませんでした。
javascript - サーバーとシステムの時間を使用してWebページをクロックしますか?
Webページに時計を追加する必要があります。時計はサーバーと同期する必要がありますが、ページは複数のPCで24時間年中無休で開かれるため、サーバーを常にチェックする必要はありません。サーバーから時刻を取得し、システムクロックを使用して更新を維持し、15分ごとにサーバーをチェックして同期を維持する方法はありますか?
cloud - 多くのノードにわたってクラウド (AWS、heroku など) でクロック同期を確立するにはどうすればよいですか?
クラウド (AWS、Heroku、またはセルフマネージド VMS) で大規模なノード クラスターを実行したいと考えています。そのクロックは、事前に定義された許容範囲を念頭に置いて同期する必要があります。おそらく200ミリ秒の許容範囲を探しています。つまり、250 個のノードがある場合、250 個のノード間の最大クロック差が 200 ミリ秒を超えることはありません。世界に対する実際の日付/時刻はあまり気にしません。ソリューションはフォールト トレラントでなければならず、どのシステムのクロックの精度にも依存する必要はありません。実際、どのクロックもそれほど正確ではない可能性があります。
要件は十分に強く、何らかの理由で特定のノードのクロック同期が信頼できないと判断された場合、クロックの非同期化のためにクラスターからノードを削除することをお勧めします。そのため、障害が疑われる場合は、そのノードのある種の制御されたシャットダウンを実行できるようにしたいと考えています。
NTP のようなものを使いたいのですが、NTP の既知の問題 twikiによると:
NTP は、仮想マシン内で実行するようには設計されていません。これには、高精度で処理されるクロック割り込みへの応答時間を備えた、高分解能のシステム クロックが必要です。これらの要件を満たすことができる既知の仮想マシンはありません。
そして、同じ twiki が状況に対処するためのさまざまな方法 (ホスト OS で ntp を実行するなど) を説明していますが、AWS または horoku を使用して環境を十分に変更して準拠することができるとは思いません。回避策。
私が VM で実行していなかったとしても、ntp を実行してきた長年の経験を持つ信頼できる運用管理者は、時々ローカル クロックのずれが原因で、ntp が同期をドロップする可能性があり、ドロップする (または単純に時刻を間違える) ことを教えてくれます。頻繁に発生するわけではありませんが、実際に発生します。マシンを増やすと、これが発生する可能性が高くなります。私の知る限り、自分がどれだけ離れているかを検出するには、ntpd を停止し、クエリ モード コマンドを実行して、再度起動する必要があり、応答を得るまでに長い時間がかかる場合があります。
要約すると、主な目標は次のとおりであるクロック同期が必要です。
- 運用制御が制限されている VM (つまり、「クラウド サービス プロバイダー」) で適切に実行されます。
- すべての参加者間で約 200 ミリ秒のクラスター内の時間許容誤差
- 不良ノードを検出し、積極的に対応する機能
- 耐障害性 (単一障害点なし)
- スケーラブル (ノードを追加しても倒壊することはありません。n^2 は絶対に避けてください)
- 何百ものノードをサポートできます
- どのノードも、他のどのノードよりも優れた時間の概念を持っていると見なされるべきではありません
- 一斉にドリフトする限り、クラスター全体が (合理的な範囲内で) ドリフトしても問題ありません。
説明からすると、ここではBerkeley Algorithmが正しい選択のように思えますが、それは既に実装されていますか?
あると便利:
- 最小限の構成 (参加するノードの自動登録) -- 新しいノードを起動するために重要
- クロック同期に参加しているノードと相対時間オフセットをレポートする HTML ダッシュボードまたは (REST?) API
- きれいなグラフ?
javascript - Web ブラウザから JavaScript でサーバー時間を取得する最速の方法は何ですか?
実際、クライアント側の時間をサーバー時間と同期させたいのですが、このソリューションは本当に優れていますが、他にもっと速いアイデアはありますか? 言い換えれば、Web ブラウザーから JavaScript でサーバー時間を取得するより高速な方法を見つけることができるでしょうか?
vhdl - VHDL で 2 クロックの FIFO
vhdl の割り当てに問題があります。500MHz のバスと 30MHz の別のバスの間に FIFO バッファを作成する必要があります。
私は基本的なFIFOバッファを設計しました
入力: Data_in、Write_EN、CLK_500、Read_EN、CLK_30、FlushFIFO。
出力: Data_out、FULL、EMPTY。
このバッファは、2D 配列を使用して設計されました。
問題は次のとおりです。どのようにプロセスを記述し、同期のためにそれらの間のポインターを維持する必要がありますか? 私が試した方法では、コードが合成されません (ERROR:XST:827 Signal ptr cannot be synthesized)
何か案は?
感謝とよろしく
google-app-engine - サーバー クロックの同期がない場合の AppEngine プッシュ キューのタスク実行 ETA
AppEngine プッシュ キューでは、タスクがオプションで追加された場合、将来の実行のためにタスクをスケジュールTaskOptions.etaMillis(...)
できます。long
このメソッドは、によって返されるように、絶対ミリ秒でタスクを実行する時間を指定するパラメーターを想定していますSystem.currentTimeMillis()
。
AppEngine がサーバー クロックの同期について保証しないことを考えると、クロックは HOURS 単位でずれることがあります!!! ( 「Google I/O 2010 - Google App Engine を使用したデータ パイプライン」の 0:36:07 を参照)、これはどのように信頼できるのでしょうか?
次の例を考えてみましょう。
- http リクエストが着信し、クロックがたまたま 30 分進んでいるインスタンスにルーティングされます
- リクエスト処理中、一部のバッチ処理をバックグラウンド タスクに任せたい
- 約 10 秒以内に結果をユーザーに報告できるようにしたいと考えています。
- そのため、次の ETA でタスクをスケジュールします
System.currentTimeMillis() + 10,000
- 30 分のクロック スキューを考えると、この ETA は実際には今から 30 分 10 秒後に相当します。
- したがって、タスクが現在別のインスタンスによって処理されている場合、30 分以上保留になる可能性があります。
- 言うまでもなく、ユーザーにとっては、私のサービスが死んでいるかのように見えます。
これは、基礎となる API で何らかの形で防止されていますか? そうでない場合、Task ETA はどのように役立つのでしょうか? これを機能させるには、ETA を絶対時間ではなく相対時間として指定する必要はありませんか?
本当に悲しい部分は、実際にはTaskOptions.countdownMillis(...)
相対時間を期待する
関数が呼び出されていることですが、最終的にこの値を処理するソースコードを見ると、同じ非常に信頼性の低いSystem.currentTimeMillis()
.
さらに悪いことに、ETA またはカウントダウンを指定しない場合、この関数は 0 ではなく現在のシステム時間を使用するだけなので、すぐに実行する予定のタスクでさえ、1 時間以上保留になる可能性があります。
これは重大なバグですか、それとも何か不足していますか?
また、プル キュー内のタスクのリースにも同じことが当てはまりますよね?
c - 2 つの異なるプロセス間で時刻を同期する方法は?
2 つの異なる Linux マシン内で実行されている 2 つのプロセス間でいくつかのフレームを送信したいと考えています。1秒間に何フレーム受信したか知りたいです。そのため、マシン 1 のプロセス 1 からフレームにタイム スタンプを付けてから、マシン 2 のプロセス 2 がそれを受け取ります。タイムスタンプを確認し、プロセスに到達するまでにかかる時間を計算します2。
しかし、この 2 つのマシンの時間はまったく同じではありません。おそらく 1 秒の違いがあります。フレームがマシン 2 のプロセス 2 に到達するのにかかる時間を取得するにはどうすればよいでしょうか?