OK, c'est une très vieille question, qui je suis le premier à voir maintenant.
Vous aurez besoin de différencier les numéros de séquence et les Identifiants uniques qui sont (éventuellement) librement triables par un critère spécifique (généralement le temps de génération). Vrai numéros de séquence implique la connaissance de ce que tous les autres travailleurs ont fait, et de ce fait, exigent un état partagé. Il n'y a pas de moyen facile de faire cela dans un système distribué, à grande échelle. Vous pouvez regarder les choses de réseau, comme les émissions, fenêtré varie pour chaque travailleur, et distribué des tables de hachage unique pour les travailleurs de l'IDs, mais c'est beaucoup de travail.
Les Identifiants uniques sont une autre affaire, il y a plusieurs bonnes façons de générer des Identifiants uniques de manière décentralisée:
a) Vous pouvez utiliser Twitter de Flocon de neige de l'ID de réseau de service. Flocon de neige est un:
- Service en réseau, c'est à dire que vous faites un appel du réseau pour obtenir un IDENTIFIANT unique;
- qui produit de 64 bits d'Id uniques qui sont commandés par temps de génération;
- et le service est très extensible et (potentiellement) très disponible; chaque instance peut générer plusieurs milliers d'utilisateurs par seconde, et vous pouvez exécuter plusieurs instances sur votre réseau LAN/WAN;
- écrit en Scala, tourne sur la JVM.
b) Vous pouvez générer des Id uniques sur les clients eux-mêmes, à l'aide d'une approche dérivée de la façon dont Uuid et le Flocon de neige à l'IDs sont faites. Il y a plusieurs options, mais quelque chose le long des lignes de:
Le plus significatif de 40 bits: Un timestamp; le temps de génération de l'ID. (Nous sommes en utilisant les bits les plus significatifs pour l'horodatage de faire des Id de tri-mesure par temps de génération.)
Le prochain de 14 ou alors bits: par générateur de comptoir, qui chaque générateur incréments de un pour chaque nouvelle ID généré. Cela garantit que les Identifiants générés au même moment (même les horodatages) ne se chevauchent pas.
Le dernier 10 bits: Une valeur unique pour chaque générateur. Avec cela, nous n'avons pas besoin de faire une synchronisation entre les générateurs (ce qui est extrêmement dur), comme tous les générateurs produisent de la non-cumul des Id en raison de cette valeur.
c) Vous pouvez générer des Id sur les clients, juste en utilisant un horodatage et la valeur aléatoire. Cela évite la nécessité de connaître tous les générateurs, et d'attribuer à chaque générateur d'une valeur unique. Sur le revers de la médaille, ces Id ne sont pas garantis pour être unique au monde, ils sont très susceptibles d'être unique. (À entrer en collision, un ou plusieurs générateurs de créer la même valeur aléatoire à exactement le même temps.) Quelque chose le long des lignes de:
- Les plus importantes 32 bits: Timestamp, le temps de génération de l'ID.
- Le moins significatif de 32 bits: 32 bits de l'aléatoire, généré à nouveau pour chaque ID.
d) la voie de La facilité, utiliser les Uuid / Guid.