Matthew T. Mead

Blogs About Technology, GTD and Life

Archive for the ‘Cloud Computing’ Category

Background

Anyone who uses Outlook tasks and notes and an iPhone knows the pain of not being able to sync tasks and notes over-the-air from Exchange to the iPhone. I was surprised when I first realized that the Exchange client oin the iPhone only syncs email, calendar and contacts and does not sync notes and tasks. I was surprised because I assumed it would be like any other Exchange client and sync tasks and notes as well. Initially, not being able to sync notes did not seem like a showstopper. But over time it became more and more problematic as I was unable to access notes from Outlook that I have become dependent upon.

Evernote

A colleague introduced me to Evernote (see evernote.com). Evernote is a service that allows you to save notes containing various types of media to a central, cloud-based service. The notes are available for viewing and editing using a variety of applications including: traditional web, iPhone, Windows dand Mac. Best of all, the service and clients are free if you do not exceed a (fairly generous) disk space allotment. Notes that are created or edited on any platform are quickly and efficiently replicated to all clients.

Moving Existing Notes

Evernote has two built-in mechanisms to import data:

  1. Import Evernote import/export files
  2. Extract notes from Microsoft OneNote

I found myself in a bind. I had over 125 notes in Outlook 2007 (I was not using OneNote) and could not find an existing way to import these Outlook notes other than to copy and paste each note, one-by-one, into my Windows Evernote application. So I wrote a program to convert the Outlook notes into a format that can be imported into the Evernote Windows client (Note: as of this writing, the Mac Evernote client does not support this import feature).

My Outlook to Evernote (OL2EN) program takes an exported Outlook 2007 Notes file in Windows CSV format as input and creates an Evernote compatible import/export XML file as output. The Evernote import/export file can then be imported into the Evernote Windows client.

Outlook to Evernote Application Screenshot

The complete steps to get started and import your Outlook 2007 notes are detailed:

  1. Download Evernote iphone client from the Apple App Store (the app is free)
  2. Download and install the Evernote Windows client from the evernote.com site (the app is free)
  3. Create a free account on evernote.com. You can do this from iPhone application or on evernote.com website.
  4. Export notes from outlook in windows CSV using the following steps:
    a. Click on Notes in Microsoft Outlook 2007
    b. Select File | Import and Export…
    c. Select ‘Export to a File’ in the resulting Import and Export dialog and click Next
    d. Select ‘Comma Separated Values (Windows)’ and click Next
    e. Make sure that ‘Notes’ is selected in the hierarchy and click Next
    f. Type in a location and filename (ending in .CSV) for your Outlook notes export CSV file and click Next
    g. Leave the default mappings on the final dialog and click Finish (your file will be created)
  5. Create an Evernote XML import/export file using my tool using the following steps:
    a. Download the OL2EN application and run it (note that it requires the Microsoft .NET runtime)
    b. Run the program and select the CSV file you created in step 4 in the ‘Outlook Export File’ field
    c. Type in the name of the Evernote XML file you want to generate in ‘Evernote Import File’ field
    d. Leave ‘Ignore header row (first CSV row)’ checked as the first CSV entry from the Outlook 2007 export is a header row
    e. Click ‘Generate’. A success dialog should indicate how many notes were converted.
  6. Import the Evernote import/export XML file using the Evernote Windows client application using the following steps
    a. Start the Evernote Windows application
    b. Select File | Import | Evernote Export Files…
    c. In the resulting File Open dialog, browser for and select the Evernote import/export file created in step 5 and click open. If the import is successful, you will see a success dialog indicating the notes were imported into a separate notebook inside Evernote. Contratulations! In the event of a failure to import, your import notebook will be empty and you will not see a success message. Unfortunately, there doesn’t appear to be any information provided by Evernote, but is is likely that the XML file is malformed.

OL2EN is free to use for commercial or non-commercial purposes. If you find OL2EN useful or want me to add any additional features, or run into any errors, please post a comment. OL2EN saved me from a lot of typing. I hope someone else can make use of it as well…

At Redpoint Technologies, we’ve been evaluating many of the services offered by leading cloud vendors in order to better understand where various cloud offerings are most appropriate. Like any technology, it is important to understand each offering’s strengths and weaknesses.

Today I executed some crude performance tests against the Rack Space Mosso Cloud Files offering. This is very similar to the Amazon S3 storage offering. It allows files to be uploaded to the Mosso cloud server where they can be later retrieved. The service offers no minimum or maximum in overall storage, but does limit individual files to 5GBs or smaller, and utilizes utility-style pricing.

Cloud Files optionally allows you to store your content on a content delivery network (CDN). A CDN is an infrastructure of servers located in different geographic locations that work together to rapidly deliver web content to users based on their geographic location. As a result, a CDN can dramatically increase the speed with which content is delivered/retrieved.

Major Considerations

Depending on your needs for uptime, Mosso offers what I’d consider the minimum availability with a 99.9% uptime guarantee for Cloud Files. This means the service may be down about 10 minutes per week or roughly 40.5 minutes per month. For many applications, that is acceptable, but for mission critical situations, this may not be enough.

The following table summarizes many of the considerations and the description for how these considerations are addressed by Mosso.

Consideration Description
Contracts and Minimums No contracts, no minimums.
Performance See performance notes below.
Cost Minimal: $.15 per GB of storage, $.22 per GB of bandwidth out, $.01 for requests (via control panel).
Security All traffic between your application and the Cloud Files server uses SSL to establish a secure, encrypted channel. This ensures that any data (usernames, passwords, and content) cannot be intercepted and read by a third party.
Availability Offers a 99.9% uptime guarantee. That’s about 10 minutes of downtime per week.
Backup/Redundancy Data is replicated to three locations.
Accessibility Access files via Mosso browser-based control panel or via programmatic API.
Language Support Supports PHP, Phython, Java and .NET via their API. See the developer API documentation

Performance

For an upcoming distributed, grid-based project, I’m interested in the speed with which I can upload gigabytes of data to a temporary storage location.

The performance of Mosso was decent when using their API, but dreadful when uploading via their web-based interface (but to be fair, the web interface is more for account management and less about use in a production system). The overhead of SSL was surprisingly minimal (as compared to raw FTP - see below as this was not an exact comparison).

I used a 24.9 MB bitmap file as my test file to measure performance for uploading files to Mosso (additional tests around downloading would be worth while testing as well). I tested uploading the test file via the Mosso web interface, using the Mosso API from a .NET application (see the c# console application code below) and to this blog site via FTP to have a non SSL benchmark.

I ran each test several times and throughout the day from my cable modem (which scores between 712 to 2550 Kbps in a browser-based connection speed tests). The results from each run were pretty consistent. On average, it took about 6.25 minutes to upload the 24.9 MB test file to Mosso via the Mosso web interface (control panel), about 3.5 minutes to upload the 24.9 MB test file to Mosso via the Mosso API using the below application and about 3.25 minutes uploading to this (shared .NET hosting) blog site using Filezilla.

The results were satisfying in that my raw FTP upload (to a non-Mosso server) were just a bit faster than the Mosso upload that uses SSL. In my brief testing the service was reliable and I like that the Mosso session could be cached indefinitely in a custom application (unlike the web interface that timed out my session after about 20 to 30 minutes of inactivity).

.NET Test Application

You can use the code below to create a C# console application that will upload a file to Mosso’s Cloud Files service. (Please note that you will need to purchase an account at Mosso prior to being able to run this code.) Prior to building/running the application, you need to add a reference to the com.mosso.cloudfiles .NET assembly that is included in the lib directory of the free download that includes the Mosso .NET sample code. And don’t forget to provide meaningful values for the string values in lines 16, 18, 20 and 22.

Although it would be easy to add an upload timer to the code below, I used a physical stopwatch to capture the time for my upload tests.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using com.mosso.cloudfiles.services;
   6:  using com.mosso.cloudfiles.domain;
   7:  
   8:  namespace MossoPerfTest
   9:  {
  10:      class Program
  11:      {
  12:          static void Main(string[] args)
  13:          {
  14:              Connection connection;
  15:              // get your user name from mosso at sign-up
  16:              string username = "your-user-name-here";
  17:              // get this from mosso console once you have an account
  18:              string api_access_key = "your-key-here";
  19:              // containers are top-level "folders" for your data files
  20:              string container = "your-container-name-here";
  21:              // fully-qualified filename you want to upload 
  22:              string fileName = @"C:\your-filename-here.txt";
  23:              try
  24:              {
  25:                  connection = new Connection(
  26:                          new UserCredentials(username, api_access_key));
  27:                  connection.PutStorageItem(container, fileName);
  28:              }
  29:              catch
  30:              {
  31:                  Console.WriteLine(
  32:                          "Authentication failed or file upload failed");
  33:              }
  34:          }
  35:      }
  36:  }

Conclusion

In conclusion, you need to be strategic in thinking where you’d use a service like Cloud Files from RackSpace’s Mosso. We would use a service like Cloud Files for storing large files if we could queue them up and upload them asynchronously from our system. Or, perform a synchronous upload if the file was small enough.

From the Mosso’s marketing material, they state that Cloud Files is good for:

  • Backups/archives of your data
  • Serving images/videos (streaming data to the user’s browser)
  • Secondary/tertiary, web-accessible storage for your data
  • Well suited when amount of storage is difficult to predict
  • Simple point-and-click interface via Mosso Control Panel

But that it is not so good for:

  • Native support within your Operating System. It is not yet possible to “mount” or “map” the Cloud Files storage system as a virtual hard-disk on your computer.
  • Disk mirroring or backup solutions that require byte/block level differences. There are no concepts of “append” or “file locking” operations within Cloud Files.
  • Data can be organized into storage compartments called “Containers”, but they cannot be nested. Since there is only one top-level of Containers, you will not be able to upload a nested directory/folder structures into Cloud Files unless a transformation is performed to flatten the structure.

AWS Launches CloudFront

Late last month (November 18, 2008), Amazon Web Services (AWS) announced the public beta of a new service for content delivery. The new Cloud Computing service, CloudFront, provides developers an easy way to distribute HTTP content to end users with minimal latency delays and provides high data transfer speeds.

CloudFront integrates with other AWS services and, like the other AWS services, does not require any long-term commitment or expensive upfront cost, has the self-service account interface and utility pay-as-you-go payment model.

CloudFront is exciting because it provides a mechanism to deliver HTTP content throughout the world by leveraging the Amazon network of edge servers. These edge servers are distributed throughout the world in order for the content cached at these servers to be physically closer to the end users in order to lower the latency in delivering the content.

CloudFront integrates with AWS S3 by allowing you to store the original versions of your data in an AWS S3 bucket (S3 is Amazon’s Simple Storage Service, which is a web service that allows any size chunk of data to easily be stored and retrieved). The beauty is that the original data objects can be stored in S3 and, after a simple registration process, are seamlessly accessible through the AWS edge servers throughout the world.

At the moment, the dominant players in the Content Delivery Network or Content Distribution Network (CDN) space are Limelight, Akamai and CDNetworks. CDNs are used by most high-scaling websites including, for example, MySpace.com and the National Basketball Association (NBA). The CloudFront offering in this space provides a lower-cost alternative to the existing players.

What is cloud computing?

Cloud computing involves both the architecture of an application (i.e. the way it is designed and the intent behind its design) and the platform on which the application is deployed. Cloud computing is a way to build, deploy and manage applications using Internet-based server infrastructure. It dovetails well with Service oriented Architecture (SoA) in that applications in a cloud are typically developed in a distributed manner with all the application pieces communicating over the Internet.

Cloud offerings differ from different vendors, but, for example, Amazon offers:

  • Computing capacity - Elastic Compute Cloud or EC2 is a Linux hosting capability
  • Structured data storage - SimpleDB is a web service-based capability for accessing structured data
  • Large data storage - Simple Storage Service or S3 is a web service-based capability for storing and retrieving chunks of data
  • Queuing service - Simple Queue Service or SQS is a hosted queue for storing messages to support asynchronous message processing

The cloud is promising to companies of all sizes, but is most powerful for small to mid-sized companies that do not have the money, staff or IT infrastructure to support an on-site enterprise data center. Getting a server to be visible on the Internet is easy. But building the technology infrastructure and staff to support a truly 24×7 data center environment with proper redundancy (both from a hardware, software and networking perspective), backup mechanism and physical & software security is not easy. Especially if this environment has to handle heavy peak loads.

The Benefits
Cloud computing offers many benefits:

  • Ability to handle increased capacity and expand capacity and capability without any large upfront investment
  • Ability to pay for infrastructure much like you pay for your utilities at home. You pay for what you use and you can configure your application to handle peak load without paying for a massive hardware infrastructure.
  • Possibility of reducing IT operations staff

The cloud lowers the bar (from a cost and complexity perspective) to entry for mission-critical, enterprise infrastructure and provides easy access to additional capacity as needed. However, not every vendor’s solution is created equal. To get the most out of certain cloud offerings, it may require modifications or rewrites to existing applications.

The Risks
Probably the largest concern surrounding the adoption of cloud computing is lack of trust (by some) in the security surrounding their data on the cloud. The fear of their enterprise data being compromised is a large concern and a barrier to entry for some companies.

However, despite what some folks may believe, most of the large cloud vendors have much more security talent than the typical corporation. And it is absolutely critical for the survival of any cloud vendor to keep their environment as safe as possible.

The second risk is the fear of an outages at the cloud provider. Could this happen? It did happen earlier in 2008 when Amazon had a service outage and applications were not available. Due to these risks, some companies are planning to wait and see how reliable and safe these services are before jumping on board.

The Players
There are a few of big players (Microsoft recently announced their entrance into this market in 2009) and many small startups in the cloud computing space. Most organizations are selecting to work with the big players due to the potential risk involved in outsourcing their application and data to a small unknown vendor. But the smaller companies seem to be pushing the innovation and providing unique offerings.

  • 1 Comment
  • Filed under: Cloud Computing