2016-04-04 11 views
3

Im Rahmen eines neuen Projektes benötigen wir einen Dienst, der monoton steigende Ganzzahlen erzeugen kann. Voraussetzungen für den Dienst sind:Erzeugen monoton wachsender Ganzzahlen (max 64bit)

  1. Dienst nicht zusammenhängende ganze Zahl, so lange zu erzeugen braucht, wie es sollte monoton steigende Zahlen produziert es
  2. Es sollte in Ordnung sein 64-Bit-Integer
  3. der Dienst hoch verfügbar sein produzieren
  4. Dienste sollten zum Scheitern elastisch sein (oder neu gestartet)

ich war Hobel redis (INCR) als back-End-Speicher mit der Replikation e verwenden Das Problem ist jedoch, dass der Dienst einige Integer verlieren kann, wenn der Master-Redis fehlschlägt (denke, dass sogar bevor das Update zum Slave herunterfährt, der Master abstürzt, dann kann der Service einige ganze Zahlen verlieren, dh der Service kann eine Nummer erzeugen, die) ist kleiner als bereits generierter Wert).

Kann mir jemand helfen, ein solches System/Service zu entwerfen.

+0

Ich verstehe, aber es gibt keine Frage in Ihrer Beschreibung. Würden Sie etwas hinzufügen? – Alexander

Antwort

2

Ihre Anforderungen 1 und 3 sind etwas widersprüchlich. Die Forderung nach einer monotonen Erhöhung bedeutet, dass ein einzelner Dienst die Werte liefern muss, und das wird nicht hoch verfügbar sein.

Zum Beispiel wird eine Oracle-Datenbank Sequenz den Trick tun, wenn Sie einen einzigen Datenbankserver haben. Aber sobald Sie zu einem Cluster von Maschinen gehen, werden in jedem Cluster-Element Ganzzahlen-Chargen bereitgestellt, und sie werden sequentiell zugeordnet, wenn das Mitglied getroffen wird. Sie sind garantiert einzigartig, aber nicht monoton steigend.

Möglicherweise könnten Sie ein System basierend auf der Zeit (bis zu einer Genauigkeit von Nanosekunden, wenn möglich) aufbauen, mit Logik zum Erkennen und Anpassen von Duplikaten. Dies wird nicht hoch verfügbar sein ...

Ich persönlich würde die Geschäftsanforderungen, die diese Notwendigkeit antreibt, wieder aufsuchen. Ist es echt? Zum Beispiel waren die Bestellnummern in den alten Tagen zusammenhängend, wenn alle Verkäufer das gleiche Auftragsbuch verwendeten. Aber sobald die Geschäftsreisenden zur Norm wurden, war dies schwer zu erreichen, ohne einen einzigen Angestellten zu haben, der Bestellnummern über das Telefon austeilte. Hohe Verfügbarkeit? Nicht wirklich.

+0

Um weitergedacht zu werden, war die übliche Lösung, jedem reisenden Verkäufer ein eigenes Bestellbuch zu geben, denn das einzige, was wirklich wichtig war, war, dass die Bestellnummern einzigartig waren. – emory

2

Sie fragen nach einer Uhr. Relativ

spricht es

Sehen Sie diese wikipedia article für eine hervorragende Tutorial unmöglich ist.

Nach der speziellen Relativitätstheorie ist es unmöglich, in einem absoluten Sinne zu sagen, dass zwei verschiedene Ereignisse zur gleichen Zeit auftreten wenn diese Ereignisse räumlich getrennt sind. Zum Beispiel, ein Autounfall in London und ein anderer in New York, die gleichzeitig Zeit zu einem Beobachter auf der Erde passieren, scheint bei leicht unterschiedlichen Zeiten zu einem Beobachter in einem Flugzeug aufgetreten sein zwischen fliegen London und New York.Die Frage, ob die Ereignisse simultan sind, ist relativ: Im stationären Erdbezugssystem können die zwei Unfälle gleichzeitig passieren, aber in anderen Rahmen (in einem anderen Bewegungszustand im Verhältnis zu den Ereignissen) der Absturz in London kann zuerst auftreten, und in noch anderen Frames kann der New York Crash zuerst auftreten. Wenn jedoch die beiden Ereignisse kausal verbunden sein könnten (dh die Zeit zwischen Ereignis A und Ereignis B ist größer als die Entfernung zwischen ihnen dividiert durch die Lichtgeschwindigkeit), wird die Reihenfolge beibehalten (dh "Ereignis A geht vor Ereignis B ") in allen Frames von Referenz.

Praktisch

Höchstwahrscheinlich eine Analyse der Geschäftsanforderungen würde zeigen, dass

  • Alle Teilnehmer sind erdgebunden (teilen den gleichen Referenzrahmen), ist es trivial gesprochen, Oder
  • Die Ereignisse von Interesse sind kausal miteinander verbunden.

In diesem Fall genügt ein einfaches NTP. Die Regierung bietet diesen Service bereits an. http://tf.nist.gov/tf-cgi/servers.cgi

+0

Diese Lösung bietet keine hohe Verfügbarkeit, da der Standort angibt "Alle Benutzer sollten sicherstellen, dass ihre Software NIEMALS einen Server häufiger als einmal alle 4 Sekunden abfragt. Systeme, die diese Rate überschreiten, wird der Dienst verweigert." – Penguino

+0

@Penguino einmal alle 4 Sekunden ist hoch genug für Regierungsarbeit verfügbar. Wenn das OP eine höhere Verfügbarkeit benötigt, kann das OP einen eigenen NTP-Dienst bereitstellen. – emory