Storage-Konzepte von Windows Azure
Der Windows Azure Storage bietet drei grundlegende Konzepte. Diese sind die MessageQueue, der Table Storage und der Blob Storage. Die primäre Aufgabe der MessageQueue ist es, zwischen den einzelnen Rollen zu kommunizieren. Dies könnte beispielsweise der Fall sein, wenn eine WebRole die WorkerRole über die Erstellung von Dokumenten benachrichtigt. In der MessageQueue sollte hier lediglich ein Verweis auf die Daten sein. Die Daten, die in der Queue angegeben sind, könnten nun in einem Table Storage abgelegt sein. Wichtig bei einer Queue ist es, die Nachricht(en) zu löschen, wenn sie abgearbeitet wurden. Wird eine Nachricht abgerufen, so wird diese lediglich für eine gewisse Zeit unsichtbar für andere Methoden, die auf die Queue zugreifen. Würde diese nun nicht gelöscht, können Verarbeitungsvorgänge mehrfach auftreten. Listing 2 stellt einige allgemeine Operationen auf MessageQueues dar. Listing 2: Verschiedene Operationen einer QueueCloudQueueClient qclient = new CloudQueueClient(account.QueueEndpoint.ToString(), account.Credentials);CloudQueueMessage message = new CloudQueueMessage(strMessage.ToString());CloudQueue queue = qclient.GetQueueReference("doccreates");queue.CreateIfNotExist();queue.AddMessage(message);queueclient = account.CreateCloudQueueClient();queue = queueclient.GetQueueReference("doccreates");if(queue.Exists())ProcessMessage(queue.GetMessage());queue.DeleteMessage(cloudQueueMessage);
public class EventContext : TableServiceContext{private const string tableName = "Events";public EventContext(string baseAdress, StorageCredentials credentials): base(baseAdress, credentials){}public IQueryable<EventEntity> Events{get{return CreateQuery<EventEntity>(tableName);}}public static string TableName{get{return tableName;}}}
CloudBlobClient client = account.CreateCloudBlobClient();CloudBlobContainer container = client.GetContainerReference("documents");container.CreateIfNotExist();BlobContainerPermissions permissions = new BlobContainerPermissions();permissions.PublicAccess = BlobContainerPublicAccessType.Container;container.SetPermissions(permissions);CloudBlob blob = container.GetBlobReference(filename);blob.UploadFromStream(ivc.CreateDocument());blob.Properties.ContentType = "text/docx";blob.SetProperties();
Demoszenario
Auf der Heft-CD (.NET MAGAZIN 10.2010, Anm. d. Red.) befindet sich ein etwas detaillierterer Quellcode einer Windows-Azure-Anwendung. Die Anwendung soll eine Eventregistrierung simulieren. Hierfür werden zwei Rollen eingesetzt: Eine WebRole, um sich für das Event zu registrieren sowie eine WorkerRole, die ein Word-Dokument mithilfe von OpenXML generiert. Ferner werden sämtliche Elemente des Windows Azure Storage verwendet. Ist eine Registrierung erfolgreich, gibt die WebRole Informationen über die Registrierung in eine MessageQueue. Die WorkerRole wartet in einer Schleife auf Arbeitsanweisungen. Sobald eine Nachricht in der MessageQueue vorhanden ist, leitet diese die Bearbeitung ein. Hierfür wird mithilfe von OpenXML automatisch ein Dokument generiert. Dieses wird, damit tatsächlich alle Bereiche des Windows Azure Storage abgedeckt werden, in einem Blob Storage gespeichert. Der Blob Storage dient nun dem Download eines zukünftigen Benutzers (Abb. 4).
Fazit
Mit Windows Azure kann man sehr einfach Anwendungen bauen, die optimal auf die Anforderungen neuartiger Webanwendungen ausgelegt sind. Im Artikel wurden eingangs drei Anwendungstypen vorgestellt, die einen sinnvollen Einsatz von Cloud Computing darstellen sollen. Cloud Computing ist bestimmt nicht das Heilmittel für alle IT-Probleme, jedoch lässt sich durch einen sinnvollen Umgang mit dem Thema sehr vieles erreichen.
Mario Meir-Huber ist Autor bei verschiedenen Fachmagazinen rund um .NET und gibt sein Fachwissen auf Konferenzen weiter. Seine Lieblingstechnologien sind hierbei WPF und Silverlight. Seit der Entstehung der Wolke ist dies jedoch sein absolutes Lieblingsgebiet geworden. Er ist auf Twitter unter "mario_mh" und unter www.codefest.at erreichbar.
Teil 1 Teil 2




