I think Dragon got it right. We need a zone identifier prefix on the IDs. I think we need to get away from numbers. I don't see any reason why they need to be numbers. But, even if they did, you can pick very large numbers and reserve some bits for zone ID.
- Chris On Mar 22, 2011, at 10:48 AM, Justin Santa Barbara wrote: > I think _if_ we want to stick with straight numbers, the following are the > 'traditional' choices: > > 1) "Skipping" - so zone1 would allocate numbers 1,3,5, zone2 numbers 2,4,6. > Requires that you know in advance how many zones there are. > 2) Prefixing - so zone0 would get 0xxxxxxx, zone1 1xxxxxx. > 3) Central allocation - each zone would request an ID from a central pool. > This might not be a bad thing, if you do want to have a quick lookup table of > ID -> zone. Doesn't work if the zones aren't under the same administrative > control. > 4) Block allocation - a refinement of #3, where you get a bunch of IDs. > Effectively amortizes the cost of the RPC. Probably not worth the effort > here. > > (If you want central allocation without a shared database, that's also > possible, but requires some trickier protocols.) > > However, I agree with Monsyne: numeric IDs have got to go. Suppose I'm a > customer of Rackspace CloudServers once it is running on OpenStack, and I > also have a private cloud that the new Rackspace Cloud Business unit has > built for me. I like both, and then I want to do cloud bursting in between > them, by putting an aggregating zone in front of them. I think at that > stage, we're screwed unless we figure this out now. And this scenario only > has one provider (Rackspace) involved! > > We can square the circle however - if we want numbers, let's use UUIDs - > they're 128 bit numbers, and won't in practice collide. I'd still prefer > strings though... > > Justin > > > > On Tue, Mar 22, 2011 at 9:40 AM, Ed Leafe <[email protected]> wrote: > I want to get some input from all of you on what you think is the best > way to approach this problem: the RS API requires that every instance have a > unique ID, and we are currently creating these IDs by use of an > auto-increment field in the instances table. The introduction of zones > complicates this, as each zone has its own database. > > The two obvious solutions are a) a single, shared database and b) > using a UUID instead of an integer for the ID. Both of these approaches have > been discussed and rejected, so let's not bring them back up now. > > Given integer IDs and separate databases, the only obvious choice is > partitioning the numeric space so that each zone starts its auto-incrementing > at a different point, with enough room between starting ranges to ensure that > they would never overlap. This would require some assumptions be made about > the maximum number of instances that would ever be created in a single zone > in order to determine how much numeric space that zone would need. I'm > looking to get some feedback on what would seem to be reasonable guesses to > these partition sizes. > > The other concern is more aesthetic than technical: we can make the > numeric spaces big enough to avoid overlap, but then we'll have very large ID > values; e.g., 10 or more digits for an instance. Computers won't care, but > people might, so I thought I'd at least bring up this potential objection. > > > > -- Ed Leafe > > > > > _______________________________________________ > Mailing list: https://launchpad.net/~openstack > Post to : [email protected] > Unsubscribe : https://launchpad.net/~openstack > More help : https://help.launchpad.net/ListHelp > > _______________________________________________ > Mailing list: https://launchpad.net/~openstack > Post to : [email protected] > Unsubscribe : https://launchpad.net/~openstack > More help : https://help.launchpad.net/ListHelp _______________________________________________ Mailing list: https://launchpad.net/~openstack Post to : [email protected] Unsubscribe : https://launchpad.net/~openstack More help : https://help.launchpad.net/ListHelp

