On Wed, Jun 1, 2011 at 3:37 PM, Martin Pool <m...@canonical.com> wrote:
> That looks great.
>
>> Access to a particular form of persistence (e.g. the librarians 
>> files-on-disk, or a particular postgresql schema) requires being in the same 
>> source tree as the definition of that persistence mechanism. This avoids 
>> having to synchronise deploys to multiple services when schema changes are 
>> occuring: no leaky borders. That is to say that a particular persisted 
>> collection should only be written and read by a single service. E.g. only 
>> one kind of service will be able to read and write to the postgresql 
>> database that contains bugtasks.
>
> This is probably a reasonable principle, I guess.  Other architectures
> of the kind you are describing do relax this; not so much in
> postgresql but through allowing slight version skew between different
> services accessing the same persistence layer.  It almost seems to
> imply all the instances of the service that access the persisted layer
> must be updated strictly in lockstep, which might make deployment
> harder.
>
> Or is this essentially saying all "raw" persistence must be wrapped by
> a service, which is a bottleneck through which everything else
> accesses it.
>
> Queued messages can be considered a form of persistence, but
> presumably we'd be ok with multiple services reading/writing them.
>
> Perhaps this is just a matter of terminology about what is
> "persistence".  Maybe you can make it more clear.
>
> Are you trying to say: when there is a lower-level service (eg psql,
> librarian data files) that requires lock-step updates with a dependent
> services, there should be only one higher-level service, which can
> then serve others with a more loosely coupled interface.

Sure, this is roughly the same thing.

>> If care is taken around how information disclosure is managed, this front 
>> end service could dispense with the entire zope security model,
>
> I understand and like the scatter-gather templating thing, but could
> you expand on "dispense with the entire zope security model"?  Do you
> mean the templating layer will just pass-through the user identity,
> and security will be handled entirely on the back end?
>
> I understand public APIs are unconnected from adding internal APIs but
> I wonder how they would be implemented in this model: I suppose a new
> front end service that re-presents some internal APIs?

I'd expect more than simply re-presenting. But yes. Or, alternatively
we productise the internal API and expose it directly. Case-by-case
analysis I expect.

>> XMLRPC: pros: already deploys, batteries included in Python and many other 
>> languages. cons: XML, RPC model rather than restful - no opportunity for 
>> caching, URLs can be opaque when debugging.
>
> bzr bugs have shown the Python module for it is not that great.

mmm, none of the bugs we've had would affect internal services, FWIW.

>> adhoc restful json based apis. pros: nice to look at by hand, easy to 
>> interact with manually. cons: not included in the Python standard library, 
>> optimises for things that don't really affect us.
>
> python has a json library built in since 2.6
> <http://docs.python.org/library/json.html> and of course also http.

To the extent that elementree is in python yes, but xmlrpc is more
than a serialisation framework.

> Probably faster (citation needed) than xml.

Measurement needed :)

> Much less annoying for
> shipping around binary or unicode data than xml.  Definitely the
> industry standard.  As a consequence, more likely to fit easily with
> tools we could possibly want to use in the future like document
> databases.  Makes it more easily possible to just directly proxy some
> APIs out to clients (obviously you would want some careful
> firewalling.)

I don't think json makes it any easier (or harder) to supply internal
APIs to clients. FWIW xml is still being added to new services - e.g.
amazon services - today, as is json. I think json is the standard for
javascript APIs for sure, but we're not expecting browsers to consume
internal services - by default. So the thing to do is to get a
-really- low bar for entry for microservices and pay a productising
cost for ones we expose remotely. I'm not arguing for or against
xmlrpc or json+a rest mapper; I'm pointing out that having two
different answers for two different problems isn't a bad thing.

> Beyond caching in the sense of inserting squid between different
> services, I think it's nice to be able to just hang on to the
> representation of a particular object and say "here is that object",
> which works in REST but does not make so much sense if the protocol is
> inherently about rpc.

This might be nice in theory. Currently its disabled for LP apis in
production - too slow, was a pessimisation.

An RPC layer answering questions about an object can cache
representations if it wants to anyhow, so this seems unrelated to the
protocol.

> Other things to possibly add as services would be debug/production
> logging, an audit trail/activity log, and incoming-mail processing
> (which doesn't necessarily need to be a cron script.)  But I guess
> they are just examples and not necessarily exhaustive.

Please add them to the roadmap, they sound very much like interesting
things to build up.

-Rob

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-dev
Post to     : launchpad-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~launchpad-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to