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 Abel Avram on Apr 13, 2010
In order to increase the performance of CPU-intensive web applications, Google is developing Native Client, a browser technology used to run native code. Unlike Netscape’s NPAPI or Microsoft’s ActiveX plug-in technologies, Native Client runs in a double sandbox prohibiting access to the underlying operating system.
One of the ways to increase the performance of web applications is to allow the browser to run native applications. Instead of running JavaScript code, such an approach could run native code which is normally faster that its JS correspondent. The problem is that such code raises serious security issues like accessing the data or creating undesired network connections. That is one of the main complaints about NPAPI and ActiveX. Native Client intends to solve that problem by running the native application in a special sandbox preventing access to the underlying operating system. Native apps would only be able to use the CPU and communicate with the Native Client environment.
Native applications will run in a double sandbox: an outer one which is similar to other sandboxes used by browsers, and an inner one based on Software-Based Fault Isolation theory and using x86 memory segmentation forcing the native code to abide within the confines of allocated memory segments.
The Native Client has these goals, according to Portable Native Client Executables (PDF) whitepaper:
1. Provide an ISA-neutral format for compiled NaCl modules supporting a wide variety of target platforms without recompilation from source.
2. Make it easy for NaCl developers to build, test and deploy portable executable modules.
3. Support the x86-32, x86-64 and ARM instruction sets initially, but make it straightforward to support other popular general-purpose CPUs in future.
4. Preserve the security and performance properties of Native Client.
To ease the life of developers, Native Client modules are to be written in an any language then compiled to LLVM (Low Level Virtual Machine) bitcode. LLVM is a compiler infrastructure providing ISA neutrality, so the original code does not need to be ported to various target platforms. The bitcode is further optimized and saved in a file. If a web page contains an <object> tag whose type is Native Client, the browser will create the corresponding environment and will download the LLVM file. The bitcode is then translated into native code and analyzed to make sure it does not intend to perform illegal operations. Then it is run to execute the supposedly intensive CPU operations. The developers will need to write only once and deploy on multiple architectures, and the intermediary LLVM layer makes it possible to run the module even on newer architectures that did not exist at the time the code was written extending the reach of the application.
Google has created Native Client packages for Windows, Max OS X, and Linux for x86-32, x86-64 and ARM, and it is open to address any architecture of interest. The benchmarks (PDF) show that Native Client apps run at 97% the speed of an unmodified application both on x86 and ARM. Native Client works on Firefox, Safari, Opera, and Google Chrome. Examples of applications running on Native Client are Quake, a classic game, XaoS, an interactive fractal viewer, and Lua – a scripting engine.
RDBMS to NoSQL: Managing the Transition
Adopting Git for the Enterprise: Risks and Considerations
Why NoSQL? A Primer on the Rise of NoSQL
Requirements, quality and test management e-Kit
The WebSphere Liberty Profile for Developers: An Introduction
A year ago, February, I decided to put my money where my mouth is, and write down publicly some predictions. I know, typically this is a recipe for embarrassment (witness Bill Gate's comments from the 80's, 90's about the future of Apple!).
However, my Prediction #1, while in hindsight pretty obvious, looks like its going to occur: www.opensourceconnections.com/2009/02/18/erics-...
While it may be a while before we are downloading a complete VMWare environment via Native Client to run in the browser, this is the first step!
I have my doubts that this will take off. I can see it being used on ChromeOS, but I have my doubts it'll gain widespread traction elsewhere. I think the real winner is LLVM. It's been getting quite a bit of press with the backing from Apple (relatively speaking of course). The more widespread use it gets the better it will be. Look at what has happened with webkit. I see much of the same here. Modern code base that is supposed to be very clean and easy to work with. Liberal license. Excellent performance. Very open for contribution. It's a very different beast than the JVM or CLR, but it is clearly becoming an important tool for cross platform compilers and virtual machines.
If web app can run as fast as native ones, with better and better network speeds, do we really need Windows X?
BTW, just saw a demo of Quake (yes, the game) on Chrome. It's unbelievable fluent!
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