agreed, there is a distinction between the format of a name and it's significance to the name server and how the api might use it. in fact, the name is just a string, it can have whatever significance we want. but when you specify a certain name, it has significance
only to the target name service and none other.

still, for compatibility between name services and to avoid confusion between users
it seems like we ought to narrow it down slightly.

i was thinking about the significance of scheme on the way in. i might reasonably have two schemes based on tls, one with different filters, for example. i think the scheme perhaps doesn't need to be one to one with an actual scheme, but perhaps just a
qualifier on instance name.

so let's suppose this format (though you could use any format that your ns supports):

api[/inst[/qual]]

where inst count be inst1[,inst2...]

and qual could be qual1[,qual2...]

in either case, what we are suggesting here is again the notion of search. shouldn't this
be better specified some other way?

consider this:

api/foo,bar/tls,tcp

it is a nice compact way to express this:

api/foo/tls
api/foo/tcp
api/bar/tls
api/bar/tcp

though that is somewhat ambiguous. you might prefer this order:

api/foo/tls
api/bar/tls
api/foo/tcp
api/bar/tcp

what might work better would be this:

etch:api/foo/tls?altname=api/bar/tls,api/foo/tcp,api/bar/tcp

this eliminates the idea that a name might have wildcarding, while still allowing for the idea of an alternate address. this already mirrors something i'd like to see with tcp
scheme:

tcp://foo:8090?alt=bar:8090

how do you interpret this:

etch://ns1:8090/api/foo/tls?altname=api/bar/tls,api/foo/tcp,api/bar/tcp?alt=ns2:8090

contact ns1 to translate the names, if ns1 offline use ns2. hmmm. what scheme should
we use for contacting the ns?

how about this:

etch:api/foo/tls?altname=api/bar/tls,api/foo/tcp,api/bar/tcp?ns=tcp://ns1:8090,tcp://ns2:8090

scott out

James Dixson wrote:
What if I do not know/care about the instance name or connection
scheme at runtime. The URI:

    etch://<name_service_ip:port>/<api>/<instance>/<scheme>

Both the <instance> and <scheme> path elements seem as if they should
be both optional and, as suggested by 'tcp,tls", tuples. So a service
URI could be as simple as:

    etch:<api>  (or maybe also etch:///<api> )  --
             etch:///etch.examples.perf.Perf
             etch:etch.examples.perf.Perf

    etch:<api>/<instance> --
             etch:etch.examples.perf.Perf/foo
             etch.etch.examples.perf.Perf/foo,bar

    etch:<api>/<instance>/<scheme> --
             etch:etch.examples.perf.Perf/foo/tcp
             etch:etch.examples.perf.Perf/foo,bar/tcp
             etch:etch.examples.perf.Perf/foo/tcp,tls
             etch:etch.examples.perf.Perf/foo,bar/tcp,tls



--
james



On Mon, Feb 2, 2009 at 8:52 AM, scott comer <[email protected]> wrote:
it was pointed out to me by james that the name service was a bit confused
in its roll by mixing up the idea of
name translation with the ideas of failover, replication, clustering, and
grouping of services. while those ideas
are important in a distributed system, they deserve their own specific
treatment and should not be part of the
name service itself. (replication of name servers itself is needed, but
subject to a different discussion.)

manoj and i reviewed the proposal for name service and struck the
requirements that were specifically not
related to implementing a basic name service. while replication of a name
service is still important, and
ought to be present, we feel we could make a good first cut without the
specific requirement and then see
where we can go.

so we adjusted the proposal and fiddled the wording a bit to account for the
shift in focus:

http://cwiki.apache.org/ETCH/etch-name-service.html

here are the important design principles as we see them:

1) a service or application should not have be overtly aware of the name
service. it should be possible to
deploy a service or application with or without the name service, with no
conditional code or changes
to code. thus use of a name service is purely a deployment consideration and
is not required.

2) the name service should be supportable in a variety of styles or modes
without changing the
fundamental functional interface. indeed, the basic contract should be very
simple.

we've not updated the ns.etch file to match yet. probably today.

thoughts? ideas? over the next few days manoj and i will publish some call
flows and code snips to
illustrate these ideas.

scott out



Reply via email to