Thursday, June 23, 2011

Windows Azure and Cloud Computing Posts for 6/22/2011+

image222 A compendium of Windows Azure, Windows Azure Platform Appliance, SQL Azure Database, AppFabric and other cloud-computing articles.

7image433    

Note: This post is updated daily or more frequently, depending on the availability of new articles in the following sections:

To use the above links, first click the post’s title to display the single article you want to navigate.


Azure Blob, Drive, Table and Queue Services

Martin Ingvar Kofoed Jensen (@IngvarKofoed) explained How to do a fast recursive local folder to/from azure blob storage synchronization in a 6/23/2011 post:

Introduction

imageIn this blob post I will describe how to do a synchronize of a local file system folder against a Windows Azure blob container/folder. There are many ways to do this, some faster than others. My way of doing this is especially fast if few files has been added/updated/deleted. If many is added/updated/deleted it is still fast, but uploading/downloadig files to/from the blob will be the main time factor. The algorithm I’m going to describe was developed by me when I was implementing a non-live-editing Window Azure deployment model for Composite C1. You can read more about the setup here. I will do a more technical blog post about this non-live-editing setup later.

Breakdown of the problem

The algorithm should only do one way synchronization. Meaning that it either updates the local file system folder to match whats stored on the blob container. Or updates the blob container to match whats stored in the local folder. So I will split it up into two. One for synchronizing to the blob storage and one from the blob storage.

Because the blob storage is located on another computer we can’t compare the time stamp of the blobs against timestamps on local files. The reason for this is that the two computers (blob storage and our local) clocks will never be 100% in sync. What we can do, is use file hashes like MD5. The only problem with file hashes is that they are expensive to calculate, so we have to this as little as possible. We can accomplish this by saving the MD5 hash in the blobs metadata and cache the hash for the local file in memory. Even if we convert the hash value to a base 64 string, holding the hash in memory for 10.000 files will cost less than 0.3 mega bytes. So this scales fairly okay.

When working with the Windows Azure blob storage we have to take care not to do lots request. Especially we should take care not to do a request for every file/blob we process. Each request is likely to take more than 50ms and if we have 10.000 files to process, this will cost more than 8 minutes! So we should never use GetBlobReference/FetchAttributes to see if the blob exists and/or get its MD5 hash. But this is no problem because we can use the ListBlobs method with the right options.

Semi Pseudo Algorithms

Lets start with some semi pseudo code. I have left out some methods and properties but they should be self explaining enouth, to get the overall understanding of the algorithms. I did this so it would be easier to read and understand. Further down I’ll show the full C# code for these algorithms.

You might wonder why I store the MD5 hash value in the blobs meta data and not in the ContentMD5 property of the blob. The reason is that ContentMD5 is only populated with a value if FetchAttribute is called on the blob, which will make the algorithm perform really bad. Ill do a blog post on the odd behavior of the ContentMD5 blob property in a later blog post.

Download the full source here: BlobSync.cs (7.80 kb).

Synchronizing to the blob

public void SynchronizeToBlob()
{
    DateTime lastSync = LastSyncTime;
    DateTime newLastSyncTime = DateTime.Now;

    IEnumerable allFilesInStartFolder = GetAllFilesInStartFolder();

    var blobOptions = new BlobRequestOptions { UseFlatBlobListing = true };
            
    /* This is the only request to the blob storage that we will do */
    /* except when we have to upload or delete to/from the blob */
    var blobs =
        Container.ListBlobs(blobOptions).
        OfType().
        Select(b => new
        {
            Blob = b,
            LocalPath = GetLocalPath(b)
        }).
        ToList();
    /* We use ToList here to avoid multiple requests when enumerating */

    foreach (string filePath in allFilesInStartFolder)
    {
        string fileHash = GetFileHashFromCache(filePath, lastSync);

        /* Checking for added files */
        var blob = blobs.Where(b => b.LocalPath == filePath).SingleOrDefault();
        if (blob == null) // Does not exist
        {
            UploadToBlobStorage(filePath, fileHash);
        }

        /* Checking for changed files */
        if (fileHash != blob.Blob.Metadata["Hash"])
        {
            UploadToBlobStorage(filePath, fileHash, blob.Blob);
        }
    }

    /* Check for deleted files */
    foreach (var blob in blobs)
    {
        bool exists = allFilesInStartFolder.Where(f => blob.LocalPath == f).Any();

        if (!exists)
        {
            DeleteBlob(blob.Blob);
        }
    }

    LastSyncTime = newLastSyncTime;
}

Synchronizing from the blob

public void SynchronizeFromBlob()
{
    IEnumerable allFilesInStartFolder = GetAllFilesInStartFolder();

    var blobOptions = new BlobRequestOptions
    {
        UseFlatBlobListing = true,
        BlobListingDetails = BlobListingDetails.Metadata
    };

    /* This is the only request to the blob storage that we will do */
    /* except when we have to upload or delete to/from the blob */
    var blobs =
        Container.ListBlobs(blobOptions).
        OfType().
        Select(b => new
        {
            Blob = b,
            LocalPath = GetLocalPath(b)
        }).
        ToList();
    /* We use ToList here to avoid multiple requests when enumerating */

    foreach (var blob in blobs)
    {
        /* Checking for added files */
        if (!File.Exists(blob.LocalPath))
        {
            DownloadFromBlobStorage(blob.Blob, blob.LocalPath);
        }

        /* Checking for changed files */
        string fileHash = GetFileHashFromCache(blob.LocalPath);
        if (fileHash != blob.Blob.Metadata["Hash"])
        {
            DownloadFromBlobStorage(blob.Blob, blob.LocalPath);
            UpdateFileHash(blob.LocalPath, blob.Blob.Metadata["Hash"]);
        }
    }

    /* Checking for deleted files */
    foreach (string filePath in allFilesInStartFolder)
    {
        bool exists = blobs.Where(b => b.LocalPath == filePath).Any();
        if (!exists)
        {
            File.Delete(filePath);
        }
    }
}
The rest of the code

In this section I will go through the missing methods and properties from the semi pseudo algorithms above. Most of them are pretty simple and self explaining, but a few of them are more complex and needs more attention.

LastSyncTime and Container

These are just get/set properties. Container should be initialized with the the blob container that you wish to synchronize to/from. LastSyncTime is initialized with DateTime.MinValue. LocalFolder points the to local directory to synchronize to/from.

private DateTime LastSyncTime { get; set; }      
private CloudBlobContainer Container { get; set; }
/* Ends with a \ */
private string LocalFolder { get; set; }

UploadToBlobStorage

Simply adds the file hash to the blobs metadata and uploads the file.

private void UploadToBlobStorage(string filePath, string fileHash)
{
    string blobPath = filePath.Remove(0, LocalFolder.Length);
    CloudBlob blob = Container.GetBlobReference(blobPath);
    blob.Metadata["Hash"] = fileHash;
    blob.UploadFile(filePath);
}


private void UploadToBlobStorage(string filePath, string fileHash, CloudBlob cloudBlob)
{
    cloudBlob.Metadata["Hash"] = fileHash;
    cloudBlob.UploadFile(filePath);
}

DownloadFromBlobStorage

Simply downloads the blob

private void DownloadFromBlobStorage(CloudBlob blob, string filePath)
{
    blob.DownloadToFile(filePath);
}

DeleteBlob

Simply deletes the blob

private void DeleteBlob(CloudBlob blob)
{
    blob.Delete();
}

GetFileHashFromCache

There are two versions of this method. This one is used when synchronizing to the blob. It uses the LastWriteTime of the file and the last time we did a sync to skip calculating the file hash of files that have not been changed. This saves a lot of time, so its worth the complexity.

private readonly Dictionary _syncToBlobHashCache = new Dictionary();
private string GetFileHashFromCache(string filePath, DateTime lastSync)
{
    if (File.GetLastWriteTime(filePath) <= lastSync && 
        _syncToBlobHashCache.ContainsKey(filePath))
    {
        return _syncToBlobHashCache[filePath];
    }
    else
    {
        using (FileStream file = new FileStream(filePath, FileMode.Open))
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            string fileHash = Convert.ToBase64String(md5.ComputeHash(file));
            _syncToBlobHashCache[filePath] = fileHash;

            return fileHash;
        }
    }
}

GetFileHashFromCache and UpdateFileHash

This is the other version of the GetFileHashFromCache method. This one is used when synchronizing from the blob. The UpdateFileHash is used for updating the file hash cache when a new hash is obtained from a blob.

private readonly Dictionary _syncFromBlobHashCache = new Dictionary();
private string GetFileHashFromCache(string filePath)
{
    if (_syncFromBlobHashCache.ContainsKey(filePath))
    {
        return _syncFromBlobHashCache[filePath];
    }
    else
    {
        using (FileStream file = new FileStream(filePath, FileMode.Open))
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            string fileHash = Convert.ToBase64String(md5.ComputeHash(file));
            _syncFromBlobHashCache[filePath] = fileHash;

            return fileHash;
        }
    }
}

private void UpdateFileHash(string filePath, string fileHash)
{
    _syncFromBlobHashCache[filePath] = fileHash;
}

GetAllFilesInStartFolder

This method returns all files in the start folder given by the LocalFolder property. It ToLowers all file paths. This is done because blobs names are case sensitive, so when we compare paths returned from the method we want to compare on all lower cased paths. When comparing paths we also use the GetLocalPath method which translates a blob path to a local path and also ToLowers the result.

private IEnumerable GetAllFilesInStartFolder()
{
    Queue foldersToProcess = new Queue();
    foldersToProcess.Enqueue(LocalFolder);

    while (foldersToProcess.Count > 0)
    {
        string currentFolder = foldersToProcess.Dequeue();
        foreach (string subFolder in Directory.GetDirectories(currentFolder))
        {
            foldersToProcess.Enqueue(subFolder);
        }

        foreach (string filePath in Directory.GetFiles(currentFolder))
        {
            yield return filePath.ToLower();
        }
    }
}

GetLocalPath

Returns the local path of the given blob using the LocalFolder property as base folder. It ToLowers the result so we only compare all lower cased paths due to that blob names are case sensitive.

private string GetLocalPath(CloudBlob blob)
{
    /* Path should only use \ and no /  */
    string path = blob.Uri.LocalPath.Remove(blob.Container.Name.Length + 2).Replace('/', '\\');

    /* Blob names are case sensitive, so when we check local */
    /* filenames agains blob names we tolower all of it */
    return Path.Combine(LocalFolder, path).ToLower();
}


Martin Ingvar Kofoed Jensen (@IngvarKofoed) described Azure cloud blob property vs metadata in a 6/5/2011 post (missed when posted):

image Both properties (some of them) and the metadata collection of a blob can be used to store meta data for a given blob. But there are a small differences between them. When working with the blob storage, the number of HTTP REST request plays a significant role when it comes to performance. The number of request becomes very important if the blob storage contains a lot of small files. There are at least three properties found in the CloudBlob.Properties property that can be used freely. These are ContentType, ContentEncoding and ContentLanguage. These can hold very large strings! I have tried testing with a string containing 100.000 characters and it worked. They could possible hold a lot more, but hey, 100.000 is a lot! So all three of them can be used to hold meta data.

imageSo, what are the difference of using these properties and using the metadata collection? The difference lies in when they get populated. This is best illustrated by the following code:

CloudBlobContainer container; /* Initialized assumed */
CloudBlob blob1 = container.GetBlobReference("MyTestBlob.txt");
blob1.Properties.ContentType = "MyType";
blob1.Metadata["Meta"] = "MyMeta";
blob1.UploadText("Some content");

CloudBlob blob2 = container.GetBlobReference("MyTestBlob.txt");
string value21 = blob2.Properties.ContentType; /* Not populated */
string value22 = blob2.Metadata["Meta"]; /* Not populated */

CloudBlob blob3 = container.GetBlobReference("MyTestBlob.txt");
blob3.FetchAttributes();
string value31 = blob3.Properties.ContentType; /* Populated */
string value32 = blob3.Metadata["Meta"]; /* Populated */

CloudBlob blob4 = (CloudBlob)container.ListBlobs().First();
string value41 = blob4.Properties.ContentType; /* Populated */
string value42 = blob4.Metadata["Meta"]; /* Not populated */

BlobRequestOptions options = new BlobRequestOptions 
   { 
      BlobListingDetails = BlobListingDetails.Metadata 
   };
CloudBlob blob5 = (CloudBlob)container.ListBlobs(options).First();
string value51 = blob5.Properties.ContentType; /* Populated */
string value52 = blob5.Metadata["Meta"]; /* populated */

The difference is when using ListBlobs on a container or blob directory and the values of the BlobRequestOptions object. It might not seem to be a big difference, but imagine that there are 10.000 blobs all with a meta data string value with a length of 100 characters. That sums to 1.000.000 extra data to send when listing the blobs. So if the meta data is not used every time you do a ListBlobs call, you might consider moving it to the Metadata collection. I will investigate more into the performance of these methods of storing meta data for a blob in a later blog post.


<Return to section navigation list> 

SQL Azure Database and Reporting

imageNo significant articles today.


<Return to section navigation list> 

MarketPlace DataMarket and OData

Digital Trowel posted a Digital Trowel Teams Up with Microsoft to Offer Company and Business Professional Data Enhancement on Windows Azure Marketplace press release on 6/23/2011:

image Digital Trowel is offering new services through the DataMarket on Microsoft’s Windows Azure Marketplace that allow customers to electronically send their Company and Business Professional records for refinement and enhancement, and receive cleansed and enriched data from Digital Trowel’s proprietary Powerlinx database.

The new Data as a Service (DaaS) solutions allow customers to search for Companies and Business Professionals in Powerlinx, one of the largest and most comprehensive databases of US private and public companies, and employed professionals. Powerlinx data is unmatched in its completeness, accuracy and timeliness, which is created by automatically and continuously extracting the latest information contained on the web and corroborating data from numerous sources, using Digital Trowel’s proprietary Identity Resolution toolkit. Powerlinx contains over 25M detailed company profiles, 25M executives including 5 million in-depth profiles with email addresses and phone numbers, and over 10 million company websites.

image “Microsoft is pleased to work with Digital Trowel, and to host their extensive business and professional database on the Windows Azure Marketplace,” said Moe Khosravy, director of program management in the cloud services team at Microsoft. “Digital Trowel is on the cutting edge of providing businesses with comprehensive, web and semantic information extraction technology, and we are proud to have their data available for use by Windows Azure customers."

“These are powerful services that make it easy for Marketing, Sales, Finance, Customer Service and IT executives to update and enhance customer and prospect data. Our premium content can be used with any application or platform through a simple API,” said Mr. Doron Cohen, CEO at Digital Trowel. “Utilizing Digital Trowel’s advanced information extraction technology, our data quality goes well beyond what is currently available in the market.”

According to Mr. Cohen, the company is both honored and excited to be one of the initial companies to have been selected by Microsoft to provide enhancement and refinement data services to Microsoft’s DataMarket customers. “This gives us an opportunity to reach out to new segments, including developers, content, information, and database personnel.”

About Digital Trowel
Digital Trowel is a next generation semantic web company that is disrupting traditional models of text analytics and data compilation. Its Israel-Based world-class text mining team is led by Prof. Ronen Feldman, one of the most recognized experts in the field of text mining, link analysis and the semantic analysis of data. Leveraging on its semantic technology, Digital Trowel has created the Powerlinx database of US companies and executives. Among the company’s other offerings is The Stock Sonar, a platform for tracking sentiment and business events on public US companies.

More information on Digital Trowel is available on our website http://www.digitaltrowel.com. Additional information on Powerlinx can be found on our product site http://www.powerlinx.com. Additional information on The Stock Sonar can be found on our product site http://www.thestocksonar.com.


Steve Yi announced MSDN Wiki Article: Q&A on Open Data Protocol (Odata) in a 6/22/2011 post to the SQL Azure team blog:

image MSDN has created a Q&A article on Odata (Open Data Protocol). OData applies web technologies such as HTTP, Atom Publishing Protocol (AtomPub) and JSON to provide access to information from a variety of applications, services, and stores. As web development continues to move forward, learning about new languages, like OData, will become more invaluable. Making an OData feed from a SQL Azure or SQL Server database is incredibly easy, usually requiring just a few lines of code.

imageLet me know your thoughts after reading the article.

Click here to open the article: Open Data Protocol Q&A.


Marcelo Lopez Ruiz (@mlrdev) reminded developers that datajs 0.0.4 is out - very important release! in a 6/21/2011 post:

image So, as per yesterday's announcement, datajs 0.0.4 is out. Go get it while it's fresh!

An important thing that's worth remarking is this is the last planned release before version 1.0.0. We don't have plans to add any new features or  change the API for the next release. Right now we're considering whether there's anything else that needs to be fixed, testing across various browsers & devices, building samples, spiffing up the docs, and generally giving people a few more days to give us feedback on whether things are looking the way they should be.

imageSo if you've got any issues or additional feedback that you think should be considered for the first release, this is a great time to let us know - we're listening more attentively than ever.


<Return to section navigation list> 

Windows Azure AppFabric: Access Control, WIF and Service Bus

Rick Garibay (@rickggaribay) reported what’s New in AppFabric June CTP: AppFabric Application in a 6/21/2011 post:

imageJust about a month following the AppFabric May CTP, which featured exciting new investments in AppFabric Service Bus Messaging, Microsoft has delivered a technology preview of the next wave of building composite solutions at enterprise scale with the release of the AppFabric June CTP (to be clear, there are no changes to AppFabric Service Bus in this release).

image72232222222Composite applications are the evolution afforded us by the advancements of contract-first development and the trend towards packaging units of reuse into discrete, autonomous and interoperable services, be they domain-specific or addressing cross-cutting concerns such as security or caching. By separating concerns into units of work and composing them iteratively into larger solutions, complex systems can be planned, managed and developed in bite size pieces aiding in both planning, operations and developer economics. This approach is valuable to the development of enterprise solutions regardless of where they are deployed, but combined with a model for stitching these units of reuse together and a robust runtime and execution model that provides additional capabilities as a platform, AppFabric Applications capture the truest distillation of the value that can be obtained by building on the Azure platform today.

Over a year and half ago, I asked whether .NET was a great disruptor of the decade and suggested that alone, .NET has certainly revolutionized the Microsoft developer platform, but combined with cloud computing has the potential to disrupt an entire industry. Today, AppFabric Applications give organizations investing in both cloud and hybrid a way to take full advantage of the Azure Service Model with first class support for WCF, WF Services and AppFabric Service Bus for building composite apps at very high enterprise scale. With caching, monitoring and persistence support equivalent to or better than Server AppFabric (parity of features has been a goal that I think Microsoft has kept and exceeded its promises on) and a scale out story that will form a new hosting paradigm across Appliance, Box and Cloud with AppFabric Container. This is the next evolution in the AppFabric platform vision and is a very important milestone.

To learn more, there is an excellent video on AppFabric TV on Channel9 with Karan Anand which provides a great overview here: http://channel9.msdn.com/Shows/AppFabric-tv/AppFabrictv-Announcing-the-Windows-Azure-AppFabric-June-CTP

In addition, Karan has posted a more detailed blog post here: http://blogs.msdn.com/b/appfabric/archive/2011/06/20/introducing-windows-azure-appfabric-applications.aspx

Kudos to Karan, my friend @mwinkle and team for a great preview into this exciting new way to provide an easy button for building composite services at enterprise scale.


<Return to section navigation list> 

Windows Azure VM Role, Virtual Network, Connect, RDP and CDN

imageNo significant articles today.


<Return to section navigation list> 

Live Windows Azure Apps, APIs, Tools and Test Harnesses

The Windows Azure Team reported a Content Update: Windows Azure Code Samples in a 6/23/2011 post:

Looking for code samples? Have you visited the Windows Azure Code Samples page? We have been working hard to add and update the code samples based on customer feedback. Please visit the Code Samples page and let us know not just what you think but also if there are other samples that you would like to see on this page.

We want to help you create great applications by providing a comprehensive list of code samples. To do this, we need your help to decide which samples should be at the top of our list to develop. Please visit the Windows Azure Code Samples Voting Forum to add and vote on the samples you want to see.

imagePlease click here to learn more about options for providing feedback on Windows Azure.


Steve Fox announced Developing SharePoint Applications using Windows Azure Set to Publish on July 7th in a 6/23/2011 post:

image I’m sure if you’re reading this you probably know that one of Microsoft’s key directions in the future is Windows Azure; I’ve been writing and presenting on this for a while and have also been discussing how you can integrate SharePoint 2010 with Windows Azure in various ways. If bringing these two technologies together is new to you, though, check out this earlier post.

imageAs an extension of these efforts, I’m pleased to announce that Developing SharePoint Applications using Windows Azure is set to go live on July 8th. This book is very much hands-on and driven by walkthroughs; not so much theoretical. It is an outcrop of me exploring how these two technologies integrate and bringing this to you so you can can get your feet wet.

You can order your copy from here. If you’re wondering what’s inside the book, here’s a glimpse at the TOC.

    • Chapter 1 Welcome to SharePoint and Windows Azure
    • Chapter 2 Getting Started with SharePoint and Windows Azure
    • Chapter 3 Consuming SQL Azure Data
    • Chapter 4 SQL Azure and Advanced Web Part Development
    • Chapter 5 Using Windows Azure BLOB Storage in SharePoint Solutions
    • Chapter 6 Integrating WCF Services and SharePoint
    • Chapter 7 Using SQL Azure for Business Intelligence
    • Chapter 8 Using the Windows Azure Service Bus with SharePoint
    • Chapter 9 Using Windows Azure WCF Services in SharePoint and Office
    • Chapter 10 Securing Your SharePoint and Windows Azure Solutions

The goal for the book is not only to drive you to practice coding/integrating SharePoint and Windows Azure but also to work hand-in-glove with the SharePoint and Windows Azure Developer Training Kit, which you’ll also see evolve over the coming weeks and months.

I’m very excited this project is out and look forward to evolving the code samples and kit in the future.

We’ll be shipping a limited supply to WPC, so if you’re attending make sure you stop by the SharePoint and Windows Azure booth to get your free copy!!


Mary Jo Foley (@maryjofoley) reported Microsoft to work with Joyent to port Node.js to Windows, Azure in a 6/23/2011 post to her ZDNet All About Microsoft blog:

image Microsoft is “formally contributing resources” toward porting Node.js to Windows in partnership with Joyent, according to a June 23 blog post on Nodejs.org.

The native port to Windows is underway, and requires a “rather large modification of the core structure,” according to the post, authored by Ryan Dahl, the creator of node. The ultimate goal is to create an official binary node.exe release on Nodejs.org, “which will work on Windows Azure and other Windows versions as far back as (Windows Server) 2003,” the post added.

image(There’s word so far as to when the work is likely to be completed or exactly what kinds of resources Microsoft is offering. I’ve asked Microsoft for comment on both of these issues)

Update: Microsoft isn’t providing a target delivery date or specifics about the dollar/people commitment it is making. Here’s the official statement from Claudio Caldato, Principal Program Manager, Interoperability Strategy Team:

“As we are still in the early stages of this project, we don’t have a release date as yet. While we want to have great Windows support as soon as possible, our main goal is to ensure quality and performance so that Windows developers can rely on a solid and reliable NodeJS runtime environment. We are working with the Node.js open source community and, as Joyent said on their blog, Microsoft is contributing Engineering resources to make this happen. We want to make sure that Windows is a great platform for all developers.”

Node.js a command line tool that lets developers run JavaScript programs by typing ‘node my_app.js.” The JavaScript is executed by the V8 JavaScript engine — “the thing that makes Google Chrome so fast,” as explained on Debuggable.com in its “Understanding Node.js” post. Node provides a JavaScript API for accessing the network and file system. It is particularly suited for development of scalable networked programs where low response times and high concurrency are important.

Currently, to use Node.js on Windows, developers need to run a virtual machine with Linux.

There are a number of tech companies already using/experimenting with Node.js. More from the Debuggable.com post:

“Yahoo is experimenting with node for YUI, Plurk is using it for massive comet and Paul Bakaus (of jQuery UI fame) is building a mind-blowing game engine that has some node in the backend. Joyent has hired Ryan Dahl (the creator of node) and heavily sponsors the development. Oh, and Heroku just announced (experimental ) hosting support for node.js as well.”

In other Azure developer news, Microsoft made available for download this week the June 2011 Community Technology Preview (CTP) test build of the Windows Azure Plug-in for Eclipse with Java. The Plug-in is targeted at Eclipse users interested in creating and configuring deployment packages of their Java applications for the Windows Azure cloud, according to Microsoft.

(Thanks to @smarx for the heads up, via Twitter, on the Node.js news.)


Martin Sawicki claimed Building Java applications on Windows Azure gets easier with the new version of the Eclipse plugin in a 6/23/2011 post to the Interoperability @ Microsoft blog:

I’m pleased to announce that the June 2011 CTP (Community Technology Preview) of the Windows Azure Plugin for Eclipse with Java is now available for download. As the project manager and designer behind our Java tooling efforts for Windows Azure, I invite you to take a look at our latest release and share your feedback to help us make further progress in helping Java developers take advantage of the Windows Azure cloud. At the time this blog goes live, I'll be sleeping, but my colleague Gianugo Rabellino would have announced the new CTP during his keynote "Behind the scenes: Microsoft and Open Source" at the Jazoon conference in Zurich.

imageThis plugin is intended to help Eclipse users create and configure deployment packages of their Java applications for the Windows Azure cloud. Its key features include:

  • Windows Azure project creation wizard
  • Helpful project structure
  • Sample utility scripts for downloading or unzipping files, or logging errors in the startup script when running in the cloud
  • Shortcuts to test your deployment in the Windows Azure compute emulator
  • Ant-based builder
  • Project properties UI for configuring Windows Azure roles (instance count, size, endpoints, names, etc)
  • [New in this CTP] UI for easy remote access configuration for troubleshooting purposes, including ability to create self-signed certificates
  • [New in this CTP] Schema validation and auto-complete for *.cscfg and *.csdef files

To install, just point Eclipse’s “Install New Software…” feature at http://webdownload.persistent.co.in/windowsazureplugin4ej/. Also make sure to install al the prerequisites, as explained in detail here or here. For those who have already been playing around with our Ant-based command-line tools called Windows Azure Starter Kit for Java, note that your Starter Kit projects are compatible with this plugin, in fact the plugin builds on top of the Starter Kit.

We’re continuously working on new tutorials and feature additions in our Windows Azure tooling for Java developers, so keep checking back with our main portal at http://java.interopbridges.com/cloud for further updates.

Martin is a Senior Program Manager on the  Interoperability Strategy team.


The Windows Azure Team posted Announcing Free Ingress for all Windows Azure Customers starting July 1st, 2011 in a 6/23/2011 post:

imageToday we’re pleased to announce a change in pricing for the Windows Azure platform that will provide significant cost savings for customers whose cloud applications experience substantial inbound traffic, and customers interested in migrating large quantities of existing data to the cloud. For billing periods that begin on or after July 1, 2011, all inbound data transfers for both peak and off-peak times will be free.

Customers and partners with whom we’ve shared this announcement are excited by this change. The Press Association, the UK’s national news agency, supplies sports editorial and data services through Press Association Sport. As the official data partner of the UK professional football leagues, Press Association Sport plans to upload large amounts of text, data and multimedia content every month into Windows Azure and serve it across the global Microsoft network. Press Association Chief Technology Officer Andrew Dowsett explains the benefit to their business this way, “Estimating the amount of data we will upload every month is a challenge for us due to the sheer volume of data we generate, the fluctuations of volume month on month and the fact that it grows over time. Eliminating the cost of inbound data transfer made the project easier to estimate and removes a barrier or uploading as much data as we think we may need.”

Another customer, David MacLaren, president and CEO of VRX Studios, describes the pricing change as, “a significant step in making Windows Azure more affordable for companies of all sizes. Whether a company is dealing with megabytes, gigabytes or terabytes, eliminating data ingress fees will significantly reduce their research and development, testing and operational costs.”

We hope that changes such as these continue to increase the value of the Windows Azure platform for our customers.


Sumit Mehrota asserted “By adopting cloud solutions for development and test, software teams can significantly reduce cycle times and lower operating costs” in a deck for his Five Steps to Agile Development in the Cloud article for DevX of 6/22/2011 (requires site registration):

Development and test teams are crunched for time just as much as they are crunched for resources. According to a recent survey, 'developing applications faster' is a top application delivery priority. The need for speed is amplified when employing an Agile development methodology, as the approach calls for shorter release cycles focused on specific customer problems.

In the brave new world of Agile development, development and test (dev/test) teams are challenged even further when dealing with older releases of a particular application. For example, imagine that a critical security issue surfaces in your application. In the past, dev/test teams would:

  1. Put the current project on hold
  2. Focus all resources on the old release
  3. Troubleshoot and fix the issue
  4. Test
  5. Deploy

This 'old school' approach "freezes" developer and test time as well as computing resources allocated for the current application release. The Agile development methodology adopted for the new release sometimes comes to a stop or is no longer agile.

By adopting cloud solutions for development and test, software teams can significantly reduce cycle times and lower operating costs. With the cloud model, developers and testers can create and test multiple environments instantly, parallelize development tasks, and conduct bug fixing or testing on older releases as well as new releases simultaneously.

Editor's Note: The author, Sumit Mehrotra, is director of product management at Skytap, a provider of cloud automation solutions. We have selected this article for publication because we believe it to have objective technical merit.

Implementing Agile Software Development with the Cloud Model
How do you apply this new cloud model to your team in concert with Agile processes? Here are five practical steps:
Step 1: Use development and test "templates" for faster provisioning.

A solid product, or in our case, application, is built with basic components that possess well-defined interfaces. Like any great musician, developers are able to create masterful and innovative products by combining the key components of a stack and following a precise tune. Using this philosophy, think about creating entire application stacks as 'templates' to empower your development and test teams to create entire application stacks quickly without serious time or effort.

At the center of any cloud technology is virtualization at all levels. The template model should allow for dev/test templates consisting of virtual machines (VMs), networks, storage, installed applications, and security policies all composed as a provisioning unit.

To accomplish even faster provisioning, development and test teams can compile a library of ready-to-use templates that consist of components of an application -- for example, the application server tier, web tier or database tier -- and then combine each asset as needed to provision the entire application for a specific release. Keep in mind to stock your library with the latest versions of these components including all proper security patches applied.

Step 2: Create a 'golden version' for each release.

Along with creating VMs, building an application involves a number of difficult activities, such as identifying network connections, firewall policies, etc. Thus, provisioning an entire application can be a tedious and somewhat time-intensive task, especially when starting from scratch.

The cloud can help developers and testers to provision a complete environment or application quickly and easily. By defining the 'golden version' of each release or release milestone, developers can return to the assigned version on demand, as often as needed. Test engineers can provision multiple copies of any given release and parallelize test environments. …

Read more: Next Page: Collaboration in the Cloud for Dev and Test


The Windows Azure Team posted Just Announced: Mosaic by Tribune for Windows 7 Powered by Windows Azure on 6/21/2011:

As announced today in the post, ““Tribune Releases Mosaic App for Windows 7”, on the Windows Team Blog, Tribune Company today unveiled the final release of Mosaic by Tribune. Mosaic is a free, customizable application that offers a rich news reading experience optimized for Windows 7 touch-capable devices including Slate PCs. Mosaic enables readers to enjoy aggregated premium content from Tribune’s own world-class news operations, including the Los Angeles Times, Chicago Tribune, Baltimore Sun and many others. It also allows readers to integrate RSS feeds from their favorite sites and blogs to personalize their news experience.

imageMuch of the content and user data for Mosaic by Tribune is powered by Windows Azure, making Tribune one of the largest Windows Azure implementations and storage accounts worldwide.

Though optimized for Windows 7 touch-capable devices, Mosaic by Tribune will also run on any computer with Windows XP, Windows Vista or Windows 7. Mosaic is also available as a companion experience on the Windows Phone platform, offering the same rich news reading features and functionality found on Mosaic for Windows.

Download Mosaic by Tribune here. Read more about Mosaic by Tribune, including a hands-on through of the application, in the Windows Team Blog post here.


Riccardo Becker (@riccardobecker) described Playing with IoC, Enterprise Library 5.0 and Azure in a 6/21/2011 post:

After some discussion with a fellow tweeter (thanks to Amit Bahree @bahree) I decided to write a bit on IoC, DI combined with the full force of Azure. Recently i wrote about the principle of a "Generic Worker", being a worker role on Azure that is able to dynamically load and unload assemblies and fully utilize every dollar you pay for Azure. The solution was pretty straightforward.

The next step in the Generic Worker is to use IoC and DI and fully decouple workerrole plumbing from the actual functionality. Using IoC also makes it easy to configure your workerrole(s) and e.g. dynamically add/remove aspects (AOP) to your applications. The power of AOP is weaving the mixed behaviors together. Apply different aspects to change behavior and functionality of classes without using techniques like inheritance.

The first step i take is to extend the basic Unity behaviour and write my own Resolve method to resolve types not loaded in my appdomain but actual types that reside in my assembly blob storage. Follow the next steps to accomplish completely uncoupled software that makes use of Blob Storage and Unity.

1. Create a classlibrary that contains the interfaces for your classes to be loosely coupled.

public interface ICalculation
{
    int Addition(int a, int b);
}

2. Create a classlibary that has a concrete implementation of this interface. This class implements one or more of the interfaces you defined in the classlibrary you created in step 1.

public class DefaultCalculation : ICalculation
{
    public int Addition(int a, int b)
    {
    return a + b;
    }
}

3. Build your classlibrary containing the implementation. Take the assembly and upload it somewhere in your Azure Blob-o-sphere Storage. See this screenshot



You can see the assembly is in my assemblyline storage account and assemblies container.

4. Extent the Unity container with your own method that Resolves in a different way. Not trying to find implementations somewhere in current appdomain but actually take assemblies from Blobstorage and load them. This code runs in my workerrole that's supposed to be awfully generic.

using (IUnityContainer container = new UnityContainer())
{
    container.ResolveFromBlobStorage();
}

I will update my next code with a fancy LINQ query but no time right now.


public static void ResolveFromBlobStorage<T>(this IUnityContainer container) where T : class
{
CloudStorageAccount csa = new CloudStorageAccount(
new StorageCredentialsAccountAndKey("assemblyline", "here goes your key"),
true);

//take the assemblies from Blob Storage
CloudBlobContainer cbc = csa.CreateCloudBlobClient().GetContainerReference("assemblies");
var assemblies = (from blobs in cbc.ListBlobs()
select blobs);

foreach (IListBlobItem assembly in assemblies)
{
byte[] byteStream = cbc.GetBlobReference(assembly.Uri.AbsoluteUri).DownloadByteArray();
//load the assembly from blob into currentdomain.
AppDomain.CurrentDomain.Load(byteStream);

foreach (Assembly currentAssembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in currentAssembly.GetTypes())
{
if (!typeof(T).IsAssignableFrom(type) || type.IsInterface)
continue;

container.RegisterType(typeof(T), type, new ContainerControlledLifetimeManager());
}
}
}
After this code the Unity container is extended with the method ResolveFromBlobStorage.
Step 5 and final:

using (IUnityContainer container = new UnityContainer())
{
container.ResolveFromBlobStorage<ICalculation>();
ICalculation math = container.Resolve<ICalculation>();
Console.WriteLine(String.Format("adding 2 and 3 makes : {0}", math.Addition(2 , 3).ToString()));
}

The ResolveFromBlobStorage method makes it possible to have concrete implementations outside of my solution somewhere and stuffed away in blobstorage. I only need the interface that's it!


Tony Bailey (a.k.a., tbtechnet) posted Plugging in the Numbers to the Windows Azure Pricing Calculator on 6/20/2011:

I get asked quite a bit about where to start with the Windows Azure pricing calculator http://www.microsoft.com/windowsazure/pricing-calculator/

It’s a valid question, particularly for developers that are completely new to the concept of running their applications on the Windows Azure platform.

I sat down my friend Joe who had to go through a pricing analysis before committing to Windows Azure.

Joe views the Windows Azure benefits of integration with .NET and Microsoft tools and the ability to support e-commerce apps that must scale as critical.

Joe’s OneWay Commerce application runs its database, content hosting, and backend application all on Windows Azure and Joe is able to scale to match demand from their Facebook customers.

This is the data Joe plugged in to the Windows Azure pricing calculator to get started with their application.

The numbers are probably a bit more complex now given how well Joe is doing, but you get the idea of what Joe started with.

Azure Pricing

Don’t forget that data ingress for Windows Azure and SQL Azure is free all day on and after 7/1/2011.


<Return to section navigation list> 

Visual Studio LightSwitch

Sheel Shah posted Tips and Tricks for Using [Visual Studio LightSwitch’s] Screen Designer (Sheel Shah) to the Visual Studio LightSwitch Team blog on 6/23/2011:

The screen designer in Visual Studio isn’t a typical forms design tool. We strove to make it simple to get started using some predefined templates. However, it’s also pretty easy to customize the output of those templates to get exactly the screen you want. In this post, I’m going to walk through some tips and tricks to get the most out of our screen designer.

Blank Screen Template

LightSwitch does not ship with a blank screen template out of the box, but it is relatively simple to start with a blank screen in order to completely control the screen layout yourself. In the Add Screen Dialog, select the Editable Grid template but do not select any screen data. This will result in an empty screen.

image

image

You can now add any data you need for your screen using the Add Data Item Dialog. For example, I can add a collection of Customers to my screen.

image

Adding Static Text to the Screen

Most LightSwitch controls provide a built-in label that can be controlled using the Label Position property. However, there are definitely situations in which you may just need to display some text on the screen. First, add a new String data item to the screen named MyLabel.

image

In your screen's InitializeDataWorkspace method, set the value of the label string.

VB:

Private Sub EditableCustomersGrid_InitializeDataWorkspace(saveChangesTo As List(Of Microsoft.LightSwitch.IDataService))

' Write your code here.

Me.MyLabel = "My Label Text"

End Sub

C#:

partial void EditableCustomersGrid_InitializeDataWorkspace(List<IDataService> saveChangesTo)

{

this.MyLabel = "My Label Text";

}

Now you can drag the MyLabel property onto your screen's layout where needed. Change its control type to a Label and set the Label Position to Collapsed.

image

image

Similarly you can also add static images to screens. Take a look at Beth’s post that explains how to do this: Adding Static Images and Text on a LightSwitch Screen.

Using the Rows Layout

The rows layout will divide available space into a set of rows. It also allows you to control how much space is assigned to each row. This is controlled through a combination of the Vertical Alignment and Height properties for each child of the Rows Layout.

image

Directly specifying the height will assign that amount vertical space to the row. Any rows that have Stretch specify will use up the remaining room. To divide space among the stretch rows, LightSwitch will use the Weighted Row Height property. For example, if each row has its Weighted Row Height set to 1, each row will receive the same amount of vertical space. However, if one row has a Weighted Row Height set to 2, it will receive twice as much vertical space as those set to 1. This is similar to star (*) sizing in the Silverlight Grid.

image

image

To cause a particular row to only take up the amount of space that it needs its Vertical Alignment must be set to Top. This will ensure that LightSwitch uses the Height property to determine the size of the row.

image

Using the Columns Layout

The columns layout behaves similarly to the Rows Layout. Instead of dividing available space into a set of rows, it will divide it into columns. The Horizontal Alignment and Width properties behave similarly to Vertical Alignment and Height.

Using the Table Layout

Many layouts can be created with a combination of the Rows Layout and Columns Layout. For example, the List and Details screen uses the Columns Layout as its root. This Columns Layout contains two children - and therefore has two columns which are Rows Layouts.

image

However, a problem arises when you need information in columns to also align vertically. If you have two independent Rows Layouts, there is no guarantee that each row will be the same height.

image

In this example, the picture field causes any rows below it to not be aligned with the rows in the left column. The Table Layout will address this issue by aligning multiple rows of information across columns. Changing the columns layout to a Table Layout and each child to a TableColumn Layout will result in the following screen. The height of the first row is shared across both columns, resulting in a screen that is aligned correctly.

image

This is better, but ideally, String Field1 and String Field 2 would be moved up. Each Cell in a TableColumn Layout has a Row Span property. We can specify that the Picture field spans three rows, resulting in a more ideal screen. Row Span is similar to the Silverlight Grid Row Span property.

image

Using a Modal Window

To add a modal window to your screen, add a new group and change its control type to Modal Window. Any children of this group will then be displayed in the modal window. By default, this group will be displayed as a button on the screen. Clicking on this button will open the window.

image

image

In many situations, you don't want a modal window to be displayed as a button. Instead, it is shown based on some other action by the user (for example, clicking on an edit button in the data grid). To turn off the button, select the modal window and set the Show Button property to false.

image

There will no longer be a button to open the modal window. It can only be opened programmatically. Typically, I will place any modal windows that are launched programmatically as the last groups in the screen. This will ensure that they don't interfere with the rest of the screen's layout.

image

To programmatically open or close modal windows, each LightSwitch screen contains OpenModalWindow and CloseModalWindow functions. These take the name of the modal window to be opened or closed. For example, if our modal window is called "MyModalWindow", the following code will open the modal window.

VB:

Me.OpenModalWindow("MyModalWindow")

C#:

this.OpenModalWindow("MyModalWindow");

Using the CloseModalWindow function, it is relatively simple to build and Ok/Cancel modal dialog. Add two buttons to your modal dialog, called Ok and Cancel. In the code for these buttons call CloseModalWindow and take the appropriate Ok or Cancel action.

image

image

In my next post I’ll show you how you can create your own custom Add and Edit dialogs using some of the techniques I just discussed.


Beth Massi (@bethmassi) explained How to Create a Simple Audit Trail (Change Log) in LightSwitch in a 6/22/2011 post:

image A common requirement in business applications is to capture changes to data records and save them in a history table of some sort. For instance, when an employee’s HR record is changed, you need to log the original and new field values as well as who made the changes so that there is a visible audit trail. Typically you want to log changes to records that are updated, inserted and deleted. In this post I’ll show you how you can create a simple audit trail to track changes to records in Visual Studio LightSwitch.

Create a Logging Table

image222422222222The first thing to do is to create a table that stores the changes. Let’s say we already have an application with an Employee table. We want to be able to capture any updates, inserts or deletes to this table. The first thing to do is add a table that captures the changes. Add a new table to your application using the Data Designer. I’ll name it EmployeeChange and it will have the following fields:

image

Then in the property window under the Appearance section, set the Summary Property of the EmployeeChange table to the “Updated” field. Next we need to add a new relationship to this table from our Employee table. Click the “Relationship…” button at the top of the designer and in the To column select the Employee table. Then set the Multiplicity to “Zero or One”. This means that our change log record doesn’t require an employee parent record. Why not? Well because in this example we want to also track deleted record information but we want to allow the deletion of the actual record in the Employee table. So we also need to set the On Delete Behavior to “Dissociate” so that when the employee record is deleted, our audit trail remains intact.

image

So here’s what the schema looks like now.

image

Write Code to Capture Changes

Next we need to write some code into the save pipeline on the data service to intercept when inserts, updates and deletes occur and write appropriate values to the EmployeeChange table. To do this, double-click on the Employee table in the Data Designer and then drop down the “Write Code” button in the top right. There you will see in the General Methods section _Updated / ing, _Inserted / ing, _Deleted / ing methods.

image

Select _Inserting, _Updating, and _Deleting methods to create the method stubs on your data service. Next we need to write some code that selects the storage properties of the Employee. Storage properties are the actual fields on the underlying table. In other words, we don’t want to include any calculated properties. For Employee records that are updated, we also need to compare the original and current values to determine if we should record a change. The way we do this is by drilling into the “Details” property on the Employee entity. Here you can get at a lot of the underlying framework methods and properties of LightSwitch’s data runtime. In our case I’m just recording the new and original values as strings by concatenating each field’s name and value and separating them by carriage return/line feeds (vbCrLf). You can choose to do this differently depending on how you want to log information to your change log table.

Private Sub Employees_Updating(entity As Employee)
   Dim change = entity.EmployeeChanges.AddNew()
   change.ChangeType = "Updated" change.Employee = entity
   change.Updated = Now()
   change.ChangedBy = Me.Application.User.FullName

   Dim newvals = "New Values:" 
Dim oldvals = "Original Values:"
For Each prop In entity.Details.Properties.All(). OfType(Of Microsoft.LightSwitch.Details.IEntityStorageProperty)() If prop.Name <> "Id" Then
If Not Object.Equals(prop.Value, prop.OriginalValue) Then
oldvals += String.Format("{0}{1}: {2}", vbCrLf, prop.Name, prop.OriginalValue) newvals += String.Format("{0}{1}: {2}", vbCrLf, prop.Name, prop.Value) End If
End If
Next
change.OriginalValues = oldvals change.NewValues = newvals
End Sub
Private Sub Employees_Inserting(entity As Employee)
    Dim change = entity.EmployeeChanges.AddNew()
    change.ChangeType = "Inserted" change.Employee = entity
    change.Updated = Now()
    change.ChangedBy = Me.Application.User.FullName

    Dim newvals = "Inserted Values:" 
For Each prop In entity.Details.Properties.All(). OfType(Of Microsoft.LightSwitch.Details.IEntityStorageProperty)() If prop.Name <> "Id" Then
newvals += String.Format("{0}{1}: {2}", vbCrLf, prop.Name, prop.Value) End If
Next
change.NewValues = newvals
End Sub
Private Sub Employees_Deleting(entity As Employee)
    Dim change = entity.EmployeeChanges.AddNew()
    change.ChangeType = "Deleted" change.Updated = Now()
    change.ChangedBy = Me.Application.User.FullName

    Dim oldvals = "Deleted Values:" 
For Each prop In entity.Details.Properties.All(). OfType(Of Microsoft.LightSwitch.Details.IEntityStorageProperty)() If prop.Name <> "Id" Then
oldvals += String.Format("{0}{1}: {2}", vbCrLf, prop.Name, prop.Value) End If
Next
change.OriginalValues = oldvals End Sub
Create a Screen to View the Audit Trail

Last but not least we need to create a screen to view the audit trail. You don’t want users to modify these records, just view them, so it’s best to just pick the Search Data Screen template.

image

Then in the screen designer, select the Updated field and uncheck “Show as Link” so that users cannot modify records. Assuming that you already have an employee screen defined, hit F5 to run the application and open your employee screen. Make some changes to a current record, add a new one and delete another one to test all three scenarios. Then open your audit trail search screen and take a look at the results. You should see something similar to this:

image

If you needed to track changes on multiple tables then you could add relations from the single audit trail table to other tables the same way as Employee in this example. Experiment with the code provided in order to log changes exactly how you want. I hope this gives you some ideas on how you can create simple audit trails for your LightSwitch applications.


Return to section navigation list> 

Windows Azure Infrastructure and DevOps

The Windows Azure Team reported Windows Azure Wins Best Cloud Service at Cloud Computing World Series Awards in a 6/23/2011 post:

Earlier this week the Windows Azure platform was named Best Cloud Service at the Cloud Computing World Forum in London. Now in its third year, the Cloud Computing World Series Awards celebrate outstanding achievements in the IT market. This year’s winners were selected by an independent panel of industry experts.

image“It’s fantastic for us to see this type of recognition for the Windows Azure platform. We’re seeing companies creating business solutions in record times, reinforcing the new possibilities created by the cloud,” said Michael Newberry, Windows Azure lead, Microsoft UK.

Click here to read the press release about this award.

Nice to see after writing and updating my Windows Azure Platform Maligned by Authors of NetworkWorld Review post on 6/22/2011 and 623/2011.


Michael Coté (@cote) posted Disruption with dev/ops and PaaS Unicorns to his RedMonk blog on 6/22/2011:

imageBack from Velocity, John and I catch up on things going on in the cloud and dev/ops space. We try to iron out what exactly the change and point of dev/ops is and how businesses could use it. The episode is capped of with a discussion about PaaSes, two possible types of them.

image Download the episode directly right here, subscribe to the feed in iTunes or other podcatcher to have episodes downloaded automatically, or just click play below to listen to it right here:

Show Notes
  • What is dev/ops? workshops – at Atlanta, Portland – who comes to these things? Mostly web startup guys, but some enterprise people.
  • imageWhat’s with the Microsoft interest? They sponsored the Atlanta workshop. [Emphasis added.]
  • On Microsoft and cloud dev - Concero, the VisualStudio pickling tool. Opalis is another interesting asset. [Emphasis added.]
  • The rising need for orchestration in dev/ops? Which brings in DTO Solutions’ Run Deck - John gives an overview.
  • How about OSLC? Anyone know about that?
  • VisibleOps stuff, researching IT management in practice.
  • What are the metrics for success and failure in dev/ops? Lots of MTTR, expecting failure.
  • In a failure-driven world: never mind that premature optimization is the devil’s root canal business.
  • If you have to move from Amazon to Rackspace, how long would it take?
  • A painful problem statement: you can’t be agile with current IT Management. Also: it’s not how much it costs you, it’s how much you make.
  • DRW pairing developers and traders at a desk. Making it a little bluer. “They can get things in front of customers really fast.”
  • Adaptive Business Plans, Evolutionary Transactions – The only reason a business wants to be your friend is to get your money.
  • Find the moribund businesses, revitalize them with more agile IT.
  • How was Velocity?
  • Some PaaS talk – “bring your own PaaS,” etc. And John likes “the private PaaS.” Or is it “build your own PaaS”? Like, using a Chef cookbook to use RabbitMQ. And then “purpose driven cloud” from John.
  • John at Build a Cloud day in Chicago this weekend.

Disclosure: see the RedMonk client list for clients mentioned.


<Return to section navigation list> 

Windows Azure Platform Appliance (WAPA), Hyper-V and Private/Hybrid Clouds

David Linthicum (@DavidlLinthicum) asserted “Adding virtualization to your data center does not make it a private cloud, so server huggers needs to move beyond that approach” in a deck for his Gartner endorses private clouds -- but not how IT usually defines it post of 6/23/2011 to InfoWorld’s cloud computing blog:

image The message from Gartner analysts was "go private cloud" last week at the Gartner IT Infrastructure, Operations & Management Summit 2011 conference. However, the same analysts emphasized that building a private cloud is more than just adding virtual machines to physical servers, which is already happening with dizzying speed in the enterprise.

image This is refreshing to hear, considering that my consulting life has revolved around explaining the differences between virtualization and cloud computing lately. To be clear, adding virtualization does not make it a cloud. Clouds, including private clouds, don't require virtualization, but they do need self-provisioning, use-based accounting, multitenancy, and APIs, among other cloud attributes.

imageThe trouble is that hardware and software vendors have gone gaga over the concept of private clouds, using it as a new argument for you to purchase more IT gear. There's a been a ton of confusion around just what a private cloud is and does, as they push the same old stuff rebranded as "cloud." I find that most enterprise technology consumers don't know what a private cloud really is, but instead latch on to the idea they can continue to hug servers. We love our servers.

In additional good news, Gartner is urging enterprises to put together a long-term strategy for the private cloud. I would extend this and urge you to create a holistic cloud computing strategy that includes private clouds. This means defining your existing as-is state, including all applications and data, and then defining the right target platforms, including the use of cloud computing platforms: private, hybrid, and public. Finally, define a road map and migration plan that needs to occur over time.

If this seems easy, it's not. The ability to transform the enterprise to more effective and efficient platforms using cloud computing is a multiyear process, and it will require new resources and funding in the short term. Moreover, the hype and confusion around the term "private cloud" is driving many enterprises in the completely wrong direction and preventing them from finding the true value.

Gartner has this one right. But until you create your own strategy and obtain a deeper understanding of the technology, private clouds -- or any clouds -- won't do you much good.


Impanema Research published a Research Report: Majority of enterprises to move to hybrid cloud by 2015 as a 6/22/1011 press release:

image New research from Ipanema Technologies and Orange Business Services today reveals that 66% of enterprises plan to move to a hybrid cloud environment within the next four years. The study of 150 enterprise CIOs and IT Directors finds that a large majority plan to combine public cloud and private data centres to deliver business applications – rather than opting for a cloud only (17%) or private data centre only approach (17%). Results also highlight trends in cloud networking, delivery, adoption and barriers to adoption.

Networking in the cloud

To support the hybrid cloud model over 63% of businesses surveyed plan to use a mixture of traditional MPLS-based corporate networks and cost-effective IP-VPNs. With almost 70% of companies citing cost reduction as the primary driver for selecting a cloud project, moving to a hybrid networking strategy emerges as a popular route to control IT budgets.

Cloud delivery

Despite the increased complexity associated with adopting a hybrid networking model, surprisingly over 50% of companies plan to deploy and manage their on-going cloud program themselves, using their own IT department. Just 31% plan to outsource this process to external service providers to manage with the remainder not planning to adopt the cloud.

Cloud adoption and barriers to adoption

By the end of 2012 50% of companies are set to have a private cloud (completely virtualised central datacentre) in place. Almost a third have already implemented a private cloud with a further 20% expecting to have done so within the next two years. Security was seen as the primary barrier to cloud adoption with 58% of respondents believing security concerns prevented greater implementation. Performance of the cloud model was also viewed as a challenge with 39% of respondents viewing performance issues as a barrier to further adoption.

Béatrice Piquer, Marketing Director for Ipanema Technologies said of the research “From this research it’s clear that a combination of cloud and private data centres is becoming the primary model for enterprise IT. The cloud can bring great benefits but a hybrid model will add complexity as applications are delivered from a variety of locations across different networks.” She continued: “IT leaders taking on this challenge need to view the WAN as a strategic asset and guarantee performance at the application level.”

About the research

The research study is a collaboration between Ipanema Technologies and Orange Business Services in order to understand the objectives and challenges companies face as they move to the cloud. The results were compiled at a major joint conference for CIOs and IT Directors held in Q2 2011.

To know more about Ipanema’s Cloud-ready networks vision:

About Orange Business Services:

Orange Business Services delivers new kinds of communications solutions, designed for the challenges organisations face. It provides world leading communications, combining fixed and mobile, voice, data and multimedia services into integrated, secure and effective solutions designed specifically for multinational organisations.

About Ipanema Technologies

The Ipanema System enables any large enterprise to have full control and optimization of their global networks; private cloud, public cloud or both. It unifies performance across hybrid networks. It dynamically adapts to whatever is happening in the traffic and guarantees constant control of critical applications. It is the only system with a central management and reporting platform that scales to the levels required by Service Providers and large enterprises. With solutions used extensively by many of the world’s largest telecom providers and enterprises across business and public sectors, Ipanema controls and optimizes over 100,000 sites among 1,000+ customers. www.ipanematech.com

Source: Ipanema


<Return to section navigation list> 

Cloud Security and Governance

Lori McVittie (@lmacvittie) warned Don’t get so focused on the trebuchets, mangonels and siege towers that you forget about the sappers in an introduction to her When the Data Center is Under Siege Don’t Forget to Watch Under the Floor post of 6/22/2011:

image We often compare data center security to castles and medieval defenses. If we’re going to do that, we ought to also consider the nature of attacks in light of the military tactics used to perpetrate such attacks, namely siege warfare.

mangonetIt’s likely more apropos today than it was when the analogy was first made because today organizations are definitely under siege from a variety of attack methods. Most of them are obvious if you have someone on the walls (monitoring traffic). You can see the ammunition being fired from the trebuchets and mangonels and feel the walls shaking as they are pounding, again and again, by the large rocks (network layer attacks) hurled with great force. You might even notice a siege tower or two being hauled closer and closer to the walls in an attempt to get atop the walls, take out the archers that are waiting, and penetrate deeper into the keep’s defenses – ultimately hoping to loot the keep (applications) and steal the treasure (data). In medieval times siege warfare could last weeks, months and even years. In the data center, attacks may not last as long but the impact of the modern digital siege - measured in downtime and dollars – can be just as devastating.

Interestingly, siege warfare became more interesting – and dangerous – with the introduction of mining. Mining was the process of digging tunnels underneath the walls surrounding the keep with the intention of weakening – or in later years destroying – its supports, thus bringing down the primary obstacle between the attackers and their intended target. In later years the men who were at first called simply miners became known as sappers and would eventually take on broader engineering tasks unsuitable for the typical siege warfare combatant. The trick for the defenders was to figure out where the sappers might mine the walls and prevent it - often by collapsing the tunnel before the attackers could do damage to the supports or walls.

In many sieges, the sappers were the primary means of breaching the walls. The rest of the attacks – the big stones, flaming pitch, and arrows coming from the main body of the army – were merely a distraction. A method of tying up the defender’s resources while the real attack went (hopefully) unnoticed underneath the walls.

Modern attacks leverage much the same style of attack against the data center: the network and infrastructure-focused attacks are siege weapons, designed to detract you from the real attack that’s going on at other layers of the stack.

BEWARE the APPLICATION LAYER SAPPERS

trebuchetNow, the sappers today aren’t actually attacking “under the floor” but like ancient sappers they are more focused in their attack and are definitely more dangerous to the health and well-being of the application. While the network is besieged by a variety of network-layer attacks, the sappers are going after the applications, using more modern and infinitely more difficult to detect methods of bringing it down. They’re turning the application protocols against the application, using fewer resources to accomplish the same results.

The problem is that you can’t ignore the siege and focus solely on the sappers, and neither can you can ignore the sappers and focus wholly on the siege. There needs to be protections up and down and across the data center that can detect and/or prevent such attacks from having an impact on the availability of applications and their supporting infrastructure. The wall does work, as long as it is strong enough and has enough resources (and intelligence) to be able to stand despite the barrage of attacks it experiences. We need to extend the wall up and down, to cover applications in a way that also makes them able to stand against attacks that would sap resources – regardless of how quickly that may occur. The motte and bailey, moat and keep, is no longer enough. You need to put into place protections at the application layer, as well, recognizing that it’s not just about data theft but about resource theft. And while the former is more easily detected through the use of a web application firewall, the latter is more subtle and may go undetected. Protection from such attacks are necessary to prevent the rapid reduction in capacity that ultimately leads to outages.

Solutions capable of shielding the application from the impact of slow, transport and application layer attacks is just as necessary as being able to deflect network layer attacks. Multi-layer security is not a nice to have these days, it is a must have if one is to properly protect the data center from the increasingly hostile hordes attempting to bring down, take out and steal data from applications in the data center.

The term “sapper” is wholly fit to be applied to the application layer attackers today because what they’re trying to do is “sap” the resources of an application and bring it down by slowly but surely consuming those resources, all the while undetected by the operators manning the data center walls. It’s time to re-evaluate your siege plans and if necessary put into place those protections that not only deflect the attacks of modern siege weapons, but prevent the sappers from sneaking under the data center walls and taking out the application directly.


David Hardin posted Cloud Security–Another Viewpoint on 6/21/2011:

image I recently wrote in a post that software as a service (SaaS) providers have economy of scale advantages over traditional IT and that IT must adapt to compete, eventually becoming SaaS providers of their own. Cloud computing is a catalyst for the rise of SaaS since it nearly eliminates the scale-out infrastructure hurdles. One commenter stated, “I think security could scupper that plan as Cloud Computing currently means trusting someone else with your data”. That got me thinking…

What is security?

Faced with a wide spectrum of risks, security is the countermeasures that your company is willing to pay for and implement.

Beyond the traditional security measures employed by IT, such as secured physical locations, firewalls, OS passwords, etc., what makes IT secure? What really matters to your business?

Hiring trustworthy employees must rank somewhere near the top because ultimately one employee or another needs access to the data. Social engineering exploits, even at the largest tech companies, prove that when there is a will there is a way. The bad guy’s will get in. That doesn’t change with cloud computing.

Assume for the moment that someone can breach any system with enough effort. Let’s face it, if a helicopter full of commandos lands on your data center’s roof your IT staff will have a hard time keeping them from ripping the hardware from the racks and departing with it. They’d probably take the guy who knows the passwords along with them too so good luck restoring the backups. What is your business continuance plan for that?

OK, a commando raid is not likely but can you identify what is? How about identify what is likely tomorrow? What if you guess wrong, how quickly can you respond?

I think this is an area where cloud providers will excel over traditional IT. Again, it is an economy of scale advantage; the cloud providers have enough economic reason to invest in the people, hardware, and processes it takes to identify and respond to security threats.

Same applies to natural disasters. I recently attended a presentation in which the Bing team described quickly shifting search workload to other data centers in response to Japan’s earthquake damage. By following the cloud computing model they can respond quickly even though they have a very low Op’s employee to server ratio. How long would it take your IT department to shift operations in response to such a widespread disaster?

Taken from a holistic perspective cloud computing might already be more secure in ways that matter to your business. In any event it will only get better with time. That is economy of scale power at work.


<Return to section navigation list> 

Cloud Computing Events

My (@rogerjenn) Giga Om Structure Conference 2011 - Links to Archived Videos for 6/22/2011 post of 6/23/2011 begins:

image GigaOm provided live video coverage of its Structure Conference 2011 (@stuctureconf), held on 6/22 and 6/23/2011 at the University of California at San Francisco (UCSF) Mission Bay Conference Center. The live video is archived but not easy to find.

imageFollowing are links to the LiveStream archives for 6/22/2011. (Inexplicitly, archives for two important sessions were missing as of 6/23/2011 8:50 AM) …

Continues with details of Wednesday’s sessions, and concludes:

This post will be updated if the missing archives are posted later.

Full disclosure: I received a complimentary press pass from GigaOm for Structure 2011.

Update: One of the missing archives was posted as of 2:30 PM PDT.


Martin Tantow (@mtantow, pictured below) reported Microsoft Server and Tools Executive Talks “Cloud” on 6/22/2011 from GigaOm’s Structure conference:

imageSatya Nadella, Microsoft’s new Server and Tools President, spoke for the first time today at the GigaOM Structure conference since he took on this new role. Nadella, who replaced Bob Muglia, a Microsoft veteran who is stepping down, declared that the industry is moving toward “the post-virtualization era.”

image Nadella who previously said he is committed to putting the cloud at the center of everything that Server and Tools does moving forward, spoke at a hosted Q&A session at GigaOm’s Structure conference.

image When asked what programs companies feel comfortable migrating to the cloud, Nadella said “there are things like a stateless website they’re very happy to put on the cloud today, but if you take their core billing system, is that something they want to take to public cloud? Probably not. They probably want to take to the private cloud.”

And concerning security? Nadella said companies have similar concerns about attackers penetrating their private network. “It’s really about the soft core vs. the hard shell, which is wherever you are. I think security will remain a big topic for the industry at large but it’s not just primarily a cloud issue. It’s an issue for anyone today who has any kind of network.”

imageNadella says Microsoft’s new cloud products may displace sales of traditional software but will bring more revenue for the company “It’s just going to increase consumption. The limiter is the current architecture approach,” he said. “Today we have tens of thousands of customers who are playing with Azure,” he said. “There’s a lot more (people) testing and developing.”

Nadella did not mention the outage that hit this morning Microsoft’s cloud email service BPOS (Business Productivity Online Services ) and lasted several hours.

See my Giga Om Structure Conference 2011 - Links to Archived Videos for 6/22/2011 post of 6/23/2011 for video links to Structure 2001’s Thursday sessions.


Martin Tantow (@mtantow, pictured below) posted Amazon’s CTO Addresses The “State of The Cloud” At GigaOm Structure Event on 6/22/2011 from GigaOm’s Structure conference:

imageWerner Vogels, the CTO of Amazon Web Services, gave his annual “state of the cloud” presentation Wednesday morning at the GigaOm Structure 2011 conference in San Francisco. Vogels stated that Amazon’s S3 storage service doubled in volume from the same time last year and now houses 339 billion objects. Although Vogels still sees more potential for growth ahead mainly from enterprises building advanced applications, some using cloud-certified versions of applications from SAP and Oracle.

image Vogel said Amazon’s spot pricing for AWS instances which allows customers to bid on unused Amazon EC2 capacity and run those instances when they meet defined price points, increased enterprise usage dramatically. Companies are able save money using spot pricing by running applications only when spot prices fall below a designated price point.

imageAccording to Vogel “This has become very, very successful in helping (web) architects feel comfortable about the prices they are paying. The things that are being enabled by spot pricing are amazing. Some of our customers have extremely sophisticated batch processing. Their bidding strategies are fascinating. They’re making sure they get the lowest price possible.”

imageVogels said that spot pricing is now made available to Elastic MapReduce to encourage further adoption. MapReduce is a hosted Hadoop framework that offers AWS users the ability to process huge amounts of data.

Amazon cloud services are believed to be the most widely used, Vogels noted that each day EC2 “infrastructure cloud” is spinning up enough virtual machines to run the equivalent of Amazon’s entire online retail operation circa 2000, when Amazon was a $2.78bn business.

See my Giga Om Structure Conference 2011 - Links to Archived Videos for 6/22/2011 post of 6/23/2011 for video links to Structure 2001’s Thursday sessions.


Martin Tantow (@mtantow) reported Cloud Computing Survey Reveals New Drivers for Cloud Adoption from GigaOm’s Structure conference on 6/22/2011:

imageThe results of a cloud computing survey conducted by North Bridge Venture Partners, in partnership with GigaOM Pro and The 451 Group, were released today at the GigaOM Structure Conference during the Cloud Leadership Panel. CloudTimes is a media sponsor of the GigaOM Structure conference in San Francisco, CA.

The survey captured current perceptions, sentiments and future expectations of cloud computing from 413 respondents which included industry experts, users and vendors of cloud software, support and services. The survey found that agility and innovation in delivering new applications are emerging as the primary motivators and complement cloud’s scalability and cost benefits.

imageDetails of the survey results are included in GigaOM Pro’s new report, A Field Guide to Cloud Computing, which was also announced today.

A preview of key findings from the survey:

  • Cloud computing is clearly still in its infancy as 40% of respondents indicated that they are only now experimenting with a move to the cloud while another 26% of responders are awaiting market maturity before adopting a formal cloud strategy. On average, the respondents have been using cloud based solutions for 20 months.
  • Today, scalability and cost are seen as the primary drivers for cloud usage, while agility and innovation are quickly emerging as a key factor for adoption, as IT organizations view cloud computing as an effective means to implementing new applications quickly to keep pace with application backlogs and business demands.
  • Factors cited as longer term (up to five years) drivers for cloud adoption included maintaining competitive differentiation, mobility, and ensuring application interoperability through the use of open cloud APIs.
  • While security and compliance remain the top inhibitors with 31% citing these as key obstacles to cloud adoption, interoperability and vendor lock-in remain real threats with 25% of respondents identifying these as roadblocks to cloud usage.
  • The majority of respondents, 55%, believe that cloud computing has a lower total cost of ownership (TCO).
  • Respondents were equally split on the impact of cloud computing on IT manageability with an equal number, 39%, indicating that the cloud would make for less and more complex environments.
  • 74% of respondents indicated that cloud computing would either lead to an increase in hiring or have no impact, while only 26% of respondents expected any decrease in hiring based on cloud adoption.

imageFor more information about this survey visit: http://www.nbvp.com/north-bridge-gigaom-and-451-group-launch-future-cloud-computing-survey

See my Giga Om Structure Conference 2011 - Links to Archived Videos for 6/22/2011 post of 6/23/2011 for video links to Structure 2001’s Thursday sessions.


<Return to section navigation list> 

Other Cloud Computing Platforms and Services

Simon Munro (@simonmunro) listed 7 reasons why people don’t use SimpleDB in a 6/22/2011 post:

imageFollowing my post yesterday about the SimpleDB outage that nobody seemed to notice, I thought a bit about why people aren’t using SimpleDB as much as other AWS services. DISCLAIMER: These are personal observations and not based on extensive research or speaking directly to AWS customers. This list also assumes the people in question have kicked the SQL ACID habit. Why people are still using SQL instead of SimpleDB is a completely separate list.

image1. The 1K limit for values is too small for many scenarios. While it makes sense in terms of availability to have limited field value lengths, practically it means that SimpleDB won’t work in cases where there is a piece of data (say a product description even) that is of indeterminate length. And the option of putting that little piece of data in to S3 just makes things harder than they should be.

2. You don’t know how much it is going to cost. In time people will become more familiar with an arbitrary measurement unit (such as SimpleDB Machine Hour) for the cost of utility compute resources, but at the moment it is a bit of a wild guess. It gets even more difficult when you think that the ‘Machine Hours’ that are consumed depend on the particular query and the amount of data – meaning that you need to get all of your data in before you can get an idea of the costs. On the other hand you can quickly get an idea of how much data you can processes using something like MongoDB on an EC2 instance – which is an easier cost to figure out.

3. Backups are not built in. All data has to be backed up and even if SimpleDB data is redundant, you still need backups for updates or deletes that may be made by mistake. Currently you have to roll your own backup or use a third party tool. SimpleDB needs a snapshot incremental backup mechanism that backs up to AWS infrastructure (S3 or EBS). This should be simple, quick, low latency (within the AWS data centre) and offered as part of the AWS toolset.

4. Pain free data dumps are needed. Similar to backup, getting data out of SimpleDB needs to be simple and part of the AWS products. A simple API call or web console click to dump a domain to S3, compressed and in a readable format (say JSON or xml) would go a long way toward people feeling less nervous about putting all their data in SimpleDB.

5. The API libraries are simplistic. MongoDB has really good libraries that handle serialisation from native classes to the MongoDB format (BSON), making it feel like a natural extension to the language. SimpleDB libraries still require that you write your own serializer or code to ‘put attributes’. This makes the friction higher for developers to adopt as there is a whole lot of hand rolled mapping that needs to be done.

6. SimpleDB documentation is anaemic. The SimpleDB query language is SQL-ish, but not quite SQL. I have had to look up and scratch around to try and translate from a SQL statement in my head into the SimpleDB variant – without examples built by AWS themselves. Just describing the API is not good enough, AWS needs a lot more documentation to help people build stuff.

7. There are no big reference sites. Various NoSQL databases are popular because of the sites that are powered by them. You can find good examples for MongoDB, CouchDB, Redis or any other NoSQL platform out there. Where is the SimpleDB flagship? And don’t tell me that Amazon.com is one without saying much about how it is being used.

This says nothing about how good SimpleDB is at its primary functions – availability, durablility, scalability, consistency and all those other important things that you need in data storage. It is simply a list of things that you would expect from a database product that are obviously lacking in SimpleDB and these things that are lacking hinder adoption. It may also not be that obvious to a seasoned user that things are missing as they are long over the architectural consideration and learning curve.

Fortunately there are other storage options on AWS. S3 and RDS are great products and very popular. There are also other databases that can run on EC2 and may migrate into RDS one day. So very few applications need SimpleDB, but they may be missing out on something. I wish AWS would put some finishing touches on their product.


James Downey (@james_downey) listed Pathways to an Open Source Cloud in a 6/22/2011 post:

image Last night at the Silicon Valley Cloud Computing Group hosted by Box.net, David Nalley of CloudStack told an overflow crowd that open source ideally fits the requirements of cloud computing, allowing users to solve their own problems and avoid cloud lock in. He outlined the comprehensive set of options now available for building an open source cloud.

Nalley emphasized in particular the need for a tool chain, a set of tools for provisioning, configuration, monitoring, and automation. Without these tools working together, system admins could not possibly manage all of the virtual machines deployed in a cloud.

Here’s a list of the open source projects Nalley mentioned in the talk broken down by function.

  • Hypervisors: Xen, KVM, Virtual Box, OpenVZ, LXC
    (Xen and KVM are the most widespread)
  • Management: CloudStack, Eucalyptus, OpenStack, Ubuntu Enterprise Cloud, Abiquo
  • PaaS: Cloud Foundry, OpenShift, Stratos
  • Storage: GlusterFS, CloudFS, CEPH, OpenStack Object Storage (SWIFT), Sheepdog
  • Cloud APIs: jclouds, libcloud, deltacloud
  • Provisioning Tools: Cobbler, Kickstart, Spacewalk, Crowbar
  • Configuration Management: Chef, Puppet
  • Monitoring: Cacti, Nagios, OpenNMS, Zabbix, Zenoss
  • Automation/Orchestration: AutomateID, Capistrano, RunDeck, Func, MCollective

For details, see the slide deck at http://www.slideshare.net/socializedsoftware/crash-course-in-open-source-cloud-computing-8279535.


Martin Tantow (@mtantow) reported Cloud Computing: Current Market Trends and Future Opportunities in a 6/22/2011 post to the CloudTimes blog:

image Cloud computing continues to gain more mainstream adoption as more companies move into the cloud. This article focuses on where the cloud space stand in the market and the future driving trends in these five specific areas: Infrastructure as a Service, Platform as a Service, Software as a Service, Cloud Storage and Private/Internal Clouds.

Commodity Infrastructure as a Service

Infrastructure as a Service (IaaS) is what most IT professionals think about they talk about the cloud. IaaS is also referred as Cloud Infrastructure service and is considered as the core of cloud computing.

image Forrester, an analyst firm predicts it will generate greater revenue potential which can clearly be seen from Amazon Web Services, the undisputed commodity IaaS revenue leader. Investment bank, UBS reported that AWS earning statement could jump from $550 million in 2010 to $750 million in 2011. This year, AWS reveals that its S3 storage service hosts doubled as it now hosts more than 262 billion objects.

Rackspace, the second largest commodity IaaS provider also reveals an increase in its revenue. With its Cloud Servers and Cloud Files, they reported an 18.1 percent increase from $31.4 million to $37.1 million for the first quarter of 2011.

Both AWS and Rackspace’s rapid revenue growth can be credited from the growing usage of the IaaS. Despite this reported growth, some are still reluctant to consider commodity IaaS for mission-critical applications in the cloud. From a survey, 52 percent responded that security concerns hold them back from using the cloud.

imageLarge organizations rely on commodity IaaS for testing and developing new applications, and for hosting applications that are less-critical, while small businesses use it for mission-critical applications.

Future Trend

Commodity IaaS will continue to shape up and take on more enterprise workloads. Enterprise-focused clouds will look to further specialize their offerings. Survey respondents cited the need for more insights from operational data and more control. Cloud users and providers cited “analytics” and “automation” as a service they’d like to have.

Enterprise IaaS

Providing on-demand access to computing and storage resources is the main focus of Enterprise IaaS clouds. One difference between the two is the difficulty to distinguish enterprise IaaS adoption rates and market size from those of commodity IaaS. Enterprise IaaS clouds don’t need to attract a number of users as they are dealing mostly with revenues from larger deals.

Even though adoption rates and market size can be hard to distinguish at Enterprise IaaS, it is still doing fine among its target audience. Instead of taking the scale-out approach of commodity IaaS, enterprise IaaS providers build their clouds using high-end gear.

One of trend in Enterprise IaaS is running VMware at the hypervisor layer. This aims to capitalize the frequency of VMware within many corporate data centers. A survey of IT executives shows that hybrid cloud as the top priority. Through this, organizations won’t commit entirely to public cloud resources and private cloud resources as they can use either model.

Future Trend

On top of the core enterprise IaaS platform, the entrance of IBM into the enterprise IaaS adds diverse services. This includes tools to enable dynamic application development to advanced analytics services. As part of IBM’s SmartCloud offering, it has promised Hadoop processing service in addition to its existing WebSphere and Cognos services.

For enterprise IaaS providers, one challenge would be to harden their clouds for enterprise applications. In order to attract more enterprise developers, they have to loosen access to their platforms. The hybrid model for IaaS developers could be another option.

Platform as a Service

The huge financial investment that Paas gained in the past years proved that is continues to gain popularity. Everyone needs a service that promises to fundamentally alter the way applications are developed, deployed and managed. Still, it remains to be dependent on individual developers, web startups and enterprise developers. Developers are flocking to Paas for their enterprise applications.

imageMicrosoft’s Windows Azure platform is at the center of its cloud efforts that has attracted a number of customers. Among them are Toyota, the Associated Press and Intuit.

On the first half of 2011, PaaS providers address the concern about lack of control and lack of choice. Based from the survey, “Complexity” is the major issue that PaaS seeks to eliminate; followed by Interoperability” and “Lock-in.”

Future Trend

The convergence of these trends – the investments by large vendors, the advances in control and choice, and the increasing popularity of web and mobile applications – are the biggest drivers of PaaS adoption.

Microsoft’s success with Windows Azure suggests the possibility of success for VMware, Red Hat and Salesforce.com as they continue to use PaaS application platforms.

It is also interesting to see Google App Engine as PaaS adoption picks up. Google promises more features will make their way into the standard App Engine.

Software as Service

In terms of users and revenues, Software as a Service, has the biggest share.

One good example is the CRM service of Salesforce.com’s multi-billion-dollar business. SAP and Oracle are also embracing SaaS for their heavy-duty applications.

Some reported that SaaS has inspired Everything as a Service, where any IT process or application or business function is available as a service. Gartner estimated SaaS to reach $10.7 billion in 2011. Another analyst firm, IDC, predicts a $72.9 billion cloud services market by 2015.

GigOM’s survey reveals that 61 percent derive their revenues primarily from SaaS subscription fees; and 74 percent identified a SaaS offering as the cloud computing services they are using.

Future Trend

Aside from the endless emergence of new applications, SaaS will focus on integration of data and services. This integration could prove to be a valuable offering that will address the growing number of cloud services.

Most survey results reveal that users of multiple SaaS applications plan to increase their usage over time; which is both a challenge and an opportunity for data-integration vendors.

As SaaS use grows, data virtualization can pick up its momentum by incorporating data from mobile devices and other end-user derived sources. SaaS providers must also find ways to work tightly in integrating data among applications.

Cloud Storage

Cloud storage is defined as the independent storage services in the cloud and is the most widely deployed cloud services. It is currently being used to backup data, although it also serves as primary file- or content-storage options for web applications, like for Amazon’s Simple Storage Service (S3).

Cloud storage is risk-free as data is already stored elsewhere without the need to be accessed by production applications. However, it is not really good at primary storage as it needs high levels of features, network performance and availability

Nasuni is a company that is making a name in primary cloud storage. It uses a virtual gateway to route files securely and reliably to cloud storage infrastructure from a number of providers.

Looking forward

The innovation on cloud storage will focus on primary storage for enterprise applications in the cloud. As vendors such as HP and Dell have storage businesses and public clouds, they could benefit from leveraging their storage expertise to make primary cloud storage a reality.

However, companies deciding for primary cloud storage must innovate on data-transport front. It won’t be attractive for customers if they rely only on the public Internet for uploading and downloading primary data.

Cloud storage providers will also push for new privacy regulations.

Private Cloud

Private cloud is considered as the delivery model choice of large enterprises and other risk-averse businesses. GigaOM survey reveals 63 percent of respondents utilize private clouds or hybrid clouds as the focus of their cloud strategies. More traditional businesses are also emerging as private-cloud customers.

Over the past years, these four most-prominent private cloud startups – Nimbula, Eucalyptus Systems, Cloud.com and Abiquo – have raise a combined total of $73 million.

It has been noted that there are 2 interesting trends taking place – the advent of PaaS software designed to run on private clouds, and the OpenStack.

Future Trend

Private clouds are here to stay whether as a whole or part of a hybrid cloud environment. For private cloud vendors, choosing to rely on their partners or building their own features will be a big decision.

Two major trends can be expected in the coming years – advanced hybrid cloud capabilities, and a wave of innovation around higher-level features and specialized functions.

Survey data in this article is taken from the GigaOM Pro report “A field guide to the cloud: current trends and future opportunities” by Derrick Harris.


Simon Munro (@simonmunro) asserted Okay Amazon, that’s enough outages in a 6/21/2011 post:

image I barely noticed the SimpleDB outage that occurred on 13 June and lasted for a couple of hours. The lack of outcry on the interwebs is an indication that not many people use SimpleDB – unlike when EBS fell over in April 2011 and knocked over most of the startup world.

imageWhen architecting cloud solutions, you build things up based on assumptions about availability and performance of certain components. Even though we have to design for failure, we have to factor in the likelihood of failure when coming up with solutions. We are quite happy, for example, to assume that our web servers will fall over (or terminate if they are being scaled down) but the load balancer less so and we build accordingly. Can you imagine how much more difficult it would be to build an application where fundamental components, such as the DNS server or load balancer were unreliable?

SimpleDB is one of those components that should be more reliable than anything you can build yourself on EC2. On a recent project we place logging and error information in SimpleDB (and S3), despite having both RDS MySQL and MongoDB available. The argument being that logging to MongoDB or MySQL doesn’t help if the problem is a database connection and besides, because SimpleDB has a restful interface, so the entire set of application components could be down and SimpleDB can be queried. This decision was also made on assumptions about the availability, with no design or operational overhead, of SimpleDB. Does this assumption need to be re-assessed?

The AWS outages are becoming worryingly frequent. Without getting into all the complex statistics of the Mean Time Before Failure of components in series the frequent failure of individual components (EBS in April and SimpleDB in June) means that the more components you use, the more likelihood of failure occurring. So while EBS or SimpleDB may not fail again for a while, if you have a dependency on the next one, whatever that may be, your average time before failure of your application looks a bit on the low side.

I hope that AWS continues their openness in (eventually) communicating their outages, but the frequency is worrying. Is AWS succumbing to their own success and unable to handle the demand? Is there a fundamental flaw with their architecture that is showing cracks under load? Are their processes unable to scale, so they aren’t able to monitor problems in order to put remedial actions in place before failure occurs?

Let’s hope that they can sort things out. AWS is not necessarily any more or less reliable than their competitors and is definitely more reliable that your average enterprise data centre. But bad news is bad news and we don’t want to design for too much failure nor should we be feeding the private cloud trolls.


<Return to section navigation list> 

0 comments: