Service Fabric-toepassings- en servicemanifesten

In dit artikel wordt beschreven hoe Service Fabric-toepassingen en -services worden gedefinieerd en versiebeheer met behulp van de ApplicationManifest.xml- en ServiceManifest.xml-bestanden. Zie voorbeelden van toepassings- en servicemanifesten voor meer gedetailleerde voorbeelden. Het XML-schema voor deze manifestbestanden wordt beschreven in de schemadocumentatie serviceFabricServiceModel.xsd.

Waarschuwing

Het XML-manifestbestandsschema dwingt de juiste volgorde van onderliggende elementen af. Als gedeeltelijke tijdelijke oplossing opent u 'C:\Program Files\Microsoft SDK's\Service Fabric\schemas\ServiceFabricServiceModel.xsd' in Visual Studio tijdens het ontwerpen of wijzigen van een van de Service Fabric-manifesten. Hiermee kunt u de volgorde van onderliggende elementen controleren en intelli-sense gebruiken.

Een service in ServiceManifest.xml beschrijven

Het servicemanifest definieert declaratief het servicetype en de versie. Hiermee worden servicemetagegevens opgegeven, zoals servicetype, statuseigenschappen, metrische gegevens over taakverdeling, binaire servicebestanden en configuratiebestanden. Op een andere manier worden de code, configuratie en gegevenspakketten beschreven die een servicepakket opstellen ter ondersteuning van een of meer servicetypen. Een servicemanifest kan meerdere code-, configuratie- en gegevenspakketten bevatten, die onafhankelijk van elkaar kunnen worden geversied. Hier volgt een servicemanifest voor de ASP.NET Core-webfront-endservice van de voorbeeldtoepassing Voting (en hier volgen enkele gedetailleerdere voorbeelden):

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="VotingWebPkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="https://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <!-- This is the name of your ServiceType. 
         This name must match the string used in RegisterServiceType call in Program.cs. -->
    <StatelessServiceType ServiceTypeName="VotingWebType" />
  </ServiceTypes>

  <!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>VotingWeb.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

  <!-- Config package is the contents of the Config directory under PackageRoot that contains an 
       independently-updateable and versioned set of custom configuration settings for your service. -->
  <ConfigPackage Name="Config" Version="1.0.0" />

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" />
    </Endpoints>
  </Resources>
</ServiceManifest>

Versiekenmerken zijn ongestructureerde tekenreeksen en worden niet geparseerd door het systeem. Versiekenmerken worden gebruikt om elk onderdeel te versien voor upgrades.

ServiceTypes declareert welke servicetypen worden ondersteund door CodePackages in dit manifest. Wanneer een service wordt geïnstantieerd op basis van een van deze servicetypen, worden alle codepakketten die in dit manifest zijn gedeclareerd, geactiveerd door hun toegangspunten uit te voeren. De resulterende processen worden verwacht de ondersteunde servicetypen tijdens runtime te registreren. Servicetypen worden gedeclareerd op manifestniveau en niet op codepakketniveau. Dus wanneer er meerdere codepakketten zijn, worden ze allemaal geactiveerd wanneer het systeem zoekt naar een van de gedeclareerde servicetypen.

Het uitvoerbare bestand dat is opgegeven door EntryPoint , is doorgaans de langlopende servicehost. SetupEntryPoint is een bevoegd toegangspunt dat wordt uitgevoerd met dezelfde referenties als Service Fabric (meestal het LocalSystem-account ) vóór een ander toegangspunt. De aanwezigheid van een afzonderlijk installatieinvoerpunt voorkomt dat u de servicehost met hoge bevoegdheden gedurende langere tijd moet uitvoeren. Het uitvoerbare bestand dat is opgegeven door EntryPoint , wordt uitgevoerd nadat SetupEntryPoint is afgesloten. Als het proces ooit wordt beëindigd of vastloopt, wordt het resulterende proces bewaakt en opnieuw gestart (te beginnen met SetupEntryPoint).

Typische scenario's voor het gebruik van SetupEntryPoint zijn wanneer u een uitvoerbaar bestand uitvoert voordat de service wordt gestart of als u een bewerking met verhoogde bevoegdheden uitvoert. Voorbeeld:

  • Omgevingsvariabelen instellen en initialiseren die het uitvoerbare bestand van de service nodig heeft. Dit is niet beperkt tot alleen uitvoerbare bestanden die zijn geschreven via de Service Fabric-programmeermodellen. Npm.exe heeft bijvoorbeeld een aantal omgevingsvariabelen nodig die zijn geconfigureerd voor het implementeren van een Node.js-toepassing.
  • Toegangsbeheer instellen door beveiligingscertificaten te installeren.

Zie Het beleid configureren voor een service-installatiepunt voor meer informatie over het configureren van SetupPoint.

EnvironmentVariables (niet ingesteld in het voorgaande voorbeeld) bevat een lijst met omgevingsvariabelen die zijn ingesteld voor dit codepakket. Omgevingsvariabelen kunnen worden overschreven in de ApplicationManifest.xml om verschillende waarden voor verschillende service-exemplaren te bieden.

DataPackage (niet ingesteld in het vorige voorbeeld) declareert een map, met de naam van het kenmerk Naam , die willekeurige statische gegevens bevat die tijdens runtime door het proces moeten worden gebruikt.

ConfigPackage declareert een map met denaam die een Instellingen.xml bestand bevat. Het instellingenbestand bevat secties van door de gebruiker gedefinieerde sleutel-waardepaarinstellingen die door het proces tijdens runtime worden gelezen. Als tijdens een upgrade alleen de versie ConfigPackagewordt gewijzigd, wordt het actieve proces niet opnieuw opgestart. In plaats daarvan meldt een callback het proces dat de configuratie-instellingen zijn gewijzigd, zodat ze dynamisch opnieuw kunnen worden geladen. Hier volgt een voorbeeld van Instellingen.xml bestand:

<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://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>

Een Service Fabric-service-eindpunt is een voorbeeld van een Service Fabric-resource. Een Service Fabric-resource kan worden gedeclareerd/gewijzigd zonder de gecompileerde code te wijzigen. Toegang tot de Service Fabric-resources die zijn opgegeven in het servicemanifest, kunnen worden beheerd via securitygroup in het toepassingsmanifest. Wanneer een eindpuntresource is gedefinieerd in het servicemanifest, wijst Service Fabric poorten toe vanuit het poortbereik van de gereserveerde toepassing wanneer er niet expliciet een poort wordt opgegeven. Lees meer over het opgeven of overschrijven van eindpuntresources.

Waarschuwing

Statische poorten mogen standaard niet overlappen met toepassingspoortbereik dat is opgegeven in het ClusterManifest. Als u een statische poort opgeeft, wijst u deze toe buiten het poortbereik van de toepassing, anders leidt dit tot poortconflicten. Met release 6.5CU2 geven we een statuswaarschuwing wanneer we een dergelijk conflict detecteren, maar laten we de implementatie gesynchroniseerd blijven met het verzonden 6.5-gedrag. We kunnen echter voorkomen dat de toepassing wordt geïmplementeerd in de volgende grote releases.

Een toepassing in ApplicationManifest.xml beschrijven

Het toepassingsmanifest beschrijft declaratief het toepassingstype en de versie. Hiermee worden metagegevens van de servicesamenstelling opgegeven, zoals stabiele namen, partitioneringsschema, aantal exemplaren/replicatiefactor, beveiligings-/isolatiebeleid, plaatsingsbeperkingen, configuratieoverschrijvingen en samenstellende servicetypen. De taakverdelingsdomeinen waarin de toepassing wordt geplaatst, worden ook beschreven.

Een toepassingsmanifest beschrijft dus elementen op toepassingsniveau en verwijst naar een of meer servicemanifesten om een toepassingstype op te stellen. Hier volgt het toepassingsmanifest voor de voorbeeldtoepassing Voting (en hier volgen enkele gedetailleerdere voorbeelden):

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="VotingData_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingData_PartitionCount" DefaultValue="1" />
    <Parameter Name="VotingData_TargetReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingWeb_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion 
       should match the Name and Version attributes of the ServiceManifest element defined in the 
       ServiceManifest.xml file. -->
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingDataPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <DefaultServices>
    <!-- The section below creates instances of service types, when an instance of this 
         application type is created. You can also create one or more instances of service type using the 
         ServiceFabric PowerShell module.
         
         The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
    <Service Name="VotingData">
      <StatefulService ServiceTypeName="VotingDataType" TargetReplicaSetSize="[VotingData_TargetReplicaSetSize]" MinReplicaSetSize="[VotingData_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[VotingData_PartitionCount]" LowKey="0" HighKey="25" />
      </StatefulService>
    </Service>
    <Service Name="VotingWeb" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="VotingWebType" InstanceCount="[VotingWeb_InstanceCount]">
        <SingletonPartition />
         <PlacementConstraints>(NodeType==NodeType0)</PlacementConstraints
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

Net als bij servicemanifesten zijn versiekenmerken ongestructureerde tekenreeksen en worden ze niet geparseerd door het systeem. Versiekenmerken worden ook gebruikt om elk onderdeel te versien voor upgrades.

Parameters definiëren de parameters die in het toepassingsmanifest worden gebruikt. De waarden van deze parameters kunnen worden opgegeven wanneer de toepassing wordt geïnstantieerd en de configuratie-instellingen van de toepassing of service kunnen overschrijven. De standaardparameterwaarde wordt gebruikt als de waarde niet wordt gewijzigd tijdens de instantiëring van de toepassing. Zie Toepassingsparameters voor meerdere omgevingen beheren voor meer informatie over het onderhouden van verschillende toepassings- en serviceparameters voor afzonderlijke omgevingen.

ServiceManifestImport bevat verwijzingen naar servicemanifesten die dit toepassingstype opstellen. Een toepassingsmanifest kan meerdere servicemanifestimporten bevatten en elke manifest kan onafhankelijk van elkaar worden geversied. Geïmporteerde servicemanifesten bepalen welke servicetypen geldig zijn binnen dit toepassingstype. In ServiceManifestImport overschrijft u configuratiewaarden in Instellingen.xml en omgevingsvariabelen in ServiceManifest.xml bestanden. Beleidsregels (niet ingesteld in het voorgaande voorbeeld) voor eindpuntbinding, beveiliging en toegang en het delen van pakketten kunnen worden ingesteld op geïmporteerde servicemanifesten. Zie Beveiligingsbeleid voor uw toepassing configureren voor meer informatie.

DefaultServices declareert service-exemplaren die automatisch worden gemaakt wanneer een toepassing wordt geïnstantieerd op basis van dit toepassingstype. Standaardservices zijn slechts een gemak en gedragen zich in elk opzicht als normale services nadat ze zijn gemaakt. Ze worden samen met andere services in het toepassingsexemplaren bijgewerkt en kunnen ook worden verwijderd. Een toepassingsmanifest kan meerdere standaardservices bevatten.

Waarschuwing

DefaultServices is afgeschaft ten gunste van StartupServices.xml. Meer informatie over StartupServices.xml vindt u in Inleiding tot StartupServices.xml in de Service Fabric-toepassing.

Certificaten (niet ingesteld in het vorige voorbeeld) declareren de certificaten die worden gebruikt voor het instellen van HTTPS-eindpunten of het versleutelen van geheimen in het toepassingsmanifest.

Plaatsingsbeperkingen zijn de instructies die bepalen waar services moeten worden uitgevoerd. Deze instructies worden gekoppeld aan afzonderlijke services die u selecteert voor een of meer knooppunteigenschappen. Zie Plaatsingsbeperkingen en syntaxis van knooppunteigenschappen voor meer informatie.

Beleidsregels (niet ingesteld in het voorgaande voorbeeld) beschrijven de logboekverzameling, het standaarduitvoeringsbeleid, de status en het beveiligingstoegangsbeleid dat moet worden ingesteld op toepassingsniveau, inclusief of de service(s) toegang hebben tot de Service Fabric-runtime.

Notitie

Een Service Fabric-cluster is standaard één tenant en gehoste toepassingen worden beschouwd als vertrouwd. Als u overweegt om niet-vertrouwde toepassingen te hosten, raadpleegt u Niet-vertrouwde toepassingen hosten in een Service Fabric-cluster.

Principals (niet ingesteld in het vorige voorbeeld) beschrijven de beveiligingsprincipals (gebruikers of groepen) die nodig zijn voor het uitvoeren van services en beveiligde servicebronnen. In de sectie Beleidsregels wordt verwezen naar principals.

Volgende stappen