Modellare un'applicazione in Service FabricModel an application in Service Fabric

Questo articolo fornisce una panoramica del modello applicativo di Azure Service Fabric e come definire un'applicazione e un servizio attraverso file manifesto.This article provides an overview of the Azure Service Fabric application model and how to define an application and service via manifest files.

Informazioni sul modello applicativoUnderstand the application model

Un'applicazione è una raccolta di servizi costituenti che eseguono determinate funzioni.An application is a collection of constituent services that perform a certain function or functions. Un servizio esegue una funzione completa e autonoma e può essere avviato ed eseguito in modo indipendente da altri servizi.A service performs a complete and standalone function and can start and run independently of other services. Un servizio è costituito da codice, configurazione e dati.A service is composed of code, configuration, and data. Per ogni servizio, il codice è costituito dai file binari eseguibili, la configurazione è costituita dalle impostazioni del servizio che possono essere caricate in fase di esecuzione e i dati sono costituiti da dati statici arbitrari che devono essere usati dal servizio.For each service, code consists of the executable binaries, configuration consists of service settings that can be loaded at run time, and data consists of arbitrary static data to be consumed by the service. Per ogni componente di questo modello applicativo gerarchico è possibile eseguire il controllo delle versioni e l'aggiornamento in modo indipendente.Each component in this hierarchical application model can be versioned and upgraded independently.

Modello di applicazione di Service Fabric

Un tipo di applicazione è una categorizzazione di un'applicazione e consiste in un'aggregazione di tipi di servizi.An application type is a categorization of an application and consists of a bundle of service types. Un tipo di servizio è una categorizzazione di un servizio.A service type is a categorization of a service. La categorizzazione di un servizio può disporre di impostazioni e configurazioni diverse, ma la funzionalità di base resta la stessa.The categorization can have different settings and configurations, but the core functionality remains the same. Le istanze di un servizio sono le diverse varianti di configurazione dello stesso tipo di servizio.The instances of a service are the different service configuration variations of the same service type.

Le classi (o "tipi") di applicazioni e servizi vengono descritte nei file XML (manifesti dell'applicazione e manifesti del servizio).Classes (or "types") of applications and services are described through XML files (application manifests and service manifests). I manifesti sono i modelli in base ai quali è possibile creare istanze delle applicazioni dall'archivio immagini del cluster.The manifests are the templates against which applications can be instantiated from the cluster's image store. La definizione dello schema per i file ServiceManifest.xml e ApplicationManifest.xml viene installata con l'SDK e gli strumenti di Service Fabric in C:\Programmi\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd.The schema definition for the ServiceManifest.xml and ApplicationManifest.xml file is installed with the Service Fabric SDK and tools to C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd.

Il codice di istanze di applicazioni diverse viene eseguito come processo separato anche se ospitato dallo stesso nodo di Service Fabric.The code for different application instances run as separate processes even when hosted by the same Service Fabric node. Il ciclo di vita di ogni istanza dell'applicazione può inoltre essere gestito, ad esempio aggiornato, in modo indipendente.Furthermore, the lifecycle of each application instance can be managed (for example, upgraded) independently. Il diagramma seguente illustra come i tipi di applicazioni siano costituiti da tipi di servizi, che a loro volta sono costituiti da codice, configurazione e pacchetti di dati.The following diagram shows how application types are composed of service types, which in turn are composed of code, configuration, and data packages. Per semplificare il diagramma, vengono visualizzati solo i pacchetti codice/configurazione/dati relativi a ServiceType4, anche se ogni tipo di servizio può includere tutti questi tipi di pacchetti o solo alcuni.To simplify the diagram, only the code/config/data packages for ServiceType4 are shown, though each service type would include some or all those package types.

Tipi di applicazioni di Service Fabric e tipi di servizio

Vengono usati due diversi file manifesto per descrivere le applicazioni e i servizi: il manifesto del servizio e il manifesto dell'applicazione.Two different manifest files are used to describe applications and services: the service manifest and application manifest. I manifesti sono descritti dettagliatamente nelle sezioni seguenti.Manifests are covered in detail in the following sections.

Nel cluster possono essere attive una o più istanze di un tipo di servizio.There can be one or more instances of a service type active in the cluster. Le istanze o le repliche del servizio con stato ad esempio raggiungono un'elevata affidabilità replicando lo stato tra le repliche contenute in nodi diversi del cluster.For example, stateful service instances, or replicas, achieve high reliability by replicating state between replicas located on different nodes in the cluster. Essenzialmente, la replica fornisce ridondanza in modo che il servizio sia disponibile anche se un nodo in un cluster ha un malfunzionamento.Replication essentially provides redundancy for the service to be available even if one node in a cluster fails. Un servizio partizionato suddivide ulteriormente il proprio stato e i modelli di accesso a tale stato tra i nodi del cluster.A partitioned service further divides its state (and access patterns to that state) across nodes in the cluster.

Il diagramma seguente illustra la relazione tra applicazioni e istanze di servizi, partizioni e repliche.The following diagram shows the relationship between applications and service instances, partitions, and replicas.

Partizioni e repliche in un servizio

Suggerimento

È possibile visualizzare il layout delle applicazioni in un cluster usando lo strumento Service Fabric Explorer disponibile all'indirizzo http://<yourclusteraddress>:19080/Explorer.You can view the layout of applications in a cluster using the Service Fabric Explorer tool available at http://<yourclusteraddress>:19080/Explorer. Per altre informazioni, vedere Visualizzare il cluster con Service Fabric Explorer.For more information, see Visualizing your cluster with Service Fabric Explorer.

Descrivere un servizioDescribe a service

Il manifesto del servizio definisce in modo dichiarativo il tipo di servizio e la versione.The service manifest declaratively defines the service type and version. Specifica i metadati del servizio, ad esempio il tipo di servizio, le proprietà di integrità, le metriche del bilanciamento del carico, i file binari del servizio e i file di configurazione.It specifies service metadata such as service type, health properties, load-balancing metrics, service binaries, and configuration files. In altri termini, descrive i pacchetti di codice, configurazione e dati che costituiscono un pacchetto servizio per supportare uno o più tipi di servizi.Put another way, it describes the code, configuration, and data packages that compose a service package to support one or more service types. Questo è un semplice esempio di manifesto del servizio:Here is a simple example service manifest:

<?xml version="1.0" encoding="utf-8" ?>
<ServiceManifest Name="MyServiceManifest" Version="SvcManifestVersion1" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Description>An example service manifest</Description>
  <ServiceTypes>
    <StatelessServiceType ServiceTypeName="MyServiceType" />
  </ServiceTypes>
  <CodePackage Name="MyCode" Version="CodeVersion1">
    <SetupEntryPoint>
      <ExeHost>
        <Program>MySetup.bat</Program>
      </ExeHost>
    </SetupEntryPoint>
    <EntryPoint>
      <ExeHost>
        <Program>MyServiceHost.exe</Program>
      </ExeHost>
    </EntryPoint>
    <EnvironmentVariables>
      <EnvironmentVariable Name="MyEnvVariable" Value=""/>
      <EnvironmentVariable Name="HttpGatewayPort" Value="19080"/>
    </EnvironmentVariables>
  </CodePackage>
  <ConfigPackage Name="MyConfig" Version="ConfigVersion1" />
  <DataPackage Name="MyData" Version="DataVersion1" />
</ServiceManifest>

Version sono stringhe non strutturate e non analizzate dal sistema.Version attributes are unstructured strings and not parsed by the system. Gli attributi Version vengono usati per il controllo delle versioni di ogni componente per gli aggiornamenti.Version attributes are used to version each component for upgrades.

ServiceTypes dichiara i tipi di servizi supportati da CodePackages nel manifesto.ServiceTypes declares what service types are supported by CodePackages in this manifest. Quando viene creata un'istanza di un servizio sulla base di uno di questi tipi di servizi, tutti i pacchetti di codice dichiarati nel manifesto vengono attivati eseguendo i relativi punti di ingresso.When a service is instantiated against one of these service types, all code packages declared in this manifest are activated by running their entry points. I processi risultanti devono registrare i tipi di servizi supportati in fase di esecuzione.The resulting processes are expected to register the supported service types at run time. I tipi di servizi sono dichiarati a livello di manifesto e non a livello di pacchetto di codice.Service types are declared at the manifest level and not the code package level. Se pertanto sono presenti più pacchetti di codice, questi verranno tutti attivati ogni volta che il sistema ricerca uno dei tipi di servizi dichiarati.So when there are multiple code packages, they are all activated whenever the system looks for any one of the declared service types.

SetupEntryPoint è un punto di ingresso con privilegi che viene eseguito con le stesse credenziali di Service Fabric (in genere l'account LocalSystem ) prima di qualsiasi altro punto di ingresso.SetupEntryPoint is a privileged entry point that runs with the same credentials as Service Fabric (typically the LocalSystem account) before any other entry point. L'eseguibile specificato da EntryPoint è in genere l'host del servizio a esecuzione prolungata.The executable specified by EntryPoint is typically the long-running service host. La presenza di un punto di ingresso di configurazione separato consente di evitare di dover eseguire l'host del servizio con privilegi elevati per lunghi periodi di tempo.The presence of a separate setup entry point avoids having to run the service host with high privileges for extended periods of time. L'eseguibile specificato da EntryPoint viene eseguito dopo che SetupEntryPoint termina correttamente.The executable specified by EntryPoint is run after SetupEntryPoint exits successfully. Se il processo termina o si arresta in modo anomalo, il processo risultante viene monitorato e riavviato (iniziando di nuovo con SetupEntryPoint).If the process ever terminates or crashes, the resulting process is monitored and restarted (beginning again with SetupEntryPoint).

Gli scenari tipici per l'uso di SetupEntryPoint sono l'esecuzione di un file eseguibile prima dell'avvio del servizio o l'esecuzione di un'operazione con privilegi elevati.Typical scenarios for using SetupEntryPoint are when you run an executable before the service starts or you perform an operation with elevated privileges. ad esempio:For example:

  • Impostazione e inizializzazione di variabili di ambiente necessari per il file eseguibile del servizio.Setting up and initializing environment variables that the service executable needs. Questo non è limitato solo agli eseguibili scritti tramite i modelli di programmazione di Service Fabric.This is not limited to only executables written via the Service Fabric programming models. Ad esempio, npm.exe richiede alcune variabili di ambiente configurate per la distribuzione di un'applicazione node.js.For example, npm.exe needs some environment variables configured for deploying a node.js application.
  • Impostazione del controllo di accesso mediante l'installazione di certificati di sicurezza.Setting up access control by installing security certificates.

Per altre informazioni su come configurare SetupEntryPoint, vedere Configurare i criteri per il punto di ingresso dell'installazione del servizioFor more details on how to configure the SetupEntryPoint see Configure the policy for a service setup entry point

EnvironmentVariables offre un elenco di variabili di ambiente impostate per questo pacchetto di codice.EnvironmentVariables provides a list of environment variables that are set for this code package. Le variabili di ambiente possono essere sostituite in ApplicationManifest.xml per specificare valori diversi per diverse istanze del servizio.Environmentment variables can be overridden in the ApplicationManifest.xml to provide different values for different service instances.

DataPackage dichiara una cartella, denominata dall'attributo Name, che contiene i dati statici arbitrari che devono essere usati dal processo in fase di esecuzione.DataPackage declares a folder, named by the Name attribute, that contains arbitrary static data to be consumed by the process at run time.

ConfigPackage dichiara una cartella, denominata dall'attributo Name, che contiene un file Settings.xml.ConfigPackage declares a folder, named by the Name attribute, that contains a Settings.xml file. Questo file di impostazioni contiene sezioni di impostazioni di coppie chiave-valore definite dall'utente che vengono lette dal processo in fase di esecuzione.The settings file contains sections of user-defined, key-value pair settings that the process reads back at run time. Se durante un aggiornamento è cambiato solo l'attributo version ConfigPackage, il processo in esecuzione non viene riavviato.During an upgrade, if only the ConfigPackage version has changed, then the running process is not restarted. Un callback piuttosto notifica al processo che le impostazioni di configurazione sono cambiate affinché vengano ricaricate in modo dinamico.Instead, a callback notifies the process that configuration settings have changed so they can be reloaded dynamically. Questo è un esempio di file Settings.xml :Here is an example Settings.xml file:

<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MyConfigurationSection">
    <Parameter Name="MySettingA" Value="Example1" />
    <Parameter Name="MySettingB" Value="Example2" />
  </Section>
</Settings>

Nota

Un manifesto del servizio può contenere più pacchetti di codice, configurazione e dati.A service manifest can contain multiple code, configuration, and data packages. Ognuna di queste può essere creata in modo indipendente.Each of those can be versioned independently.

Descrivere un'applicazioneDescribe an application

Il manifesto dell'applicazione descrive in modo dichiarativo il tipo di applicazione e la versione.The application manifest declaratively describes the application type and version. Specifica i metadati di composizione dei servizi, ad esempio i nomi stabili, lo schema di partizionamento, il numero di istanze/fattore di replica, i criteri di sicurezza/isolamento, i vincoli di posizionamento, gli override di configurazione e i tipi di servizi costituenti.It specifies service composition metadata such as stable names, partitioning scheme, instance count/replication factor, security/isolation policy, placement constraints, configuration overrides, and constituent service types. Vengono descritti anche i domini di bilanciamento del carico in cui viene posizionata l'applicazione.The load-balancing domains into which the application is placed are also described.

Un manifesto dell'applicazione quindi descrive elementi a livello di applicazione e fa riferimento a uno o più manifesti dei servizi per comporre un tipo di applicazione.Thus, an application manifest describes elements at the application level and references one or more service manifests to compose an application type. Questo è un semplice esempio di manifesto dell'applicazione:Here is a simple example application manifest:

<?xml version="1.0" encoding="utf-8" ?>
<ApplicationManifest
      ApplicationTypeName="MyApplicationType"
      ApplicationTypeVersion="AppManifestVersion1"
      xmlns="http://schemas.microsoft.com/2011/01/fabric"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Description>An example application manifest</Description>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServiceManifest" ServiceManifestVersion="SvcManifestVersion1"/>
    <ConfigOverrides/>
    <EnvironmentOverrides CodePackageRef="MyCode"/>
  </ServiceManifestImport>
  <DefaultServices>
     <Service Name="MyService">
         <StatelessService ServiceTypeName="MyServiceType" InstanceCount="1">
             <SingletonPartition/>
         </StatelessService>
     </Service>
  </DefaultServices>
</ApplicationManifest>

Analogamente ai manifesti dei servizi, gli attributi Version sono stringhe non strutturate e non analizzate dal sistema.Like service manifests, Version attributes are unstructured strings and are not parsed by the system. Gli attributi Version vengono anche usati per il controllo delle versioni di ogni componente per gli aggiornamenti.Version attributes are also used to version each component for upgrades.

ServiceManifestImport contiene riferimenti a manifesti di servizi che costituiscono questo tipo di applicazione.ServiceManifestImport contains references to service manifests that compose this application type. I manifesti di servizi importati determinano i tipi di servizi validi per questo tipo di applicazione.Imported service manifests determine what service types are valid within this application type. In ServiceManifestImport si esegue l'override dei valori di configurazione nel file Settings.xml e delle variabili di ambiente nel file ServiceManifest.xml.Within the ServiceManifestImport, you override configuration values in Settings.xml and environment variables in ServiceManifest.xml files.

DefaultServices dichiara le istanze dei servizi create automaticamente ogni volta che viene creata un'istanza di un'applicazione sulla base di questo tipo di applicazione.DefaultServices declares service instances that are automatically created whenever an application is instantiated against this application type. I servizi predefiniti vengono forniti per comodità e dopo la creazione si comportano come normali servizi sotto ogni aspetto.Default services are just a convenience and behave like normal services in every respect after they have been created. Vengono aggiornati insieme agli altri servizi nell'istanza dell'applicazione e possono anche essere rimossi.They are upgraded along with any other services in the application instance and can be removed as well.

Nota

Un manifesto dell'applicazione può contenere più importazioni di manifesti di servizi e servizi predefiniti.An application manifest can contain multiple service manifest imports and default services. È possibile controllare le versioni di ogni manifesto del servizio in modo indipendente.Each service manifest import can be versioned independently.

Per informazioni su come mantenere applicazioni diverse e parametri di servizio per ambienti singoli, vedere Gestione dei parametri dell'applicazione per più ambienti.To learn how to maintain different application and service parameters for individual environments, see Managing application parameters for multiple environments.

Passaggi successiviNext steps

Creare il pacchetto di un'applicazione e prepararlo per la distribuzione.Package an application and make it ready to deploy.

Distribuire e rimuovere applicazioni con PowerShell: descrive come usare PowerShell per gestire le istanze dell'applicazione.Deploy and remove applications describes how to use PowerShell to manage application instances.

Gestire i parametri dell'applicazione per più ambienti: descrive come configurare parametri e variabili di ambiente per istanze di applicazione diverse.Managing application parameters for multiple environments describes how to configure parameters and environment variables for different application instances.

Configurare i criteri di sicurezza per l'applicazione: descrive come eseguire i servizi nell'ambito dei criteri di sicurezza per limitare l'accesso.Configure security policies for your application describes how to run services under security policies to restrict access.

Modelli di hosting dell'applicazione descrive la relazione tra le repliche (o istanze) di un servizio distribuito e il processo host del servizio.Application hosting models describe relationship between replicas (or instances) of a deployed service and service-host process.