3

新しいプロジェクトの一部として、単調に増加する整数を生成できるサービスが必要です。サービスの要件は次のとおりです。

  1. サービスは、単調に増加する整数を生成する限り、連続した整数を生成する必要はありません。
  2. 64ビット整数を生成する必要があります
  3. サービスは高可用性である必要があります
  4. サービスは障害 (または再起動) に対して回復力がある必要があります

レプリケーションが有効なバックエンド ストアとしてredis ( INCR) を使用することを計画していましたが、問題は、マスター redis が失敗した場合、サービスがいくつかの整数を失う可能性があることです (更新がスレーブに流れる前に、マスターがクラッシュすると、サービスはいくつかの整数を失う可能性があります。つまり、サービスは、既に生成された値よりも小さい数を生成できます)。

誰かがそのようなシステム/サービスの設計を手伝ってくれませんか?

4

2 に答える 2

2

要件 1 と 3 は多少矛盾しています。単調増加の要件は、単一のサービスが値を提供する必要があることを意味し、高可用性にはなりません。

たとえば、データベース サーバーが 1 つしかない場合は、Oracle データベース シーケンスでうまくいきます。しかし、マシンのクラスターに移動すると、整数のバッチが各クラスター メンバーにプロビジョニングされ、メンバーがヒットすると順次割り当てられます。それらは一意であることが保証されていますが、単調に増加することはありません。

おそらく、重複を検出して調整するロジックを使用して、時間に基づいて (可能であればナノ秒の精度で) システムを構築できます。これでは高可用性にはなりません...

個人的には、このニーズを促進するビジネス要件を再検討します。それは本当ですか?たとえば、昔は、すべての営業担当者が同じオーダー ブックを使用していた場合、オーダー番号は連続していました。しかし、巡回販売員が標準になると、電話で注文番号を発行する店員が 1 人いなければ、これを実現することは困難でした。高可用性? あまり。

于 2016-04-04T08:08:33.190 に答える
2

あなたは時計を求めています。

相対的に言えば無理

優れたチュートリアルについては、このウィキペディアの記事を参照してください。

特殊相対性理論によれば、2 つの異なる事象が空間的に離れている場合、それらの事象が同時に発生するとは絶対的な意味で言うことはできません。たとえば、ロンドンとニューヨークでの自動車事故は、地球上の観測者には同時に発生したように見えますが、ロンドンとニューヨークの間を飛んでいる飛行機の観測者には、わずかに異なる時間に発生したように見えます。 . イベントが同時であるかどうかの問題は相対的です: 静止した地球参照フレームでは、2 つの事故が同時に発生する可能性がありますが、他のフレーム (イベントに対して異なる運動状態) では、ロンドンでのクラッシュが最初に発生する可能性があります。さらに他のフレームでは、ニューヨークのクラッシュが最初に発生する可能性があります。ただし、2 つのイベントが因果関係がある場合 (つまり、

実際に言えば、それは些細なことです

ほとんどの場合、ビジネス要件を分析すると、次のことが明らかになります。

  • すべての参加者が地球に縛られている (同じ参照フレームを共有している)、または
  • 興味のある出来事は因果関係があります。

その場合、単純な NTP で十分です。政府はすでにこのサービスを提供しています。 http://tf.nist.gov/tf-cgi/servers.cgi

于 2016-04-04T08:45:50.597 に答える