Übersetzung vorschlagen
 
Andere Vorschläge:

progress indicator
Keine anderen Vorschläge
MSDN Magazin > Home > Ausgaben > 2009 > MSDN Magazin Mai 2009 >  Muster für hohe Verfügbarkeit, Skalierbarkeit u...
Inhalt anzeigen:  Englisch mit deutscher ÜbersetzungInhalt anzeigen: Englisch mit deutscher Übersetzung
Dies sind maschinell übersetzte Inhalte, die von den Mitgliedern der Community bearbeitet werden können. Sie können die Übersetzung verbessern, indem Sie auf den jeweils zum Satz gehörenden Link "Bearbeiten" klicken.Mithilfe des Dropdown-Steuerelements "Inhalt anzeigen" links oben auf der Seite können Sie zudem bestimmen, ob nur der englische Originaltext, nur die deutsche Übersetzung oder beides nebeneinander angezeigt werden.
Cloud Computing
Patterns For High Availability, Scalability, And Computing Power With Windows Azure
Joshy Joseph
Code download available from the MSDN Code Gallery
Browse the Code Online

This article is based on a prerelease version of Windows Azure. Details are subject to change.

This article discusses:
  • Cloud computing architecture
  • Windows Azure
  • Cloud patterns and best practices
This article uses the following technologies:
Windows Azure
During the last decade, the decoupling of interfaces from implementation, scalable hosting models, service orientation, subscription-based computing, and increased social collaboration became the goals of distributed systems. Now, Internet-hosted distributed applications with connectivity to internal applications—often referred as Software plus Services (S+S)—are gaining popularity. Organizations are leveraging datacenters hosted by third parties to alleviate concerns about hardware, software, reliability, and scalability. These are just some of the new architecture trends that help you build interoperable applications that scale, reduce capital expenditure, and improve reliability. Cloud computing offers many of these benefits.
A cloud computing platform enables applications to be hosted in an Internet-accessible virtual environment that supplies the necessary hardware, software, network, and storage capacities and provides for security and reliability, removing much of the burden of purchasing and maintaining hardware and software in-house. In the cloud, you can develop, deploy, and manage applications as you have in the past and integrate these services to your on-premise applications. You pay only for the time, resources, and capacity you use while scaling up to accommodate the changing business needs.
In this article, I will examine the typical cloud platform architecture and some common architectural patterns, along with their implementation on the Windows Azure offering from Microsoft.

Cloud Computing
Figure 1 illustrates the typical cloud computing platform architecture.
Figure 1 Layered Architecture of a Cloud Platform(Click the image for a larger view)
In this model, each layer abstracts the layer below it, exposing interfaces that layers above build upon. There is no hard dependency between layers and each layer provides composable or Plug and Play architecture with services from other layers. Each layer provides horizontal scalability as needed.
As you can see, a cloud platform is composed of a number of subsystems. Let's look at each one next.
A hosting platform The hosting platform provides the physical, virtual, and software assets. These assets include physical machines, operating systems, network systems, storage systems, power management, and virtualization software. Bare metal and other operational resources are abstracted as virtual resources to the layers above.
Cloud infrastructure services The most important function of this layer is to abstract the hosting platform as a set of virtual resources and manage those resources based on scalability and availability needs. Fundamentally, this layer provides three kinds of abstract resources: compute, storage, and network, and exposes a set of APIs to access and manage these resource abstractions. Thus you gain access to the underlying physical resources without knowing the details of the underlying hardware and software and can control these systems efficiently through configuration. Services offered by this subsystem are often known as Infrastructure as a Service (IaaS).
Cloud platform services Developing and managing software for cloud computing is complex. It becomes really complex when you integrate on-premise software with hosted services. Platform services provide a set of capabilities exposed as services to help with such integration. For example, in the Azure Services Platform, Microsoft .NET Service Bus helps with discovery and access while the Microsoft .NET Access Control Service helps role- and rule-based claims transformation and mapping. Availability of platform services may differentiate one cloud provider from another. Services provided by this layer are referred to as Platform as a Service (PaaS).
Cloud applications This layer houses applications that are built for cloud computing. These applications expose Web interfaces and Web Services for end users, enabling multitenant hosting models. Some functions include connecting disparate systems and leveraging cloud storage infrastructure to store documents. These services fall under the umbrella of Software as a Service (SaaS).
Security services Security services ensure token provisioning, identity federation, and claims transformation. These services are built on the open standards, WS-Security, WS-Trust, WS-Federation, SAML protocols, and OpenID, for greater interoperability.
Management services Management interfaces cut across all the layers described above. The hosting platform leverages management interfaces and agents for automated scalability and availability administration. Even though the cloud is hosted and managed in a datacenter, customers may need functions that allow them to easily control their application and post deployment configurations, get analytics about service usage, and connect their enterprise management systems.
Tools Tools help you build, test, and deploy applications into the cloud. These tools may be extensions to existing tools (Visual Studio Tools for Windows Azure, for instance) or hosted tools from a specific cloud provider.
Users and providers of cloud computing There are three categories of users in cloud computing: cloud platform providers, cloud consumers, and end users. Cloud platform providers provide the hosting platform and cloud infrastructure services. Cloud consumers utilize the cloud platform and develop applications and services to be consumed by end users. Cloud consumers configure applications for scalability, availability, and security needs. End users leverage the services offered by cloud consumers. These users could be human, organization, or machine and may be hosted anywhere.
In this context, Azure provides a cloud platform while cloud consumers (or ISVs building integrated cloud solutions or enterprises) leverage this platform to build applications. For example the Live Mesh data synchronization platform leverages the Azure Services Platform and Windows Azure to develop and host S+S services for end users.
Figure 2 maps the Azure Services platform to the layered architecture in Figure 1. This platform provides a set of services to application developers. These services can be used both by applications running in the cloud and by applications running on local systems. Windows Azure, operating system for the cloud, is the foundation of Microsoft's cloud platform offering. As shown in Figure 2, Azure Services Platform provides a set of shared services: SQL Data Services, .NET Services, and Live Services, which can be used individually or collectively. In addition, Microsoft offers various finished cloud applications including Exchange Online, SharePoint Online, and CRM Online. Here, however, I'll focus on only the Windows Azure operating system and related patterns.
Figure 2 Azure Services Platform Mapped to Layered Architecture

Windows Azure Implementation
Windows Azure provides on-demand compute and storage capabilities to host, scale, and manage Web applications and services on the Internet hosted in Microsoft datacenters.
Windows Azure provides features that consumers of cloud services require. For example, physical hardware resources are abstracted away and exposed as compute resources ready to be consumed by cloud applications. Physical storage is abstracted with storage resources and exposed through well-defined storage interfaces. A common Windows fabric abstracts the physical hardware and software platform and exposes virtualized compute and storage resources. In addition, each instance of the application is monitored for availability and scalability, and automatically managed. For instance, if an application in an instance goes down, the Fabric controller (shown in Figure 3) will be notified and another instance in another virtual machine (VM) will be instantiated with limited impact to end users. Because of the amount of virtualization, when writing your code, you need to make sure that you don't make any assumptions about the state of the machine hosting your application. In Windows Azure your service could easily be moved to a new VM. Windows Azure follows a model-driven service management design with Azure Fabric Controller responsible for mapping declarative service specifications to available resources and managing the lifecycle of the services.
Figure 3 Windows Azure and Roles
By default most of the applications developed in .NET could be hosted in Azure with some specific restrictions on partial trust models, data storage/access, and inter-application communication. A rich developer SDK and programming tools help you get oriented toward this platform.
Right now you can create .NET applications, ASP.NET applications, and WCF-based Web services, using tools supported in Visual Studio.
Windows Azure currently offers two processing methods, Web role and Worker role (see Figure 3). Each role executes on a separate VM and communicates with Azure Fabric through an agent. The agent collects resource metrics and node metrics including VM usage, application status, logs, resource usage, exceptions, and failure conditions. It should be noted that each VM may be executed on a single physical host or on a Windows 2008 hypervisor VM. The specific runtime host configuration is dictated by Windows Azure, depending on the service-level agreement and other business/technical needs. A Web role hosts interactive Web applications and provides in-bound and out-bound connections (request-response patterns). In-bound calls are routed through Azure-provided load balancers to provide high availability. As you have noticed, this mandates that each Web role instance be stateless so that fabric can route the requests to any Web role in the cluster.
The worker role is a specialized application executing a .NET application in the background. These applications don't have in-bound connectivity from external applications. However they can send messages to external services. While interacting with Web roles, Worker roles send/receive messages using the Windows Azure Queue storage service. Another interesting aspect is the scale-out capability of the roles. An application deployment administrator can state how many instances of any role may be needed in the configuration and the Fabric will decide on running these instances depending on the system scale-out needs. In short, Windows Azure provides always-on, on-demand deployment and failure handling.
So far I've covered general concepts around Cloud platforms and specific features of Windows Azure. Next I will introduce some core cloud application types, architecture patterns, and best practices that you should be familiar when developing applications for cloud platforms.

Cloud Application Types and Patterns
There are a number of architecture and design patterns and best practices that help you select a cloud platform and implement cloud services and applications. In general, these patterns fall into four categories: compute, storage, communication, and management.
Compute patterns Once you know which application type you are dealing with, you should select the appropriate compute pattern. As I mentioned, the Web role is used for building interactive application patterns, while the Worker role is suitable for building background and scheduler tasks. In some cases you may need both features. One important consideration when planning your compute tasks is to remember to execute those tasks in such a way as to avoid moving large amounts of data around.
Storage patterns Cloud storage provides remote storage and abstracts the storage medium away from the users. The design is sufficiently flexible to support a wide range of application requirements. Azure addresses two patterns of cloud storage: table storage and blob storage. The table storage pattern allows the applications to store key/value pairs following a table structure while the blob storage pattern can be used to store any data.
Communication patterns These patterns address message exchange. Azure technology leverages Windows Communication Foundation (WCF) and REST APIs for Web service communication. You must consider partial trust models and the stateless nature of the application while implementing communication patterns.
Administration patterns Administration patterns differentiate two core aspects of service management: service deployment and service-level-management. Deployment patterns organize service definition, configuration, and monitoring, while other patterns address service-level management and regular operational maintenance.
Now let's look at cloud application types in detail. I will classify cloud application types into three categories based on the types of scenarios each addresses. The first category is Web applications. These include traditional hosted Web applications, emerging composed applications that may utilize two or more data sources and services. These applications need automatic scale-out and scale-down capabilities. An application like Facebook is a good example. In such scenarios the organization may be a startup that wants to spend little capital on infrastructure while being able to handle increasing demand.
Next there are the analytical applications whose main function is to run processor-intensive operations and data mining, often over the same data many times and thus they require access to a great deal of storage capacity and processor availability all at once. There is no need to pay for such huge capacity twenty-four hours a day, seven days a week, however, so cloud services are appealing.
Finally, there are the parallel computing applications that need to perform multiple tasks in parallel so that a huge project can be executed in a short period of time. Again, paying for the one-time-only large capacity that cloud computing can provide is a cost-effective solution.
Not all applications are suitable for running on the cloud platform. The obvious limiting factors include data security, potential lock-in with a cloud provider, open interfaces for communications, trust model limitations, efficiency of moving data in and out of the cloud, integration with existing services outside of the cloud platform, and legal/privacy concerns. Figure 4 lists some scenarios that are suitable for cloud computing, and Figure 5 lists suitable patterns, scenarios, and features.
Figure 4 Application Types Suitable for Cloud Computing
Cloud Application Type Context Scenario Example
Web Applications Host traditional Web apps and interactive apps that compose two or more data sources and services. A start-up company creating a Web collaboration application expecting to spend little capital on infrastructure.
Parallel Computing Large-scale parallel execution of compute tasks. Normally these tasks execute for a short period of time utilizing more compute and storage resources. A newspaper decides on digitization of reports for better Web consumption.
Analytical Applications Analytical processing executes various analytical and data mining algorithms over the same data again and again. A financial company executing Monte Carlo simulations on financial data to assess risk periodically.
Figure 5 Patterns, Features, and Their Corresponding Scenarios
System Considerations Pattern Categories Context Windows Azure Feature Scenario Example
Compute On-demand Application Instance Applications that need scale-out and scale-down capabilities. Automated management of Web and Worker Roles Let retail store sites be available during special events.
  Worker Executing parallel batch jobs or background applications. Leveraging multiple instances of Worker Roles to execute background tasks Using schedulers for analytics processing by executing background tasks in parallel.
Storage Blob Storage Storing large amount of unstructured data. Leveraging Azure Blob Storage Company storing legal compliance reports in backup store.
  Structured Storage Storing data in a table structure while not demanding full relational semantics. Azure Table Storage A structured storage to maintain a Web application's state—i.e. storing purchase order or shopping basket information.
Communication Service Interface (Web and Web service API ) Exposing application capabilities through UI and Web services. Azure support for Building applications using ASP .NET, Silverlight, WCF Web Services Company building digital asset management solution exposing APIs to other services.
  Service-oriented integration Invoking external Web services using Web-standard protocols. Azure platform supports WCF clients and REST APIs Web applications leveraging Microsoft-hosted live meeting services for collaboration.
  Messaging Share messages between applications in a scalable, reliable, and asynchronous way. Leveraging Azure Queue storage service for Web to Worker role communication Web application informing a scheduler to execute a specific task.
Administration Cloud Deployment Deploying applications with desired configurations such as scale-out and high-availability requirements. Separation of service definition, services configuration, and packaging to help appropriate roles A retail store configuring Web portal to automatically scale-out when usage exceeds threshold and scale-down as needed.
  Design for Operations How to make my application operations-ready by providing health status and logging. Using Windows Azure RoleManger.WriteToLog API and overriding RoleEntrypoint.GetHealthStatus() in the Worker Role Developers designing cloud applications to be operations friendly through instrumentation.
  Service Instance Management Start, stop, and suspend cloud apps. Manage service configurations. Automatic handling of dynamic configuration changes and failure conditions A Web application administrator using the Azure portal to manage application state.
  Management Alerts Sending Instant Messages, e-mail, or alerts about resource and billing info. Provided through Live integration Enabling applications to send IMs. Default notification on resource usage.
  Service Level Management Get info on app resource consumption such as processor time, bandwidth. Automated service management via model-based approach ISV looking for billing and resource usage info about the application deployed.
In Windows Azure, Web roles are suitable for executing interactive Web applications while Worker roles are suitable for background applications. Data is stored in Azure blob and table storage services. Inter-role communication is enabled through a Queue service, which provides an asynchronous message exchange. The platform supports WCF-based Web services and clients with Basic HTTP and WS* binding. Storage services are exposed through REST-style interfaces for easier consumption by other applications and cloud providers.
As you know, patterns offer flexible solutions to common problems in software development. Next I will identify common pattern categories corresponding to the above application types.
Rather than trying to describe each individual pattern in depth, I'll focus on broad problem areas and associated pattern categories and show how these patterns are implemented in the context of Azure development.

A Real-World Sample
Let me introduce a scenario that will help illustrate some of these concepts. Fabrikam, an ISV, would like to build a hosted digital asset management Web application. This application enables end users to store digital images in the cloud. Users must be able to preview the pictures submitted, tag them, and annotate them with location information. The application must allow users to use their own desktop applications to access these pictures directly from the storage. Figure 6 represents a high-level architectural view of the services exposed by Fabrikam. As shown in the diagram, Fabrikam exposes a Web application and Web service to the end users for managing their digital assets. These services store and retrieve digital assets from the asset store implemented on top of Windows Azure blob services. Fabrikam implements a background processor to execute tasks such as tagging, thumbnail generation, and so on.
Figure 6 Fabrikam Hosted in Windows Azure
Let's see how to design, develop, and deploy such an application to the Azure Services Platform. The discussions that follow demonstrate core concepts and features available in Windows Azure. You can download the code and documentation to see how the entire scenario is implemented and hosted in Windows Azure.

Application Design and Development
The first step is to understand the applications scenarios, select appropriate patterns, best practices, and programming models. During this process you will identify the type of the application and workloads targeting Windows Azure. In addition, you will figure out the inter-application messaging and data storage patterns. Here I'll assume that Fabrikam is building an interactive Web application with scale-out needs and a background processer to generate metadata from digital assets. The above scenario needs Azure Web and Worker roles, respectively. In addition, Fabrikam needs Blob storage to store digital assets and metadata, service interfaces to expose assets, and messaging patterns for communication.
To facilitate development, the Windows Azure SDK comes with a development environment that simulates Windows Azure on the local machine, thereby enabling offline development and debugging. The SDK supports Web and Worker roles, storage, Visual Studio templates, tools for packaging, viewing and managing role instances, and a Visual Studio add-in that enables the F5 experience. You can download the SDK from MS Download center.
To begin, use the Windows Azure Tools for Microsoft Visual Studio to create a new project using the Cloud Service project templates. You can add necessary user interface, application logic, and input processing to the Web application. Alternatively, you could start from an existing ASP.NET Web application. Because the application will execute under partial trust, avoid calling APIs that violate this restriction. For details about this restriction, please, see the Windows Azure SDK Trust Policy Reference .
Next, import Microsoft.ServiceHosting.ServiceRuntime assembly and use the respective APIs to enable logging, reading local environment configuration, and reading application configuration sections from the service definition file, as shown below.
 // Writing log information
 RoleManager.WriteLog ("Information", "message to show in the log file"); 
 // Getting service configuration information 
 RoleManager.GetConfigurationSetting("MyConfigSection"); 

// Getting local environment; code snippet below shows getting a pointer
//to a local file 
ILocalResource resource = RoleManager.GetLocalResource(    "ComputeLocalStorage")
By the way, it is a programming best practice to replace the above logging and resource access code with reusable application blocks (Logging and Configuration blocks) such as Microsoft Enterprise Library application blocks. You can implement specific providers for Windows Azure logging and configuration management and plug them into the runtime. These best practices decouple applications from platform-specific APIs and help increased reusability between on-premise and cloud environment.
Storage needs for your application will need to be rewritten to take advantage of the Azure storage patterns supported. I will address this shortly.
Next, add a Worker role project into your project and then open WorkRole.cs. This file includes a class called WorkerRole that derives from the RoleEntryPoint class. This class provides methods to manage the initialization, starting, and stopping of a Worker role service, as well as for monitoring the health of the service.
In this step you normally override two methods, as shown in Figure 7 .
public class WorkerRole : RoleEntryPoint
{
  public override void Start()
  {
      RoleManager.WriteToLog("Information", "Generating metadata from digital assets");

      while (true)
      { 
            RoleManager.WriteToLog("Information", "background task is executing thumbnail extraction");
            Thread.Sleep (1000);  
      }
  }

  public override RoleStatus GetHealthStatus()
  {
            return RoleStatus.Healthy;
  }
}
Now run the application in the local development fabric by hitting F5. You will see logs written in the Web and Worker Roles console instances.
Now let's configure a blob store and access it from the Web role.
First you need to set up the blob storage account information.You'll need to specify the following parameters:
AccountName: Specify the name of your Windows Azure account.
AccountSharedKey: Specify the key used to authenticate a request made against Windows Azure storage. To authenticate a request, you must sign the request with the key for the account that is making the request.
BlobStorageEndpoint: Specifies the base URI of the blob storage service.
ContainerName: Specifies the name of the blob container used to store images for this application.
For example, take a look at the following configuration settings:
  <ConfigurationSettings>
   <Setting name="AccountName" value="fabrikamAccount" />
   <Setting name="AccountSharedKey" value="Eby111M02xNOcqFlqUwJPLlmEtlCD
   XJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBekso45Gw==" />
   <Setting name="BlobStorageEndpoint" value="http://127.0.0.1:10000"/>
   <Setting name="ContainerName" value="fabrikamImagegallery"/>
  </ConfigurationSettings>
The REST API for Blob Storage exposes two resources: containers and blobs. A container is a set of blobs; every blob must belong to a container. Blobs are written using PUT operations as defined by the REST API. Using these APIs you can create a hierarchical namespace to organize assets such as fabrikamImagegallery/images and fabrikamImagegallery/documents, where fabrikamImagegallery is the name of the container and images refers to the blob name. It should be noted that each blob could be constructed from blocks of a maximum of 4MB in size for efficient management.
Working with the REST API is rather cumbersome and hence the SDK ships with a sample library that abstracts the REST calls and exposes well known access patterns through the BlobContainer and StorageAccountInfo classes.
Figure 8 shows how to work with Blob storage.
BlobStorage blobStorage = BlobStorage.Create(StorageAccountInfo.GetDefaultBlobStorageAccountFromConfiguration());

BlobContainer newContainer = blobStorage.GetBlobContainer("ContainerName");

newContainer.CreateContainer(null, ContainerAccessControl.Public);

this.container.ListBlobs(String.Empty, false);

BlobProperties properties = new 
 BlobProperties(string.Format(CultureInfo.InvariantCulture, "image_{0}", "idenitifier1"));

NameValueCollection metadata = new NameValueCollection();
metadata["Id"] = id;
metadata["Filename"] = "filename";
metadata["Tags"] = "Image";

properties.Metadata = metadata;

this.container.CreateBlob(properties, imageBlob, true);
Now, let's create a Queue storage service to send message from a Web role to a Worker role. The Windows Azure Queue service provides reliable, persistent messaging within and between services. The REST API for the Queue service exposes two resources: queues and messages. It is possible to create an unlimited number of queues each identified using a unique name. The maximum size of the message is restricted to 8KB. You are responsible for deleting the message after reading; otherwise the message will remain in the queue for the specified time.
Figure 9 shows how to access Queue storage and messages in a Worker Role.
public class WorkerRole : RoleEntryPoint
{
        public override void Start()
        {
            Uri baseUri = new               
                 Uri(RoleManager.GetConfigurationSetting("QueueEndpoint"));
            string accountName = RoleManager.GetConfigurationSetting("AccountName");
            string accountKey =  
                RoleManager.GetConfigurationSetting("AccountSharedKey");

           StorageAccountInfo account = new StorageAccountInfo(
           baseUri,
                null,
                accountName,
                accountKey);

            QueueStorage service = QueueStorage.Create(account);
            MessageQueue queue = service.GetQueue("fabrikamimageprocessingqueue");

            while (true)
            {
                Thread.Sleep(10000);
                if (queue.DoesQueueExist())
                {
                   Message msg = queue.GetMessage();
                   if (msg != null)
                   {

                      queue.DeleteMessage(msg);
                   }
                }
            }
        }
….
}
Now you are ready to try out this application in the local development fabric by hitting F5. You will see Web Roles receiving inputs and sending messages to Worker Roles through Queues. By now you have completed all the necessary development activities needed and are ready to publish the application to Azure.

Deploying the Service
Deploying services to Windows Azure is relatively simple. However, you first need to decide what information to include in the service definition file (application configuration information) versus service configuration file (environment requirements), how to package the application, whether you can leverage existing tools to create and upload packages, and how to store your packages in the cloud storage and later deploy to Azure.
Here's how I will address these requirements for the sample application.
Fabrikam ISV has developer, deployment, and operational roles to manage its cloud applications. Developers create a service definition file that contains information about the application. The service definition file (.csdef) defines the roles available to a service, specifies the service endpoints, and establishes configuration parameters for the service. The service definition settings cannot be changed after a service is deployed. This file becomes part of the Service package file during the packaging process.
Developers also create a service configuration file (specifying the number of instances needed and Azure account information) for local debugging and Azure staging deployment. The service configuration file (.cscfg) specifies values for the configuration settings for one or more role instances within the running service. Operational staff can dynamically modify these service configuration settings without redeploying the service. The service configuration file is not packaged with the service, but is uploaded to the Windows Azure Fabric as a separate file.
The deployment staff updates the services configuration file before production deployment with Azure account-specific information and operational requirements (number of production instances needed).
Developers or the deployment staff create Azure deployment packages using Visual Studio tools or the CSPack tool that comes with the Azure SDK.
It is possible to store deployment packages in the Azure blob storage and retrieve while deploying to the Azure cloud platform
The service package file (.cspkg) is a zipped file that contains role definitions and all role related files (binaries, images and config) packaged into one artifact. You could generate these packages by using Visual Studio or using the CSPack tool. When you use Visual Studio to run on the development fabric the package created will have a .csx extension. However when you use the "Publish" feature, it creates a .cspkg file, which is a zipped and encrypted version of the .csx file. This encrypted and zipped version with .cspkg extension is uploaded to the cloud.
Now you can upload your service configuration file (.cscfg) and package file (.cspkg) to Windows Azure. For this, first you need to obtain Windows Azure compute and storage accounts from the Azure Services Developer Portal. After obtaining these accounts you can deploy the package to the cloud though the Azure developer portal. Once files are uploaded, you'll be provided with an internal staging URL that you can use to test your service in the Windows Azure Fabric. When you move into production you will get the production URL.

Administration
Administration functions cover the management, governance, and operational aspects of the applications deployed in a cloud environment. Leveraging the cloud platforms for application hosting assumes that the services deployed are in a controlled environment with appropriate service-level management, resource management, service provisioning, security/trust models, and monitoring. You should be familiar with the key functional capabilities needed for service management. They include:
  • Developing services with operations-friendly implementation best practices by including proper instrumentation.
  • Monitoring the health and availability of cloud applications and services.
  • Collecting metrics and reporting on service usage, performance, and billing.
  • Enabling automated provisioning of services and updating service configurations.
In Windows Azure, agents monitor each VM instance for failure conditions and collect metrics regarding failures, performance measures, and usage metrics.
Azure Fabric automates the provisioning and management aspect with limited human input. People and process are error prone. This automation helps avoid human errors. In Windows Azure, applications run in a partial-trust sandbox, requests are load balanced, and failure conditions are automatically managed.
As a developer you should be familiar with the operational behaviors of your service. These behaviors are documented as part of service definition and configuration models and communicated to the cloud platform to facilitate automation.
In addition, follow these best practices:
Adding logging information in the code
RoleManager.WriteLog ("Information", "message to show in the log file"); 
  • Overiding GetHeatlthStatus method
public override RoleStatus GetHealthStatus()
{
      // return the health status of worker role.
      return RoleStatus.Healthy;
 }
  • Getting Log files for analyzing application states
Windows Azure Service Management
In Windows Azure, service management follows a model-driven approach where models are used to collect desired configuration information from developers and deployers. Azure Fabric uses these models to manage the service lifecycle, including dynamic configuration updates, automated failure handling, and service monitoring. Windows Azure avoids single point of failures (hardware or software) by introducing fault domains where each role is isolated across multiple compute nodes or machine racks. In addition, Windows Azure ensures services are up and running while updating (rolling forward or backward a subset of service) by requesting upgrade domains though configurations.
You should use the "configure" option and "Copy Log" option in the Azure portal to copy the log messages to the blob storage.
Once the copy is completed you could access the logs from blob storage using the programming model described earlier.
In the future Windows Azure will expose management interfaces to the access and control management and operational activities. This helps on-premises service management tools to monitor and manage cloud applications.

Conclusion
Understanding the cloud computing architecture models, finding relevant patterns, deciding on the programming model, and enabling automated management are critical to the success of cloud computing evolution. Windows Azure is designed with developers in mind by enabling developers to quickly and easily create, deploy, manage, and distribute Web applications and services.
As a developer, you should accumulate a core set of patterns that will help you develop cloud applications most effectively. In addition, you should remember to capture and share recurring solutions to problems and other emerging patterns such that our solutions and products can provide better out-of-the-box support for core cloud computing patterns.
I would like to thank Steve Marx, Jason Hogg, David Hill, Fred Chong, Eugenio Pace, and Nataraja Koduru for their valuable feedback on this article.

Joshy Joseph is a principal architect with Microsoft Services Managed Solutions Group. His primary skills and expertise include distributed computing, grid computing, and Web services. He is the author of the book Grid Computing (Prentice Hall, 2004) and a prolific inventor, with more than 35 patents on file. In addition, he has written numerous technical articles on distributed computing and business process development. Joshy can be reached at jojoseph@microsoft.com .

Cloud Computing
Muster für die hohe Verfügbarkeit, Skalierbarkeit und Leistungsfähigkeit mit Windows-Azure Computing
Joshy Joseph

Dieser Artikel basiert auf einer Vorabversion von Windows-Azure. Details sind vorbehalten.

In diesem Artikel werden die folgenden Themen behandelt:
  • Cloud-IT-Architektur
  • Windows-Azure
  • Wolke Mustern und best practices
In diesem Artikel werden folgende Technologien verwendet:
Windows-Azure
während der letzten Jahrzehnt , war die Entkopplung der Schnittstellen von Implementierung, skalierbare hosten Modelle, Dienstorientierung, Abonnements basieren computing und verbesserte soziale Zusammenarbeit die Ziele von verteilten Systemen. Nun Internet-gehostete Anwendungen mit der Konnektivität auf interne Anwendungen verteilt – häufig als Software + Services (S + S) bezeichnet, werden den Beliebtheit. Unternehmen sind von Drittanbietern zu Bedenken hinsichtlich der hardware, software, Zuverlässigkeit und Skalierbarkeit zu verringern gehosteten Datenzentren nutzen. Dies sind nur einige der neuen Architektur trends, mit deren Hilfe interoperable Anwendungen, die Skalierung, großes Ausgaben reduzieren und die Zuverlässigkeit erstellen. Cloud Computerumgebung bietet viele diese Vorteile.
Eine Wolke Computerplattform kann Anwendungen in einer Internet-Zugriff auf virtuelle Umgebung gehostet werden, die stellt die erforderlichen hardware, software, Netzwerk und Speicher-Kapazität und bietet für Sicherheit und Zuverlässigkeit, entfernen ein Großteil der Last erwerben und Verwalten von hardware und software interne. In der Wolke können Sie Entwickeln, Bereitstellen und Verwalten von Anwendungen wie Sie in der Vergangenheit haben und diese Dienste unter der Voraussetzung Anwendungen integrieren. Sie Zahlen nur für die Zeit, Ressourcen und muss von Kapazität können Sie beim Skalieren ändern Unternehmen gerecht zu werden.
In diesem Artikel wird es der typischen Wolke Plattformarchitektur und die einige gängige Architektur Muster, zusammen mit Ihrer Implementierung auf der Windows-Azure von Microsoft anbieten untersuchen.

Cloud Computing
Abbildung 1 zeigt die typische Wolke Plattformarchitektur computing.
Abbildung 1- Mehrschicht-Architektur der Wolke Plattform (klicken Sie auf das Bild, um es zu vergrößern.)
In diesem Modell abstrahiert jede Ebene die Ebene darunter Offenlegen von Schnittstellen, denen auf Schichten oben aufbauen. Ist keine Festplatte Abhängigkeit zwischen den Ebenen und jede Ebene enthält zusammensetzbares oder Plug & Play-Funktion Architektur mit Diensten, anderen Ebenen. Jede Ebene bietet horizontale Skalierbarkeit, wie erforderlich.
Wie Sie sehen können, besteht eine Wolke-Plattform für eine Anzahl von Subsysteme. Sehen wir uns jeweils nächsten.
Eine hosting Plattform das hosting-Plattform bietet die physische, virtuelle und die Softwareressourcen. Diese Ressourcen umfassen physischen Computern, Betriebssystemen, Netzwerksysteme, Speichersysteme, Energieverwaltung und virtualization software. Leere Metall und andere betrieblichen Ressourcen sind als virtuelle Ressourcen den oben aufgeführten Schichten abstrahiert.
Cloud Infrastrukturdienste, die meisten wichtige Funktion von dieser Ebene ist werden kann, die Ressourcen, die basierend auf Skalierbarkeit und Verfügbarkeit Anforderungen zu abstrahieren, die Host-Plattform als eine Reihe von virtuelle Ressourcen und zu verwalten. Grundsätzlich diese Ebene bietet drei Arten von abstrakte Ressourcen: berechnen, Speicher und Netzwerk und stellt eine Reihe von APIs, um auf zuzugreifen und diese Ressource Abstraktionen verwalten zur Verfügung. Daher Sie Zugriff auf die zugrunde liegenden physischen Ressourcen ohne Kenntnis der details der zugrunde liegenden hardware und software und können diese Systeme effizient durch Konfiguration steuern. Vom dieses subsystem angebotenen Dienste werden häufig als Infrastruktur as a Service (IaaS) bezeichnet.
Cloud-Plattform Dienste, Entwicklung und Verwaltung von software für die Wolke computing ist sehr komplex. Es wird die zu einem komplexen wirklich Bereich, wenn Sie unter der Voraussetzung software mit gehosteten Diensten integrieren. Können Plattformdienste enthalten Funktionen wie Webdienste verfügbar gemacht, die bei solchen integration helfen. Beispielsweise kann im Azure-Services-Plattform Microsoft .NET Service-Bus mit Ermittlung und Zugriff während der Access-Steuerungsdienst von Microsoft .NET und Regel rollenbasierte Anspruchstransformation und Zuordnung kann. Verfügbarkeit von Diensten für die Plattform kann ein Wolken-Anbieter voneinander unterscheiden. Von diesem layer bereitgestellten Dienste werden als Plattform as a Service (PaaS) bezeichnet.
Wolke Anwendungen, die diese Schicht Anwendungen, die erstellt werden enthält, für cloud computing. Diese Anwendungen verfügbar machen, Web-Schnittstellen und Webdienste für Endbenutzer multitenant hosting Modelle aktivieren. Einige Funktionen sind auf, Verbinden unterschiedlicher Systeme und Wolke Speicherinfrastruktur zum Speichern von Dokumenten zu nutzen. Diese Dienste liegen unter die Palette der Software as a Service (SaaS).
Sicherheitsdienste Security services sicher token Bereitstellung Identitätsverbunds und Anspruchstransformation. Diese Dienste basieren auf den offenen standards, WS-Security, WS-Trust, WS-Federation, SAML-Protokolle und OpenID, für die größere Interoperabilität.
Management services Management Schnittstellen, die über alle Ebenen, die oben beschriebenen Ausschneiden. Die Host-Plattform nutzt Verwaltungsschnittstellen und agents für die automatisierte Skalierbarkeit und Verfügbarkeit Verwaltung. Obwohl der Wolke gehostet und in einem Datenzentrum verwaltet, müssen Kunden Funktionen, die problemlos steuern Ihre Anwendung und Buchen von Bereitstellung Konfigurationen, Analysen zu Serviceverbrauch abrufen, und verbinden die enterprise-Verwaltungssystemen zulassen.
Tools für die Tools können Sie die Erstellen, Testen und Bereitstellen von Anwendungen in der Wolke. Diese tools möglicherweise Erweiterungen zu vorhandenen tools (Visual Studio Tools for Windows-Azure, z. B.) oder tools von einem bestimmten Wolke Anbieter gehostet.
Benutzer und Anbieter von computing, es gibt drei Feldkategorien für Benutzer in Wolke cloud computing: Wolke Plattform Anbietern, Wolke Verbraucher und Endbenutzer. Wolke Plattform Anbieter wird die hosting Plattform- und Wolke Infrastruktur-Dienste anbieten. Wolke Verbraucher die Wolke-Plattform nutzen, und entwickeln Anwendungen und Dienste aus, und von Benutzern genutzt werden sollen. Cloud-Verbraucher konfigurieren Sie Anwendungen für Skalierbarkeit, Verfügbarkeit und Sicherheit-Anforderungen. Endbenutzer nutzen die Dienste von Wolke Verbraucher angeboten. Diese Benutzer konnte Person, Organisation oder Computer und können eine beliebige Stelle gehostet werden.
In diesem Kontext bietet Azure eine Wolke-Plattform, während der Wolke Verbraucher (oder unabhängige Softwarehersteller integrierte Wolke Lösungen oder Unternehmen erstellen) diese Plattform Erstellen von Anwendungen nutzen. Die Live-Mesh-Synchronisierung-Datenplattform beispielsweise nutzt werden soll, die Azure Services-Plattform und die Windows-Azure zum Entwickeln und Host S+S-Dienste für Endbenutzer.
Abbildung 2 wird die Azure-Service-Plattform der Schichtenarchitektur in Abbildung 1 zugeordnet. Diese Plattform bietet eine Reihe von Diensten für Anwendungsentwickler. Diese Dienste können sowohl von Anwendungen, die in der Wolke ausgeführt und von Anwendungen auf lokalen Systemen verwendet werden. Windows-Azure, Betriebssystem für die Wolke, bildet die Grundlage der Wolke des Microsoft-Plattform anbieten. Wie in Abbildung 2 dargestellt, bietet Azure Services-Plattform eine Reihe von gemeinsamen Diensten: SQL Data Services, .NET Services und Live-Services, die einzeln oder zusammen verwendet werden kann. Darüber hinaus bietet Microsoft verschiedene fertig Wolke-Anwendungen einschließlich Exchange online, SharePoint-online und CRM online. Hier werde jedoch ich MICH auf nur Windows-Azure-Betriebssystem und zugehörige Muster konzentrieren.
Abbildung 2 Azure zu Mehrschicht-Architektur zugeordneten Services-Plattform

Windows Azure-Implementierung
Windows-Azure bietet von on-demand-compute und Speicher-Funktionen auf Host, Skalierung, und und Verwalten von Webanwendungen Dienste auf dem Internet in Datenzentren von Microsoft gehostet.
Windows-Azure umfasst Funktionen, die Verbraucher der Wolke Dienste benötigen wird. Beispielsweise sind physischen Hardwareressourcen abstrahiert eingelagert und verfügbar gemacht, wie das Berechnen von Ressourcen bereit, die von der Wolke Anwendungen genutzt werden sollen. Physische Speicher abstrahiert, Speicherressourcen und über wohldefinierte Speicher Schnittstellen verfügbar gemacht. Eine allgemeine Windows-Struktur abstrahiert die physische hardware und software-Plattform und macht die virtualisierte compute und Speicher-Ressourcen verfügbar. Darüber hinaus wird jede Instanz der Anwendung für Verfügbarkeit und Skalierbarkeit überwacht, und automatisch verwaltet. Z. B. wenn eine Anwendung in einer Instanz ausfällt, der Fabric-controller (siehe Abbildung 3 ) werden Sie benachrichtigt und eine andere Instanz auf einem anderen virtuellen Computer (VM) wird mit eingeschränkten Auswirkungen für Endbenutzer instanziiert werden. Aufgrund der Virtualisierung, wenn den code schreiben müssen Sie sicherstellen, dass Sie alle Annahmen über den Status der Computer Ihrer Anwendung hosten treffen nicht. In Windows-Azure konnte Ihr Dienst einfach um einen neuen virtuellen Computer verschoben werden. Windows-Azure folgt ein modellgesteuerte service management-design mit Azure Fabric-Controller für das Zuordnen von deklarativen service-Spezifikationen zu verfügbaren Ressourcen und Verwalten von des Lebenszyklus von den Diensten zuständig ist.
Abbildung 3 Windows Azure und Rollen
Standardmäßig können die meisten Anwendungen in .NET entwickelt in Azure mit einigen bestimmten Einschränkungen auf Modelle mit teilweiser Vertrauenswürdigkeit, Datenspeicherung/Zugriff und inter-application Kommunikation gehostet werden. Ein Rich-Entwickler-SDK und Programmiertools können Sie die auf dieser Plattform ausgerichtet zu erhalten.
Nach rechts, nun Sie .NET Anwendungen, ASP.NET-Anwendungen und WCF-basierte Webdienste erstellen können mit tools in Visual Studio unterstützt.
Windows-Azure bietet derzeit zwei Verarbeitung-Methoden, Web-Rolle und der Arbeitsprozess-Funktion, (siehe Abbildung 3 ). Jede Rolle auf einem separaten virtuellen Computer führt aus und kommuniziert mit Azure Fabric über einen agent. Der agent sammelt Ressource-Analysen und Knoten Metriken einschließlich virtuellen Computer Verwendung, Anwendungsstatus, Protokolle, Ressourcenverwendung, Ausnahmen und Fehler Bedingungen. Beachten Sie, dass jede VM auf einen einzelnen physischen Host oder eine Windows-2008 hypervisor virtuellen Computer ausgeführt werden kann. Bestimmte Laufzeitkonfiguration Host von Windows-Azure, abhängig von der Ebene-Servicevereinbarung vorgegeben ist, und andere Unternehmen/technische müssen. Eine Web-Rolle hosts von interaktive Webanwendungen und bietet in gebundenen und out-bound-Verbindungen (Anforderung / Antwort-Muster). In-Grenze Aufrufe werden über Azure-bereitgestellten Laden balancers zur Gewährleistung hohen Verfügbarkeit weitergeleitet. Wie Sie bemerkt haben, erzwingt diese an, dass jede Web Rolle Instanz statusfreie sein, sodass Stoff die Anforderungen für alle Web-Rolle in dem cluster weiterleiten kann.
Die Rolle Arbeitsprozess ist es sich um eine spezielle Anwendung eine .NET-Anwendung wird im Hintergrund ausgeführt.. Diese Anwendungen müssen nicht gebunden Konnektivität von externen Anwendungen. Jedoch können Sie Nachrichten mit externen Diensten senden. Beim Arbeiten mit Web Rollen, Übermittlung Worker-Funktionen Nachrichten mithilfe der Windows-Azure der Speicherdienst. Eine andere interessanter Aspekt ist die dezentral-Funktion, der Rollen. Administrator Bereitstellung Anwendung kann angeben, wie viele Instanzen der jede Rolle in der Konfiguration möglicherweise notwendig sind, und der Fabric wird entscheiden, zum Ausführen von diesen Fällen je nach den system dezentral Anforderungen. Kurz gesagt, bietet Windows-Azure, always-on, on-demand Bereitstellung und die Behandlung des Fehlers.
Bisher habe ich allgemeine Konzepte Wolke Plattformen und bestimmte features von Windows-Azure behandelt. Es wird als Nächstes einführen, einige Kern Wolke Anwendungstypen, Architektur Mustern und best practices, dass Sie vertraut beim Entwickeln von Anwendungen für Wolke Plattformen sein sollten.

Wolke Anwendung Typen und Muster
Es gibt eine Reihe von Architektur und design und die bewährte Methoden, mit deren Hilfe Wählen eine Wolke-Plattform und Implementierung Wolke Dienste- und Anwendungen. Im Allgemeinen diese Muster fallen, in vier Kategorien: compute, Speicher, Kommunikation und Verwaltung.
Compute-Muster, sobald Sie wissen, welche Anwendung, die Sie eingeben werden im Zusammenhang mit, wählen Sie das entsprechende compute-Muster aus. Wie bereits erwähnt, ist die Web-Funktion zum Erstellen von interaktiven Anwendungen Muster, während die Arbeitsprozess-Rolle für die Erstellung von Hintergrund und Planer Aufgaben geeignet ist verwendet. In einigen Fällen müssen Sie beide Funktionen. Ein wichtiger Aspekt beim Planen von compute Aufgaben ist die Beachten Sie, um diese Aufgaben derart, vermeiden Sie große Datenmengen um verschieben durchzuführen.
Speicher Muster Wolke Speicher stellt remote Speicher und das Speichermedium weg von den Benutzern abstrahiert. Das design ist ausreichend flexibel, um eine Vielzahl von Anwendungsanforderungen der zu unterstützen. Azure behandelt zwei Muster der Wolke Speicherung: Tabelle speichern und blob-Speicher. Das Tabelle Speicher Muster kann die Anwendungen speichern Schlüssel-Wert-Paare nach eine Tabellenstruktur, zwar das blob Speicher Muster verwendet werden kann, um alle Daten zu speichern.
Kommunikation Muster diese Muster Adresse Nachrichtenaustausch. Azure-Technologie nutzt Windows Communication Foundation (WCF) und REST-APIs für die Web service-Kommunikation. Sie müssen teilweiser Vertrauenswürdigkeit Modelle und die statusfreie Art der Anwendung beim Implementieren von Kommunikationsmuster berücksichtigt werden.
Verwaltung Muster Verwaltung Muster unterscheiden die zwei wichtigsten Aspekte bei der service management: Dienst Bereitstellung und der Dienst-Ebene-Verwaltung. Bereitstellung Muster Anordnen von Dienstdefinition, Konfiguration und Überwachung, während andere Muster Servicelevel-management und operative Wartungsarbeiten in regelmäßigen Adresse.
Jetzt sehen wir uns Wolke Anwendungstypen im detail. Es wird Wolke Anwendungstypen klassifizieren, in drei Kategorien, die basierend auf den Arten von Szenarios, die einzelnen Adressen. Die erste Kategorie enthält es sich um Webanwendungen. Herkömmliche gehostete Webanwendungen, Beispiele aufkommenden zusammengesetzt Anwendungen, die zwei oder mehr Datenquellen und Dienste nutzen können. Diese Anwendungen benötigen automatische dezentrales Skalieren und Skalierung-down-Funktionen. Eine Anwendung wie Facebook ist ein gutes Beispiel. In solchen Fällen kann die Organisation einen Start sein, der wenig großer Infrastruktur zu verbringen, beim Erhöhen Bedarf verarbeiten können möchte.
Als Nächstes es gibt die analytischen Anwendungen, deren Hauptfunktion ist, prozessorintensiv Vorgänge und Daten mining, häufig über dieselben Daten oft ausgeführt, und daher Sie benötigen Zugriff auf dabei produzierte Menge an Speicher Kapazität und der Prozessor die Verfügbarkeit auf einmal. Damit Wolke Dienste ansprechend sind ist nicht erforderlich für solche großer Kapazität 24-Stunden täglich aus und sieben Tage eine Woche, jedoch bezahlen.
Es gibt schließlich die parallel computing-Anwendungen, die mehrere Vorgänge parallel durchführen, damit ein großes Projekt in einem kurzen Zeitraum ausgeführt werden kann. Und für die 1 time--nur Kapazität, die Datenverarbeitung cloud bereitstellen kann ist noch einmal, eine kostengünstige Lösung.
Nicht alle Anwendungen eignen sich zum Ausführen auf der Wolke-Plattform. Die offensichtlichen einschränkenden Faktoren gehören die Datensicherheit, potenzielle Sperre-in mit einer Wolke Anbieter offene Schnittstellen für die Kommunikation, Vertrauensstellung Modell Einschränkungen, Effizienz der Verschieben von Daten über die Wolke, integration mit vorhandenen Dienste außerhalb der Wolke-Plattform und Legal/Datenschutz bedenken. Abbildung 4 Listet einige Szenarios, die für die Wolke computing geeignet sind und Abbildung 5 zeigt werden, geeigneten Muster, Szenarien und features.
Abbildung 4 Anwendung Typen geeigneter für cloud Computing
Cloud-Application-Typ Kontext Szenario-Beispiel
Webanwendungen Webanwendungen der Host herkömmlichen und interaktive Anwendungen, die zwei oder mehr Datenquellen und-Diensten zu bilden. Ein Start-Unternehmen Erstellen einer Web Zusammenarbeit Anwendung wenig großer Infrastruktur aufwenden erwartet.
Parallel Computing Umfangreiche parallele Ausführung von compute-Vorgängen. Diese Aufgaben werden normalerweise für einen kurzen Zeitraum verwenden mehr und Speicherung von compute-Ressourcen ausführen. Ein Zeitung entscheidet auf digitization von Berichten für eine bessere Web-Verbrauch.
Analytischen Anwendungen Analytical processing führt verschiedene analytische und data mining-Algorithmen über dieselben Daten wieder. Ein finanzielle Unternehmen Ausführen von Monte-Carlo-Simulationen auf Finanzdaten um Risiko in regelmäßigen Abständen zu bewerten.
Abbildung 5 Muster, Features und die entsprechende-Szenarios
System-Überlegungen Muster-Kategorien Kontext Feature von Windows-Azure Szenario-Beispiel
Berechnen On-demand-Application-Instanz Anwendungen, die dezentrales Skalieren und die Dezimalstellen-down-Funktionen benötigen. Automatisierte Verwaltung von- und Worker-Funktionen Lassen Sie die im Einzelhandel Informationsspeicher Websites während besondere Ereignisse verfügbar sein.
  Arbeitsprozess Parallele Stapelverarbeitungen oder Hintergrund Anwendungen ausgeführt. Nutzen mehrere Instanzen von Worker-Funktionen zum Hintergrundaufgaben ausführen Verwenden von Planer für Analyse, die Verarbeitung durch das Ausführen von Hintergrund ausgeführten Aufgaben in parallel.
Speicherplatz BLOB-Speicher Speichern umfangreiche unstrukturierte Daten. Nutzen die Azure-BLOB-Speicher Unternehmen Speichern von Berichten der gesetzlichen Bestimmungen in sichern Speicher.
  Strukturierte Speicherung Speichern von Daten in einer Tabellenstruktur beim anspruchsvolle nicht vollständig relationale-Semantik. Azure-Tabelle-Speicher Ein strukturierter Speicher um eine Webanwendung state—i.e zu verwalten. speichern die Bestellung oder einkaufen Einkaufskorb Informationen.
Kommunikation Dienst-Schnittstelle (Web und Web-API-Dienst) Offenlegen Anwendung Funktionen über die BENUTZEROBERFLÄCHE und Webdienste. Azure Unterstützung für das Erstellen von Anwendungen mithilfe von ASP.NET, Silverlight, WCF-Webdienste Firma Erstellung digital asset management-Lösung APIs mit anderen Diensten auszusetzen.
  Service-orientierten-integration Aufrufen von externe Webdiensten über Internet-standard-Protokolle. Azure-Plattform unterstützt die WCF-clients und der REST-APIs Webanwendungen, die Microsoft-gehosteten live Besprechung-Dienste für Zusammenarbeit zu nutzen.
  Messaging Freigeben von Nachrichten zwischen Anwendungen auf eine skalierbare, zuverlässige und asynchrone Weise. Nutzen die Azure der Speicherdienst für Web auf Arbeitsprozess Rolle Kommunikation Webanwendung ein Planer informiert, eine bestimmte Aufgabe auszuführen.
Verwaltung Cloud-Bereitstellung Bereitstellen von Anwendungen mit den gewünschten Konfigurationen wie z. B. dezentrales Skalieren und hohe Verfügbarkeit. Trennung von Dienstdefinition, Konfiguration Dienste und Packen von Anwendungen zum entsprechende Rollen Eine Verkaufsversion speichern konfigurieren Web portal in automatisch Skala-out Wenn Verwendung Schwellenwert überschreitet und die Dezimalstellen-nach Bedarf.
  Design für Vorgänge Wie meine Anwendung Operationen-sofort durch die Bereitstellung von Zustand und Protokollierung. Verwenden die Windows-Azure-RoleManger.WriteToLog-API und überschreiben RoleEntrypoint.GetHealthStatus() in die Worker-Funktion Entwickler Entwerfen cloud Anwendungen Vorgänge durch die Instrumentierung angezeigten werden.
  Service-Instanz-Management Starten Sie, beenden Sie und halten Sie der Wolke Anwendungen an. Verwalten von service-Konfigurationen. Automatische Verarbeitung von dynamischen Konfigurationsänderungen und Fehler Bedingungen Eine Anwendung Webadministrator mit das Azure portal Anwendungszustand verwalten.
  Verwaltung von Warnungen Senden Sofortnachrichten, e-mail oder Benachrichtigungen über Ressourcen- und Abrechnung Informationen. Durch integration von Live bereitgestellten Aktivieren von Anwendungen für Sofortnachrichten zu senden. Standard-Benachrichtigung zur Ressourcenverwendung der.
  Service Level Management Anzeigen von Informationen zu Anwendung Ressourcenverbrauch wie Prozessorzeit, Bandbreite. Automatisierte service-management über basierendes Modell Ansatz ISV suchen Abrechnungs- und Ressource Verwendung Informationen über die Anwendung bereitgestellt.
In Windows-Azure sind die Web-Rollen geeignet, zum Ausführen von interaktiver Webanwendungen während Worker-Funktionen für die Hintergrund-Anwendungen geeignet sind. Daten werden in Azure-blob und Tabelle Speicher Diensten gespeichert. Inter-Role-Kommunikation ist über eine Warteschlange-Dienst aktiviert, enthält einen asynchronen Nachrichtenaustausch. Die Plattform unterstützt WCF-basierte-Webdiensten und -clients mit Basic HTTP- und WS * Bindung. Speicher-Dienste werden über REST-Formatvorlage Schnittstellen für einfacher Verbrauch von anderen Anwendungen und der Wolke Anbieter verfügbar gemacht.
Wie Sie wissen, bieten Muster flexible Lösungen für häufige Probleme, die in der Softwareentwicklung. Als Nächstes wird es allgemeinen Muster Kategorien, die gemäß der obigen Arten der Anwendung identifiziert.
Ich werde anstatt jedes einzelne Muster ausführlich beschreiben möchten, auf das umfassende Problembereiche und zugeordneten Muster Kategorien konzentrieren und anzeigen, wie diese Muster im Kontext des Azure Entwicklung implementiert werden.

Ein Realität-Beispiel
Lassen Sie mich ein Szenarios vorgestellt, das unterstützen einige diese Konzepte zu veranschaulichen. Fabrikam, ein ISV, möchte eine gehosteten digital asset-management-Anwendung zu erstellen. Diese Anwendung kann Endbenutzer Speichern von digitale Bildern in der Wolke. Benutzer müssen möglicherweise eine Vorschau der Bilder gesendet, markieren Sie und kommentieren Sie mit den Speicherort von Informationen. Die Anwendung muss Benutzern eigene desktop-Anwendungen zu verwenden, um diese Bilder direkt aus dem Remotespeicher zu zuzugreifen ermöglichen. Abbildung 6 stellt eine allgemeine Architektur Ansicht der Dienste von Fabrikam zur Verfügung gestellt werden dar. Wie in dem Diagramm dargestellt, macht beim Fabrikam der eine Webanwendung und die Webdienst an den Endbenutzer für die Verwaltung Ihrer digitalen Anlagen verfügbar. Diese Dienste Speichern und Abrufen von digitale Anlagen aus der Anlage-Speicher auf der Windows-Azure-blob-Dienste implementiert. Fabrikam implementiert einen Hintergrund Prozessor zum Ausführen von Aufgaben wie Tags, Miniaturansichten Generierung und usw..
Abbildung 6 Fabrikam gehostete in Windows-Azure
Wir erfahren, wie Entwerfen, Entwickeln und diese eine Anwendung die Azure Services-Plattform bereitzustellen. Die Diskussionen, die Folgen veranschaulichen die grundlegenden Konzepte und Funktionen in Windows-Azure. Sie können den code und Dokumentation, wie das gesamte Szenario implementiert ist, und im Windows-Azure gehostet, downloaden.

Anwendung Entwurf und Entwicklung
Das erste Schritt darin, nach verstehen, die Anwendungen Szenarios entsprechende Muster, Empfehlungen und Programmiermodelle auswählen. Während dieses Prozesses werden Sie den Typ des der Anwendung und die Arbeitsauslastung, die für Windows-Azure identifizieren. Darüber hinaus werden Sie die inter-application Messaging- und Daten Speicher Muster herausfinden. Hier werde ich angenommen, dass Fabrikam eine interaktive Webanwendung mit dezentral-Anforderungen und einem processer Hintergrund, Metadaten aus digitalen Anlagen zu generieren erstellen ist. Das oben dargestellte Szenario benötigt Azure-Websites und Arbeitsprozess Rollen, bzw.. Darüber hinaus benötigt Fabrikam BLOB-Speicher zum Speichern von digitalen Anlagen und Metadaten, Dienstschnittstellen, um Anlagen und messaging Muster für die Kommunikation verfügbar zu machen.
Um Entwicklung zu vereinfachen, enthält das Windows-Azure-SDK einer Entwicklungsumgebung, die Windows-Azure auf dem lokalen Computer, simuliert dadurch aktivieren offline Entwicklung und Debuggen. Das SDK unterstützt die Web- und Arbeitsprozess Rollen Speicher Visual Studio-Vorlagen, tools, für die Verpackung, Anzeigen und Verwalten von Rolle Instanzen sowie ein Visual Studio-add-in, das die F5-Taste Erfahrung ermöglicht. Sie können das SDK von Microsoft Download center downloaden.
Verwenden Sie die Windows-Azure-Tools für Microsoft Visual Studio um ein neues Projekt mit die Wolke Service Projekt-Vorlagen zu erstellen, um zu beginnen. Sie können erforderlichen Benutzeroberfläche, Anwendungslogik und Eingabe verarbeiten, auf die Webanwendung hinzufügen. Alternativ können Sie aus einer vorhandenen ASP.NET Web-Anwendung starten. Da die Anwendung unter teilweiser Vertrauenswürdigkeit ausgeführt wird, vermeiden Sie die aufrufen-APIs, die diese Einschränkung verletzen. Weitere Informationen über diese Einschränkung finden Sie Geben Sie unter der Windows-Azure-SDK vertrauen Referenz für Gruppenrichtlinien .
Anschließend importieren Sie die Microsoft.ServiceHosting.ServiceRuntime-assembly, und verwenden Sie die entsprechenden APIs, damit Sie die Protokollierung, lesen die Konfiguration der lokalen Umgebung und Lesen Anwendung Konfigurationsabschnitte der der Dienst Definitionsdatei, wie unten dargestellt.
 // Writing log information
 RoleManager.WriteLog ("Information", "message to show in the log file"); 
 // Getting service configuration information 
 RoleManager.GetConfigurationSetting("MyConfigSection"); 

// Getting local environment; code snippet below shows getting a pointer
//to a local file 
ILocalResource resource = RoleManager.GetLocalResource(    "ComputeLocalStorage")
Übrigens ist Programmierung bewährte um die oben genannten Protokollierung zu ersetzen, und access Ressourcencode mit wieder verwendbaren Anwendung blockiert (Protokollierung und Konfiguration Blöcke) wie z. B. Microsoft Enterprise Library-Anwendungsblöcke. Sie können bestimmten Anbieter für Windows-Azure-Protokollierung und Konfigurationsverwaltung zu implementieren und in die Laufzeit eingesteckt. Diese Empfehlungen decouple Anwendungen von plattformspezifischen-APIs und erhöhte Wiederverwendbarkeit zwischen unter der Voraussetzung und Wolke Umgebung helfen.
Speicheranforderungen für Ihre Anwendung müssen geschrieben werden, um unterstützt Azure Speicher Muster nutzen. Es wird diese kurz behandeln.
Als Nächstes fügen Sie einen Arbeitsprozess Rolle Projekt hinzu, in das Projekt, und öffnen Sie WorkRole.cs. Diese Datei enthält eine Klasse namens WorkerRole, die von der RoleEntryPoint-Klasse abgeleitet wird. Diese Klasse stellt Methoden zum Verwalten von der Initialisierung, Starten und Beenden eines Dienstes Worker-Funktion sowie zum Überwachen des Zustand des Dienstes.
In diesem Schritt überschreiben Sie normalerweise zwei Methoden, wie in dargestellt Abbildung 7 .
public class WorkerRole : RoleEntryPoint
{
  public override void Start()
  {
      RoleManager.WriteToLog("Information", "Generating metadata from digital assets");

      while (true)
      { 
            RoleManager.WriteToLog("Information", "background task is executing thumbnail extraction");
            Thread.Sleep (1000);  
      }
  }

  public override RoleStatus GetHealthStatus()
  {
            return RoleStatus.Healthy;
  }
}
Führen Sie nun die Anwendung in der lokalen Entwicklung Struktur aufleuchtet, müssen Sie das F5-Taste. Protokolle, die in die Konsole-Instanzen Web- und Worker-Funktionen geschrieben wird angezeigt.
Jetzt wir einen blob-Informationsspeicher zu konfigurieren und darauf aus der Rolle Web zugreifen.
Zuerst müssen Sie Sie das blob Speicher Konto information.You müssen die folgenden Parameter angeben:
AccountName: Geben Sie den Namen des der Windows-Azure-Kontos.
AccountSharedKey: Geben Sie dem key verwendet, um eine Anforderung für Windows-Azure-Speicher zu authentifizieren. Um eine Anforderung zu authentifizieren, müssen Sie die Anforderung mit dem Schlüssel für das Konto signieren, die die anfordert.
BlobStorageEndpoint: Gibt den Basis-URI des der Speicherdienst blob.
ContainerName: Gibt den Namen des Containers blob verwendet, um Bilder für diese Anwendung zu speichern an.
Beispielsweise sehen Sie sich die folgenden Konfigurationseinstellungen:
  <ConfigurationSettings>
   <Setting name="AccountName" value="fabrikamAccount" />
   <Setting name="AccountSharedKey" value="Eby111M02xNOcqFlqUwJPLlmEtlCD
   XJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBekso45Gw==" />
   <Setting name="BlobStorageEndpoint" value="http://127.0.0.1:10000"/>
   <Setting name="ContainerName" value="fabrikamImagegallery"/>
  </ConfigurationSettings>
Die REST-API für BLOB-Speicher stellt zwei Ressourcen: Container und blobs. Ein container eines blobs; alle blob muss auf einen container gehören. BLOBs wurden mithilfe der PUT-Vorgänge definiert durch die REST-API. Verwenden diese APIs, die Sie einen hierarchischen namespace zum Organisieren von Ressourcen wie z. B. fabrikamImagegallery/Bilder und fabrikamImagegallery/Dokumente erstellen können, wobei sich fabrikamImagegallery auf der name von container und Bildern ist verweist, auf die blob. Beachten Sie, dass jede blob von Codeblöcken maximal MB Größe für die effiziente Verwaltung konstruiert werden konnte.
Arbeiten mit der REST-API ist eher mühsam und daher im SDK Lieferumfang eine Beispiel-Bibliothek, abstrahiert die REST-Aufrufe und macht Muster von well known Zugriff über die Klassen BlobContainer und StorageAccountInfo.
Abbildung 8 Zeigt, wie mit BLOB-Speicher arbeiten.
BlobStorage blobStorage = BlobStorage.Create(StorageAccountInfo.GetDefaultBlobStorageAccountFromConfiguration());

BlobContainer newContainer = blobStorage.GetBlobContainer("ContainerName");

newContainer.CreateContainer(null, ContainerAccessControl.Public);

this.container.ListBlobs(String.Empty, false);

BlobProperties properties = new 
 BlobProperties(string.Format(CultureInfo.InvariantCulture, "image_{0}", "idenitifier1"));

NameValueCollection metadata = new NameValueCollection();
metadata["Id"] = id;
metadata["Filename"] = "filename";
metadata["Tags"] = "Image";

properties.Metadata = metadata;

this.container.CreateBlob(properties, imageBlob, true);
Nun, einen Warteschlange-Speicher-Dienst, um Nachricht aus einer Rolle Web an eine Rolle Arbeitsprozess zu senden wir erstellen. Der Azure-der Windows-Dienst bietet zuverlässige, permanente messaging innerhalb und zwischen den Diensten. Die REST-API für die Warteschlange-Dienst stellt zwei Ressourcen: Warteschlangen und Nachrichten. Es ist möglich, erstellen Sie eine unbegrenzte Anzahl von Warteschlangen jedes über einen eindeutigen Namen identifiziert. Die maximale Größe der Nachricht ist auf 8KB beschränkt. Sie sind für die Nachricht nach dem Einlesen löschen verantwortlich, andernfalls die Nachricht wird bleiben in der Warteschlange für die angegebene Zeit.
Abbildung 9: Zeigt, wie Warteschlangen-Speicherplatz und Nachrichten in einer Worker-Rolle zugreifen.
public class WorkerRole : RoleEntryPoint
{
        public override void Start()
        {
            Uri baseUri = new               
                 Uri(RoleManager.GetConfigurationSetting("QueueEndpoint"));
            string accountName = RoleManager.GetConfigurationSetting("AccountName");
            string accountKey =  
                RoleManager.GetConfigurationSetting("AccountSharedKey");

           StorageAccountInfo account = new StorageAccountInfo(
           baseUri,
                null,
                accountName,
                accountKey);

            QueueStorage service = QueueStorage.Create(account);
            MessageQueue queue = service.GetQueue("fabrikamimageprocessingqueue");

            while (true)
            {
                Thread.Sleep(10000);
                if (queue.DoesQueueExist())
                {
                   Message msg = queue.GetMessage();
                   if (msg != null)
                   {

                      queue.DeleteMessage(msg);
                   }
                }
            }
        }
….
}
Jetzt können Sie zum Testen dieser Anwendung in der lokalen Entwicklung Struktur aufleuchtet, müssen Sie das F5-Taste. Von Rollen-empfangen-Eingaben und Senden von Nachrichten zu Worker-Funktionen über Warteschlangen wird angezeigt. Mittlerweile Sie ausgefüllt haben alle erforderlichen Entwicklung Aktivitäten, die erforderlich sind und die Anwendung auf Azure veröffentlichen.

Den Dienst bereitstellen
Bereitstellen von Diensten in Windows-Azure ist relativ einfach. Jedoch müssen Sie zunächst entscheiden, welche Informationen in der service-Definitionsdatei (Anwendung Konfiguration Informationen) und Dienstkonfiguration enthalten, Datei (Umgebung Anforderungen), zum Verpacken von der Anwendung, ob Sie nutzen können vorhandenen tools zum Erstellen und Hochladen von Paketen und zum Speichern von Paketen in der Wolke-Speicher und später zu Azure bereitstellen.
Hier sehen Sie wie ich diese Anforderungen für die Beispielanwendung Adresse wird.
Fabrikam ISV hat Entwickler, Bereitstellung und operativen Rollen verwalten Sie die Anwendungen, die Wolke. Entwickler erstellen Sie eine service-definition-Datei, die Informationen über die Anwendung enthält. Die Dienst-Definitionsdatei (.csdef) definiert die verfügbaren Rollen an einen Dienst, gibt die Dienstendpunkte und Konfigurationsparameter für den Dienst herstellt. Die Dienst definition-Einstellungen können nicht geändert werden, nachdem ein Dienst bereitgestellt wurde. Diese Datei wird Teil der Paketdatei-Dienst während der Verpackung.
Entwickler erstellen Sie eine Dienst-Konfigurationsdatei (zur Angabe der Anzahl von Instanzen erforderlich sind und die Azure Kontoinformationen) auch für lokales Debuggen und Bereitstellen von Bereitstellung Azure. Die Dienst-Konfigurationsdatei (.cscfg) Gibt Werte für die Konfigurationseinstellungen für eine oder mehrere Rolle Instanzen innerhalb der ausgeführten Dienst an. Operative Mitarbeiter können dynamisch dieser Dienst-Konfigurationseinstellungen ändern, ohne dass Sie den Dienst erneut bereitgestellt. Die Dienst-Konfigurationsdatei ist nicht mit dem Dienst verpackt allerdings auf der Windows-Azure-Fabric als separate Datei hochgeladen wird.
Das Bereitstellung-Personal aktualisiert die services-Konfigurationsdatei vor Produktion Bereitstellung mit Azure-spezifische Kontoinformationen und betriebliche Anforderungen (Anzahl der Produktions-Instanzen erforderlich sind).
Entwickler oder die Bereitstellung Mitarbeiter erstellen, Azure Bereitstellung-Pakete mithilfe von Visual Studio-tools oder die CSPack-tool, das mit dem Azure-SDK geliefert wird.
Es ist möglich, Speichern von Bereitstellung Pakete in der Azure-blob-Speicher und Abrufen von beim Bereitstellen von für die Azure Wolke-Plattform
Die Dienst-Paketdatei (.cspkg) ist eine ZIP-Datei, die Rollen- und alle enthält Rolle verknüpft Dateien (Binärdateien, Bilder und config in ein Artefakt verpackt). Sie können diese Pakete generieren, mithilfe von Visual Studio, oder verwenden Sie das CSPack-tool. Wenn Sie Visual Studio verwenden, um auf die Entwicklung Stoff das Paket erstellt auszuführen, müssen eine .csx-Erweiterung. Jedoch wenn Sie das feature "Veröffentlichen" verwenden, erstellt es eine .cspkg-Datei, d., die h. eine ZIP- und verschlüsselte version der Datei .csx wird. Dies verschlüsselt, und ZIP-version mit der Erweiterung der .cspkg wird in der Wolke hochgeladen aus.
Jetzt können Sie die Dienst-Konfigurationsdatei (.cscfg) und eine Paketdatei (.cspkg) auf Windows-Azure hochladen. Dafür müssen Sie zuerst um Konten des Windows-Azure compute und Speicherung von im Azure Services-Entwicklerportal zu erhalten. Nach Erhalt diese Konten können Sie dem Paket auf der Wolke jedoch das Azure Entwickler-portal bereitstellen. Nachdem die Dateien hochgeladen werden, müssen Sie mit einer internen staging URL bereitgestellt werden, dass Sie zum Testen von Ihrem Diensts in der Windows-Azure-Fabric verwenden können. Wenn Sie in der Produktionsumgebung verschieben erhalten Sie die Produktion-URL.

Verwaltung
Funktionen für Verwaltung behandeln die Verwaltung, Corporate governance und operative Aspekte der Anwendungen in einer Wolke-Umgebung bereitgestellt. Geht davon nutzen die Wolke Plattformen für das Hosten von Anwendungen aus, dass die Dienste bereitgestellt in einer kontrollierten Umgebung mit entsprechenden Servicelevel-management, Ressourcenverwaltung, Dienst bereitstellen, Sicherheitsmodellen/Vertrauensstellung, und überwachen entsprechen. Sie sollten mit der Schlüssel funktionalen Funktionen für service management erforderlichen vertraut sein. Dazu gehören:
  • Entwickeln Dienste mit Empfehlungen für Vorgänge-Anzeigenamen Implementierung erforderlichen instrumentation aufnehmen.
  • Überwachen der Zustand und die Verfügbarkeit der Wolke Anwendungen und Dienste.
  • Erfassen von Metriken, Serviceverbrauch, Leistung, Berichterstattung und Abrechnung.
  • Aktivierung automatisiert die Bereitstellung von Diensten und Aktualisieren von Dienst-Konfigurationen.
In Windows-Azure-agents überwacht jede VM-Instanz für Fehler Bedingungen und Metriken Bezug auf Fehler, Leistung measures und Verwendung Metriken sammeln.
Azure Fabric automatisiert die Bereitstellung und Verwaltung Aspekt mit eingeschränkten menschlichen Eingabe. Personen und Prozess sind Fehler fehleranfällig aus. Diese Automatisierung unterstützt menschlicher Fehler zu vermeiden. In Windows-Azure Anwendungen, die in einer teilweise vertrauenswürdigen sandbox ausgeführt, Anforderungen werden Lastenausgleich und Fehler Bedingungen automatisch verwaltet.
Als Entwickler sollten Sie mit der operativen Verhalten des Dienstes vertraut sein. Diese Verhaltensweisen sind als Teil der Dienst definition und Konfiguration Modelle dokumentiert und kommuniziert, auf die Wolke-Plattform, um die Automatisierung zu erleichtern.
Darüber hinaus folgen Sie den folgenden Empfehlungen:
Hinzufügen von Protokollieren von Informationen in den code
RoleManager.WriteLog ("Information", "message to show in the log file"); 
  • Overiding-GetHeatlthStatus-Methode
public override RoleStatus GetHealthStatus()
{
      // return the health status of worker role.
      return RoleStatus.Healthy;
 }
  • Abrufen von Protokolldateien für die Analyse Anwendungszustände
Azure-Dienst Windows-Verwaltung
In Windows-Azure wird service management einen modellgesteuerte Ansatz, werden Modelle zur gewünschten Konfigurationsinformationen von Entwicklern und deployers zu sammeln. Azure Fabric verwendet diese Modelle, um den Dienst Lebenszyklus, einschließlich updates für die dynamische Konfiguration, automatisierte Fehler Verarbeitung und Dienstüberwachung zu verwalten. Windows-Azure vermeidet Einzelpunkt-Fehler (hardware oder software), durch die Einführung Fehlertoleranz Domänen, in dem jede Rolle beschränkt ist, über mehrere compute-Knoten oder Maschine Regale. In Ferner gewährleistet Windows-Azure Dienste betriebsbereit sind, während der Aktualisierung (parallelen vorwärts oder rückwärts eine Teilmenge der Dienst) durch Anfordern Aktualisierung Domänen jedoch Konfigurationen.
Sollte die option konfigurieren" und "Kopieren log" option können im Azure portal Sie um die protokollierten Nachrichten in den Speicher-blob zu kopieren.
Nach Abschluss die Kopie konnten Sie die Protokolle von blob-Speicher mit das oben beschriebene Programmiermodell zugreifen.
In der Zukunft wird Windows-Azure Verwaltungsschnittstellen zu den Zugriff und die Steuerelement-Verwaltungs- und die operative Aktivitäten angezeigt. Dadurch wird auf dem Gelände Dienstverwaltungsprogramme Überwachen und Verwalten von Wolke Anwendungen.

Schlussbemerkung
Informationen zum Verständnis der Wolke computing Architektur Modelle, finden entsprechende Muster, Entscheidung über das Programmiermodell und automatisierte Verwaltung sind für den Erfolg der Wolke computing Entwicklung. Windows-Azure dient mit Entwicklern, beachten Sie durch Aktivieren von Entwicklern schnell und einfach zu erstellen, Bereitstellen, Verwalten und Verteilen von Webanwendungen und -Diensten.
Als Entwickler sollten Sie eine Kern-Reihe von Mustern ansammeln, mit denen Sie optimalen Wolke-Anwendungen zu entwickeln. Darüber hinaus sollten Sie bedenken, zum Erfassen und Freigeben von wiederkehrende Lösungen für Probleme und andere neue Muster, unsere Lösungen und Produkten besser out-of-the-box für zentrale Wolke computing Muster unterstützen können.
Ich möchte Herr Masters Marx, Jason Hogg, David Hill, August Chong, Eugenio Pace und Nataraja Koduru für Ihre wertvolle Rückmeldungen für diesen Artikel danken.

joshy Joseph ist ein principal Architekt mit Microsoft Services verwaltete Lösungen Group. Seinen primären Fähigkeiten und die Fachkenntnisse umfassen verteilten Datenverarbeitung, Raster computing und Webdienste. Er ist Autor des Buchs Grid Computing (Prentice Hall, 2004) und eine prolific Erfinder dieser Programmiersprache mit mehr als 35 Patente auf Datei. Darüber hinaus hat er zahlreiche technische Artikel zu verteilten Datenverarbeitung und Prozess-Entwicklung Unternehmen geschrieben. Joshy kann unter erreichen jojoseph@Microsoft.com .

Page view tracker