2010/1/15 Michael Poulin <[email protected]>

>
>
> I agree with "the conceptual architecture using a single consistent style"
> but I disagree that this style is RPC. Relationships and corresponding
> interactions between architectural entities are the part of the
> architecture, it is not a technology; I can send a message via MOM or via
> FedEx, this is immaterial at the architecture level.
>

Michael so what is your consistent "style" at this level.  I'm explicitly
saying that the RPC "style" makes good looking models not that RPC as a
technology is the way to go.

Steve


>
> - Michael
>
> ------------------------------
> *From:* Steve Jones <[email protected]>
>
> *To:* [email protected]
> *Sent:* Fri, January 15, 2010 10:08:07 AM
> *Subject:* Re: [service-orientated-architecture] Steve on RPC
>
>
>
>
>
> 2010/1/14 Eric Newcomer <e_newco...@yahoo. com <[email protected]>>
>
>>
>>
>> I don't think this is correct. We are modeling and designing services with
>> various message exchange patterns, both synchronous and asynchronous and we
>> consider this to be consistent with SOA based designs.
>>
>
> At the IMPLEMENTATION and TECHNOLOGY levels I completely 100% agree that
> this is what we do.  What I'm saying (and Gregg pointed out) is that you are
> often better off doing the conceptual architecture using a single consistent
> style (RPC) and then making the implementation (design) decision afterwards.
>  The alternative is having a high-level architecture which exposes technical
> implementation styles.
>
> Steve
>
>
>>
>> Eric
>>
>> On Thu Jan 14th, 2010 5:50 PM EST Steve Jones wrote:
>>
>> >Fight ;-o
>> >
>> >2010/1/15 Michael Poulin <m3pou...@yahoo. com <m3poulin%40yahoo.com>>
>> >
>> >>
>> >>
>> >> Gervas,
>> >>
>> >> let's start with that "Get Delivery Status" is not really a capability
>> as
>> >> well as "Get Forecast", they are operations of the interface as the
>> most
>> >>
>> >
>> >How do you work that out?
>> >
>> >To obtain a delivery status for an order is a core capability that an
>> order
>> >management service must have. To get that status it might have to query
>> >external systems as well as doing internal work.
>> >
>> >A Forecast is even more of a business capability, creating a forecast
>> >involves potentially millions of calculations and feeds from massive
>> number
>> >of other systems. If its a real-time forecast then the amount of work can
>> >be stratospheric.
>> >
>> >A Capability is a thing that delivers the real world effect. Getting the
>> >Delivery status or getting a forecast results in a real world effect and
>> >undertakes a constrained piece of business functionality.
>> >
>> >
>> >
>> >> . That is, we have clearly distinguish between service capabilities and
>> >> service interface operations. This is the first 'attack' on the RPC as
>> a
>> >> high level of 'a consistent view' - what is consistent from RPC
>> perspective
>> >> may be inconsistent from service perspective.
>> >>
>> >
>> >I can't really see it as an attack when you haven't explained, beyond a
>> >statement how neither retrieving delivery status or a forecast result in
>> a
>> >real-world effect.
>> >
>> >
>> >
>> >>
>> >> "When we call "Make Forecast" on the Finance Service it needs to ask
>> the
>> >> Sales Service for its Forecast and therefore does a "Get Forecast" call
>> on
>> >> the Sales Service. We need the Forecast to be updated daily" - from the
>> >> service consumer perspective (the only correct viewpoint for analysing
>> >> services), the Finance Service is responsible for the Forecast
>> >> irrespective to whether it gets it from the Sales Service or not. From
>> >> architectural viewpoint,
>> >> the Finance Service has to interact with the Sales Service, and this is
>> >> not necessary to an RPC call (may be MOM-based request); this depends
>> on
>> >> the Finance Service's Service Description. If "we need the Forecast to
>> be
>> >> updated daily", this is another reason for NOT using RPC between the
>> Finance
>> >> Service and the Sales Service.
>> >>
>> >
>> >I am NOT saying that the implementation should be RPC but that the
>> >ARCHITECTURE is conceptually RPC. Having a consistent conceptual model
>> and
>> >allowing multiple implementation models is the under-pinning strength of
>> a
>> >business SOA approach.
>> >
>> >
>> >>
>> >> "Now when we start working through this at a systems level ..."
>> >> utilisation of legacy systems in Mainframes and FTP/ETL is fine but
>> this is
>> >> not dictated by the RPC style (as you confirmed: "...but instead of
>> making
>> >> an RPC call to get that information we have decided...". That is, RPC
>> is
>> >> good but not really universal to become the Development Solution #1.
>> This is
>> >> the second 'attack' on the RPC.
>> >>
>> >
>> >Eh? I'm not saying that RPC at the conceptual level = RPC at the
>> >implementation level.
>> >
>> >
>> >
>> >>
>> >>
>> >> Provided description of "RPC into Events" calls for messaging solution
>> >> bypassing anything related to RPC. Given event-driven scenario is
>> typical
>> >> 'push' scenario, which operates in contra-RPC model. This is the third
>> >> 'attack' on the RPC.
>> >>
>> >
>> >Nope, its nothing of the sort. Its proving the point that RPC as a
>> >conceptual framework can be used and then mapped to multiple
>> implementation
>> >approaches. The Business folks don't need to worry about the exact
>> >implementation approach (see Christmas SOA) but the validity of the
>> >conceptual model.
>> >
>> >
>> >>
>> >> REST=RPC via special transport protocol, no doubts. But REST can play
>> only
>> >> the interface role for the service. REST is technology not a separate
>> >> concept, and this concept is RPC.
>> >>
>> >
>> >I'm not even going there...
>> >
>> >
>> >>
>> >> Finally, I totally disagree with the "Conceptual v Delivery" and, I
>> hope,
>> >> I have demonstrated on your examples limited usability of RPC for
>> service
>> >> design. This is why I repeat - service must be designed as service and
>> >> its implementation must respect and preserve service constraints and
>> >> boundaries. The horse pools the cart; the cart, does not matter if it
>> is
>> >> a phaeton or a royal carriage, does not push the horse.
>> >>
>> >
>> >Nope I don't think you have. What you've demonstrated is that at the
>> >implementation level you can use lots of approaches (which is what I've
>> >said). Having a conceptual architecture which surfaces EDA, GDA, REST,
>> RPC,
>> >MOM and all the other implementation approaches to the business is just
>> >wrong and not (IMO) SOA.
>> >
>> >SOA means that you have services and they have capabilities which can be
>> >exercised
>> >RPC means that you have interfaces and they have operations which can be
>> >exercised
>> >
>> >This is why the two go well together at a *conceptual level* and you then
>> >choose the right *implementation approach* as you move into design.
>> >
>> >Steve
>> >
>> >
>> >
>> >
>> >>
>> >> - Michael
>> >>
>> >> ------------ --------- ---------
>> >> *From:* Gervas Douglas <gervas.douglas@ 
>> >> gmail.com<gervas.douglas%40gmail.com>
>> >
>> >> *To:* service-orientated- architecture@ yahoogroups. 
>> >> com<service-orientated-architecture%40yahoogroups.com>
>>
>> >> *Sent:* Thu, January 14, 2010 11:01:08 AM
>> >> *Subject:* [service-orientated -architecture] Steve on RPC
>> >>
>> >>
>> >>
>> >> Gregg Wonderly made a good comment on the Yahoo SOA list the other day
>> >>
>> >> *I think one of the still, largely unrecognized issues is that
>> developers
>> >> really should be designing services as RPC interfaces, always. Then,
>> >> different service interface schemes, such as SOAP, HTTP (Rest et.al.),
>> Jini,
>> >> etc., can be more easily become a "deployment" technology introduction
>> >> instead of a "foundation" technology implementation that greatly limits
>> how
>> >> and under what circumstances a service can be used. Programming
>> >> Language/platform IDEs make it too easy to "just use" a single
>> technology,
>> >> and then everything melds into a pile of 'technology' instead of a
>> >> 'service'.*
>> >>
>> >>
>> >>
>> >> The point here is that *conceptually* RPC is very easy for everyone to
>> >> understand and at the highest levels it provides a consistent view. Now
>> >> before people shriek that *"But RPC sucks"* I'll go through how it will
>> >> work.
>> >>
>> >> First off lets take a simple three service system where from an "RPC"
>> >> perspective we have the following:
>> >>
>> >> The Sales *Service* which has *capabilities* for "Buy Product" and "Get
>> >> Forecast"
>> >>
>> >> The Finance *Service* which has *capabilities* for "Report Sale" and
>> "Make
>> >> Forecast"
>> >>
>> >> The Logistics *Service* which has *capabilities* for "Ship Product" and
>> >> "Get Delivery Status"
>> >>
>> >> There is also a customer who can "Receive Invoice"
>> >>
>> >> Now we get into the conceptual design stage and we want to start
>> talking
>> >> through how these various services work and we use an "RPC language" to
>> >> start working out how things happen.
>> >>
>> >> *RPC into Push*
>> >> *When we call "Make Forecast" on the Finance Service it needs to ask
>> the
>> >> Sales Service for its Forecast and therefore does a "Get Forecast" call
>> on
>> >> the Sales Service. We need the Forecast to be updated daily.*
>> >>
>> >> Now when we start working through this at a systems level we see that
>> the
>> >> mainframe solution of the Finance team is really old and creaky but it
>> >> handles batch processing really well. Therefore given our requirement
>> for a
>> >> daily forecast what we do is take a nightly batch out of the CRM
>> solution
>> >> and Push it into the Mainframe. Conceptually we are still doing exactly
>> what
>> >> the RPC language says in that the data that the mainframe is processing
>> has
>> >> been obtained from the Sales area, but instead of making an RPC call to
>> get
>> >> that information we have decided in implementation to do it via Batch,
>> FTP
>> >> and ETL.
>> >>
>> >> *RPC into Events*
>> >> The next piece that is looked at is the sales to invoice process Here
>> the
>> >> challenge is that historically there has been a real delay in getting
>> >> invoices out to customers and it needs to be tightened up much more.
>> >> Previously a batch has been sent at the end of each day to the
>> logistics and
>> >> finance departments and they've run their own processing. This has led
>> to
>> >> problems with customers being invoiced for products that aren't shipped
>> and
>> >> a 48 hour delay in getting invoices out.
>> >>
>> >> The solution is to run an event based system where Sales sends out an
>> event
>> >> on a new Sale, this is received by both Finance and the Logistics
>> department
>> >> . The Logistics department then Ships the Product (Ship Product) after
>> which
>> >> it sends a "Product Shipped" event which results in the Finance
>> department
>> >> sending the invoice.
>> >>
>> >> So while we have the conceptual view in RPC speak we have an
>> implementation
>> >> that is in Event Speak.
>> >>
>> >> *RPC into REST*
>> >> The final piece is buying the products and getting the delivery status
>> >> against an order. The decision was made to do this via REST on a shiny
>> new
>> >> website. Products are resources (of course), you add them to a shopping
>> >> basket (by POSTing the URI of the product into the basket) this
>> shopping
>> >> basket then gets paid for and becomes an Order. The Order has a URI and
>> you
>> >> just simply GET to have the status.
>> >>
>> >> So conceptually its RPC but we've implemented it using REST.
>> >>
>> >> *Conceptual v Delivery*
>> >>
>> >> The point here is that we can extend this approach of thinking about
>> things
>> >> in RPC terms through an architecture and people can talk to each other
>> in
>> >> this RPC language without having to worry about the specific
>> implementation
>> >> approach. By thinking of simply "Services" and "Capabilities" and
>> mentally
>> >> placing them as "Remote" calls from one service to another we can
>> construct
>> >> a consistent architectural model.
>> >>
>> >> Once we've agreed on this model, that this is what we want to deliver,
>> we
>> >> are then able to *design* the services using the most appropriate *
>> >> technology* approach. I'd contend that there really aren't any other
>> >> conceptual models that work consistently. A Process Model assumes
>> steps, a
>> >> Data Model assumes some sort of entity relationship a REST model
>> assumes its
>> >> all resources and an Event model assumes its all events. Translating
>> between
>> >> these different conceptual models is much harder than jumping from a
>> >> conceptual RPC model that just assumes Services and Capabilities with
>> the
>> >> Services "containing" the capabilities.
>> >>
>> >> So the basic point is that architecture, and particularly business
>> >> architecture, should always be RPC in flavour. Its conceptually easier
>> to
>> >> understand and its the easiest method to transcribe into different
>> >> implementation approaches.>>
>> >> *
>> >> You can read Steven's blog at: http://service- architecture. blogspot.
>> >> com/2010/ 01/think- in-rpc-develop- in-anything. html<http://service-
>> architecture. blogspot. com/2010/ 01/think- in-rpc-develop- in-anything.
>> html<http://service-architecture.blogspot.com/2010/01/think-in-rpc-develop-in-anything.html>
>> >
>> >>
>> >> Gervas*
>> >>
>> >>
>> >>
>> >>
>>
>>
>
>  
>

Reply via email to