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 Srini Penchikala on Nov 22, 2010
Evolve is a lightweight tool for creating, wiring up and executing JavaBeans, allowing them to be treated as full components. Developers can use Evolve to graphically describe JavaBeans and also optionally generate the Java code for the setters and getters. It supports four primary activities: creating or importing JavaBeans, wiring these up to make more complex components, reusing and evolving them, and executing them. The Evolve system includes the following parts:
Evolve has static error checking of models or configurations. It also allows different variants of a system to be created by using the evolution constructs, and all permutations are automatically checked.
Version 1.0.2 of the tool was released this week. Evolve's runtime is open sourced under the Apache License. The graphical tool is commercial and there's a community version.
InfoQ spoke with Andrew McVeigh, creator of Evolve framework, about the features and future road-map of the product. Responding to a question on the main motivation behind the development of Evolve, Andrew said that when he was working on a large component-based enterprise project which was being customized for several banks, it was very hard work to predict the way in which the software needed to be made extensible. Evolve is the result, where evolution of software is on an equal footing to creation.
InfoQ: How is Evolve different from traditional Dependency Injection (DI) techniques? What advantages does it offer over the traditional DI solutions?
Well, they both are used to connect up components/beans to make a system, and they allow components to be switched in and out for testing etc. So, they perform similar functions. There are two big differences though between Evolve and DI.
The first is that Evolve uses a full component model with connectors. This gives you a lot more power to describe the way that components are interconnected in a system. It's a bit like wiring up chips on a circuit board. With DI when you get issues with connecting two beans to refer to each other, or it's difficult to show the dynamic structures in your architecture etc, you are really bumping up against the lack of a proper component model. So that is one benefit Evolve brings.
The second big difference is that Evolve integrates two powerful component constructs which effectively let you design with the power of version control, at an architectural level. These are the key to the advanced reuse and evolution facilities. Using these you can evolve components without destroying the originals. Remarkably, any software you build using Evolve is always extensible. Extension and creation are completely aligned.
InfoQ: Can you discuss the typical application development process using Evolve framework - in terms of how different phases like modeling, design, development, testing, and deployment are performed - compared to a traditional application development process that's not using Evolve?
It's a great question. As an experiment, imagine how your own processes might change if every system you created had a complete link between the architecture and the code, and was guaranteed to be extensible. It basically means that design and coding become two sides of the same activity, and that you take a more agile approach to creating applications knowing that you can always extend or evolve. There's a lot less upfront planning required, and it's a very liberating way to develop.
The other difference is that because the component model is hierarchical, you can use very fine-grained components without the traditional problem in DI of having too many components to manage in your architecture. In Evolve you zoom in or out, viewing the system from the right level regardless of how many components there are.
So, Evolve is a lot more amenable to all parts of an application. We've used it for fine-grained things like creating and reusing GWT forms, we've used it for coarse-grained things like making services.
InfoQ: What are the limitations of the Evolve approach?
I think one of the biggest issues is simply that working with Evolve requires a mindshift. It flies in the face of accepted wisdom that says (a) that architecture and implementation are disconnected and (b) that extensibility must be pre-planned and factored in. It's been really difficult to get across that Evolve does not have these issues.
A more obvious limitation is that we don't yet have the extensive integration frameworks layered on top of our approach. On the other hand, the fundamentals of our approach are hugely powerful, so we are excited to see what can be built and how it will differ from existing toolkits.
Finally, Evolve currently requires the use of setter injection. Unlike DI, we allow complete flexibility when wiring up, and constructor injection clearly can't cope in the general case. e.g. when you have bidirectional links between components and other complex structures. We are looking at relaxing this constraint when the wiring up is not particularly complex or falls into the constrained DI wiring patterns.
InfoQ: What is the future road-map of the project?
We are finishing off a team version, which allows many developers to collaborate in real-time on a single system. Then we'll work on an Android version to let you use all these facilities to make mobile apps. Finally, it turns out that the evolution and extensibility support in Evolve makes it ideal for creating plugin architectures, and we are looking into that heavily.
Srini Penchikala currently works as Security Architect and has 17 yrs of experience in software product management.
Introducing SQLFire: a memory-optimized, high performance SQL database
Early Access! Download JBoss Developer Studio 5.0 now, with packages for Mac, Windows or Linux!
RDBMS to NoSQL: Managing the Transition
Combining Inspections, Static Analysis, Testing to Achieve >95% Defect Removal Efficiency
VMware vFabric SQLFire - Test drive the data management system with memory speed, horizontal scalability and a familiar SQL interface
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.
No comments
Watch Thread Reply