I think your points are all valid, Jorge. Not disagreeing with them;
more just outlining that while saying all services must *publish* a
REST interface, services can listen and respond on more than one
protocol.

So, I agree with you basically, just pointing out that while having a
REST interface is a good standard, it shouldn't be the *only* way that
services can communicate with each other :)

-jay

On Fri, Feb 18, 2011 at 12:46 PM, Jorge Williams
<jorge.willi...@rackspace.com> wrote:
>
> On Feb 18, 2011, at 10:27 AM, Jay Pipes wrote:
>
>> Hi Jorge! Thanks for the detailed response. Comments inline. :)
>>
>> On Fri, Feb 18, 2011 at 11:02 AM, Jorge Williams
>> <jorge.willi...@rackspace.com> wrote:
>>> There are lots of advantages:
>>>
>>> 1) It allows services to be more autonomous, and gives us clearly defined 
>>> service boundaries. Each service can be treated as a black box.
>>
>> Agreed.
>>
>>> 2) All service communication becomes versioned, not just the public API but 
>>> also the admin API.  This means looser coupling which can help us work in 
>>> parallel.  So glance can be on 1.2 of their API, but another API that 
>>> depends on it (say compute) can continue to consume 1.1 until they're ready 
>>> to switch -- we don't have the bottlenecks of everyone having to update 
>>> everything together.
>>
>> Agreed.
>>
>>> 3) Also because things are loosely coupled and there are clearly defined 
>>> boundaries  it positions us to have many other services (LBaaS, FWaaS, 
>>> DBaaS, DNSaaS, etc).
>>
>> Agreed.
>>
>>> 4) It also becomes easier to deploy a subset of functionality ( you want 
>>> compute and image, but not block).
>>
>> Agreed.
>>
>>> 5) Interested developers can get involved in only the services that they 
>>> care about without worrying about other services.
>>
>> Not quite sure how this has to do with REST vs. AMQP... AMQP is simply
>> the communication protocol between internal Nova services (network,
>> compute, and volume) right now. Developers can currently get involved
>> in the services they want to without messing with the other services.
>>
>
> I'm saying we can even package/deploy/run each service separately.  I 
> supposed you can also do this with AMQP, I just see less roadblocks to doing 
> this with HTTP.  So for example, AMQP requires a message bus which is 
> external to the service.  That affects autonomy.  With an HTTP/REST approach, 
> I can simply talk to the service directly. I suppose things could be a little 
> different if had a queuing service.  But even then, do we really want all of 
> our messages to go to the queue service first?
>
>
>>> 6) We already have 3 APIs (nova, swift, glance), we need to do this kind of 
>>> integration as it is, it makes sense for us to standardize on it.
>>
>> Unless I'm mistaken, we're not talking about APIs. We're talking about
>> protocols. AMQP vs. HTTP.
>
> What we call APIs are really protocols, so the OpenStack compute API is 
> really a protocol for talking to compute.  Keep in mind we intimately use 
> HTTP in our restful protocol...content negotiation, headers, status codes, 
> etc... all of these are part of the API.
>
> Another thing I should note, is that I see benefits in keeping the  interface 
> to service same regardless of whether it's a user or another service that's 
> making a call.  This allows us to eat our own dog food. That is, there's no 
> separate protocol for developers than there is for clients.  Sure there may 
> be an Admin API, but the difference between the Admin API and the Public API 
> is really defined in terms of security policies by the operator.
>
>>
>>> We are certainly changing the way we are doing things, but I don't really 
>>> think we are throwing away a lot of functionality.  As PVO mentioned, 
>>> things should work very similar to the way they are working now.  You still 
>>> have compute workers, you may still have an internal queue, the only 
>>> difference is that cross-service communication is now happening by issuing 
>>> REST calls.
>>
>> I guess I'm on the fence with this one. I agree that:
>>
>> * Having clear boundaries between services is A Good Thing
>> * Having versioning in the interfaces between services is A Good Thing
>>
>> I'm just not convinced that services shouldn't be able to communicate
>> on different protocols. REST over HTTP is a fine interface. Serialized
>> messages over AMQP is similarly a fine interface.
>
> I don't think we're saying you can't use any protocol besides HTTP.  If it 
> makes sense to use something like AMQP **within  your service boundary** use 
> it.  One of the nice things about services being autonomous and loosely 
> coupled is that you have a lot of freedom within your black box.  So if you 
> want to use AMQP to talk to your compute nodes within your boundary go for it.
>
> I do think we need to standardize communication *between services* and 
> standardizing on REST is not a bad choice.  We learned this lesson the hard 
> way at Rackspace.  Today we have services that use REST, RMI, XML-RPC, and 
> SOAP.  Because there's a lot of diversity in the protocols we have services 
> that expose multiple protocols to different clients (say RMI and SOAP), often 
> a feature will make it to one protocol but never gets exposed in the other. 
> Having to support multiple protocols adds a lot of extra work for the service 
> team and for the teams like the control panel team that needs to integrate 
> with all sorts of services in all sorts of ways.  We've come to the 
> conclusion that supporting a single protocol is a good thing, and that 
> HTTP/REST is not a bad choice.
>
> Now there are cases where it does make sense to expose a protocol other than 
> HTTP/REST -- and that is when there's a native de-facto protocol with  
> ubiquitous client support.  So for example, if we created a mail service, 
> does it really make sense for us to redefine IMAP in REST -- I think not :-)  
>  Same thing for protocols like iSCSI, etc.
>
>> The standardization
>> should occur at the *message* level, not the *protocol* level. REST
>> over HTTP, combined with the Atom Publishing Protocol, has those
>> messages already defined. Having standard message definitions that are
>> sent via AMQP seems to me to be the "missing link" in the
>> standardization process.
>
> You're argument that the messages should be standardized but that we should 
> be transport protocol independent is essentially what lead to the development 
> of SOAP.  Today you could do:
>
> 1) SOAP over HTTP
> 2) SOAP over AMQP
> 3) SOAP over SMTP
> 4) SOAP over TCP...etc
>
> And it works as you proposed,  the messages are standardized, the transport 
> protocol doesn't matter. Unfortunately a side effect of this is that stuff 
> that would otherwise be handled by the protocol ends up filtering its way up 
> to the definition of the messages.  This adds a lot of complexity and it 
> prevents clients and service providers from taking advantages of the 
> underlying features of the protocol.  I'd say let's standardize on REST and 
> take advantage of all of the stuff HTTP has to offer (proxying, caching, SSL, 
> client support, etc...).
>
> -jOrGe W.
>
>
>
>
>

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

Reply via email to