Cloud Foundry: Design and Architecture
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Jeevak Kasarkod on Apr 05, 2011
1. Base the internal message format on the external message standard (MISMO for this industry). This message set is bloated, but is mature, supports most areas of the business, and is extensible for attributes specific to this company and its processes.Steve Jones responded with three observations based on his experiences with SOA information modeling
2. Create an XML-based message set based on the company's enterprise data model, which the company has invested a great amount of money into, and includes a very high percentage of all attributes needed in the business. In a nutshell,we've generated an XML Schema from ER Studio, and will tinker with that construct types that define the payloads for messages.
3. Use MISMO mainly for its entity definitions, but simplify the structure to improve usability. We benefit from the common vocabulary, but would ultimately define dozens of transactions over the coming years that MISMO has already defined.
Domain data is the classes that encapsulate information needed to implement services.This uses the classic object/relational mapping.to which Steve Jones responded with:
Object/Relational mapping has nothing at all to do with semantics or SOA and is a little bit random here as is the phrase "Domain data is the classes that encapsulate information needed to implement services". Data and classes are different beasts, one is a structural element (class) the other is an instance (data).David Tildesley supported Ashraf Gulal's OOD approach with:
I find myself agreeing with Ashraf in his advocation of using basic OO design principles (encapsulation, loose coupling, favour composition over inheritance etc) concepts in applying these to SOA. It is the abandonment of these principles that leads not only SOA projects but also application development down the rocky road to failure and a mire of confusion.
I would recommend following Coad, De Luca etc. advice and use the four color modelling archetype objects and the archetype domain shape (ADS) (a.k.a domain neutral component) which is proven technique/pattern. The ADS will indicate to you, the logical components (a group of classes) that are loosely coupled that become your "entity" services and these components become your "business components" and from there it is straight forward engineering to get your xsd's (avoid xsd restrictions and make everything optional and package appropriately using imports and includes). Your SOA messages are views on the CDM and contain business components(s) and additional metadata/context for the SOA infrastructure purpose. Each business component will have at it's heart a core entity (a pink or a green). The decoupling points will be at the roles (yellow).
To pitch SOA (an approach with some guiding principles) against OOD doesn't appear to me to be useful - it's somewhat akin to comparing a UI layer against "OO" in a traditional 3 layer application architecture. SOA practitioners are free to use OO design practice, patterns and techniques to help them them arrive at the CDM and candidate list of services or not.Both Michael Poulin and Steve Jones disagreed with this approach to candidate service identification and domain modeling. Some highlights from Michael Poulin's response:
SOA is functional model, not object model; it is that simple. As such, the model requires certain caution when designing things because function much closer to the human behavior and carries some aspects of it that are not present in technology-centric OO.
When you approach to container design, the first step is not OO or DDD; the first step is DOSOM and only then OO/DDDSteve Jones summarized:
I'd advocate using an SOA approach for services to create clearly separate domains, then create a minimal canonical model that uses techniques such as MDM to minimise the amount of information required to be exchanged. On single application spaces where the services have a high dependency and high cohesion then a more OO centric approach for the delivery of the infrastructure of those multiple services can, and does work, but as you look to span multiple business domains and organisations it ceases to be viable.
SOA for the business architecture, OO for the implementation of service specifications and an information interaction model based on minimum information exchange rather than CDM.David Tildesley summarized the MDM side of the discussion with a usecase which Steve Jones verified as a legitimate usecase for MDM:
Would it be fair to say that MDM is about creating an "XREF" to facilitate a single view of customer - only needed when you have multiple applications (most often in differing linesof business) all with their own view of customer. MDM tells us whether "Thomas J. Smith" in system A is that same person as "Tom Smith" in system B and holds the foreign key references to the entities in each application.
I am quite surprised to see this kind of conversation still going in 2011. How can a decent SOA methodology that claim to include "domain modeling" do not speak about "Entity Lifecycle".
There are well established, widely used SOA methodologies, such as Praxeme (www.praxeme.org) that have very successfully enabled the discovery of services and service interfaces. On of the key fundamental difference between OO and SO is that all class methods are independent by default while SO in general has some explicit dependencies well represented by orchestration and choreography languages: BPEL and CDL/BPSS
OO is the last place where you want to start if you want to success at your SOA.
The discussion was about information model/Information as a Service that most of the people forget about it!
It seems that the author got late in the discussion and did not get the tread from the beginning.
OO has nothing to do with discovering the services.
But Domain model is an integral part of the information model.
Ashraf is right that the discussion started with information modeling which is reflected in the questions posted by Kirstan, which Ive referred to in the beginning of the article. It split into a seperate thread of discussion when David posted his comments regarding the use of OOD in-lieu of what ashraf referred to in one of his emails. Ive included the references to provide a context but this thread in the entire discussion caught my attention.
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
Andrew Watson talks about the work of the OMG, where CORBA is alive and well (hint: in your car), UML and UML Profiles vs. custom Modeling languages, DDS and other middleware, and much more.
Sohil Shah discusses creating iPhone and Android enterprise mobile applications based on cloud services using the open source platform OpenMobster.
Paul Sanford presents the transformations supported by data throughout its life cycle, and how that can be better done with Splunk, an engine for monitoring and analyzing machine-generated data.
A common “best practice” for unit tests is to only write a one assertion in each test. I intend to question this advice by showing that multiple assertions per test are both necessary and beneficial.
John Rauser presents the architectural and technological evolution of Amazon retail websites starting with 1994 and ending with adopting Amazon Web Services.
Michael Stal discusses system architecture quality, how to avoid architectural erosion, how to deal with refactoring, and design principles for architecture evolution.
Every developer has had to integrate with another system, API or component. Tis article provides strategies to handle the change and for he separating system boundaries.
3 comments
Watch Thread Reply