2016-04-04 14 views
3

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

  1. サービスが
  2. それは非常に利用可能であるべき64ビット整数に
  3. サービスを生成する必要があり、それは問題ないはず限り、それは単調に増加する整数を生成して連続した整数を生成する必要はありません。
  4. サービス障害(または再起動)に弾力的であるべきである

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

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

+0

私はあなたの意見を得ていますが、あなたの説明に疑問はありません。 1つ追加してもよろしいですか? – Alexander

答えて

2

要件1と3は多少矛盾しています。単調増加の要件は、単一のサービスが値を供給しなければならず、高可用性にならないことを意味します。

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

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

私は個人的に私はこの必要性を駆動するビジネス要件を再訪します。本当ですか?たとえば、すべての販売担当者が同じ注文書を使用していた場合、旧式の注文番号は連続していました。しかし、旅行人が一度標準になった後、電話で注文番号を発行した単一の書記を持たなくては、これを達成することは困難でした。高可用性?あんまり。

+0

あなたの思考を続けていくために、通常の解決策は、各旅行販売担当者に自分の注文書を発行することだったと思います。 – emory

2

時計を求めています。

は比較的、それは不可能で話す

優れたチュートリアルのこのwikipedia articleを参照してください。

特殊相対性理論によれば、これらのイベントは、スペースで区切られた場合に二つの別個のイベントが同時に で起こることを絶対的な意味で を言うことは不可能です。例えば、 ロンドンとニューヨークの別の車で、地球上のオブザーバーと同じ時刻に の時刻に発生したと思われる車は、 の間を飛行している飛行機の観察者とわずかに異なる時刻に発生したように見えますロンドンとニューヨーク。事象が であるか否かの問題は、相対的である。静止地球参照フレームでは、同時に2つの事故が発生する可能性があるが、他のフレームでは( の異なる動きの状態で)ロンドンの事故 最初に発生する可能性があり、さらに他のフレームでは、ニューヨークのクラッシュが最初に発生する可能性があります。 しかし、2つの事象が因果関係で接続されている可能性がある場合(即ち、事象Aと事象Bとの間の時間が の間の距離を光の速度で割った距離よりも大きい場合)、その順序は であるB ")を参照してください。 実際、それは些細な

可能性が高いです言えば、ビジネス要件の分析は、それを明らかにする

  • すべての参加者は、地球バインド(参照の同じフレームを共有)していますまたは、
  • 関心のあるイベントが因果関係にあります。

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

+0

このソリューションでは、「すべてのユーザーは、ソフトウェアが4秒に1回よりも頻繁にサーバーに照会することは絶対に避けてください」と述べているため、高可用性を提供することはできません。 – Penguino

+0

@Penguinoは4秒に1度、政府の仕事のために十分な空きがあります。 OPがより高い可用性を必要とする場合、OPはOP自身のNTPサービスを提供することができる。 – emory

関連する問題