Service Fabric-program och tjänstmanifest

Den här artikeln beskriver hur Service Fabric-program och -tjänster definieras och versionshanteras med hjälp av ApplicationManifest.xml- och ServiceManifest.xml-filerna. Mer detaljerade exempel finns i exempel på program- och tjänstmanifest. XML-schemat för dessa manifestfiler dokumenteras i dokumentationen för ServiceFabricServiceModel.xsd-schema.

Varning

Manifest-XML-filschemat framtvingar korrekt ordning av underordnade element. Som en partiell lösning öppnar du "C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd" i Visual Studio när du redigerar eller ändrar något av Service Fabric-manifesten. På så sätt kan du kontrollera ordningen på underordnade element och ger intelli-sense.

Beskriva en tjänst i ServiceManifest.xml

Tjänstmanifestet definierar deklarativt tjänsttypen och versionen. Den anger tjänstmetadata som tjänsttyp, hälsoegenskaper, belastningsutjämningsmått, tjänstbinärfiler och konfigurationsfiler. På ett annat sätt beskrivs de kod-, konfigurations- och datapaket som utgör ett tjänstpaket för att stödja en eller flera tjänsttyper. Ett tjänstmanifest kan innehålla flera kod-, konfigurations- och datapaket som kan versionshanteras separat. Här är ett tjänstmanifest för ASP.NET Core-webbklientdelstjänsten för exempelprogrammet Voting (och här följer några mer detaljerade exempel):

<?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>

Versionsattribut är ostrukturerade strängar och tolkas inte av systemet. Versionsattribut används för att version varje komponent för uppgraderingar.

ServiceTypes deklarerar vilka tjänsttyper som stöds av CodePackages i det här manifestet. När en tjänst instansieras mot någon av dessa tjänsttyper aktiveras alla kodpaket som deklareras i det här manifestet genom att deras startpunkter körs. De resulterande processerna förväntas registrera de tjänsttyper som stöds vid körning. Tjänsttyper deklareras på manifestnivå och inte på kodpaketnivå. Så när det finns flera kodpaket aktiveras alla när systemet letar efter någon av de deklarerade tjänsttyperna.

Den körbara fil som anges av EntryPoint är vanligtvis den långvariga tjänstvärden. SetupEntryPoint är en privilegierad startpunkt som körs med samma autentiseringsuppgifter som Service Fabric (vanligtvis LocalSystem-kontot ) före någon annan startpunkt. Förekomsten av en separat startpunkt för installation undviker att behöva köra tjänstvärden med hög behörighet under längre tidsperioder. Den körbara fil som anges av EntryPoint körs när SetupEntryPoint avslutas. Om processen någonsin avslutas eller kraschar övervakas den resulterande processen och startas om (börjar igen med SetupEntryPoint).

Vanliga scenarier för att använda SetupEntryPoint är när du kör en körbar fil innan tjänsten startar eller om du utför en åtgärd med förhöjd behörighet. Till exempel:

  • Konfigurera och initiera miljövariabler som den körbara tjänsten behöver. Detta är inte begränsat till endast körbara filer som skrivits via Service Fabric-programmeringsmodellerna. Npm.exe behöver till exempel vissa miljövariabler som konfigurerats för att distribuera ett Node.js program.
  • Konfigurera åtkomstkontroll genom att installera säkerhetscertifikat.

Mer information om hur du konfigurerar SetupEntryPoint finns i Konfigurera principen för en startpunkt för tjänstkonfiguration.

EnvironmentVariables (anges inte i föregående exempel) innehåller en lista över miljövariabler som har angetts för det här kodpaketet. Miljövariabler kan åsidosättas i ApplicationManifest.xml för att ange olika värden för olika tjänstinstanser.

DataPackage (som inte anges i föregående exempel) deklarerar en mapp med namnet namnattributet, som innehåller godtyckliga statiska data som ska användas av processen vid körning.

ConfigPackage deklarerar en mapp med namnet namnattributetsom innehåller en Inställningar.xml fil. Inställningsfilen innehåller avsnitt av användardefinierade nyckel/värde-parinställningar som processen läser tillbaka vid körning. Om endast ConfigPackage-versionen ändras under en uppgradering startas inte körningsprocessen om. I stället meddelar ett återanrop processen att konfigurationsinställningarna har ändrats så att de kan läsas in dynamiskt igen. Här är ett exempel Inställningar.xml fil:

<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>

En Service Fabric Service-slutpunkt är ett exempel på en Service Fabric-resurs. En Service Fabric-resurs kan deklareras/ändras utan att den kompilerade koden ändras. Åtkomst till Service Fabric-resurser som anges i tjänstmanifestet kan styras via SecurityGroup i programmanifestet. När en slutpunktsresurs definieras i tjänstmanifestet tilldelar Service Fabric portar från det reserverade programportintervallet när en port inte uttryckligen anges. Läs mer om att ange eller åsidosätta slutpunktsresurser.

Varning

Statiska portar bör inte överlappa med programportintervallet som anges i ClusterManifest. Om du anger en statisk port tilldelar du den utanför programmets portintervall, annars uppstår portkonflikter. Med version 6.5CU2 utfärdar vi en hälsovarning när vi identifierar en sådan konflikt, men låter distributionen fortsätta synkroniseras med det levererade 6.5-beteendet. Vi kan dock förhindra programdistributionen från nästa större versioner.

Beskriva ett program i ApplicationManifest.xml

Programmanifestet beskriver deklarativt programtypen och versionen. Den anger metadata för tjänstsammansättning, till exempel stabila namn, partitioneringsschema, instansantal/replikeringsfaktor, säkerhets-/isoleringsprincip, placeringsbegränsningar, konfigurations åsidosättningar och komponenttjänsttyper. De belastningsutjämningsdomäner som programmet placeras i beskrivs också.

Ett programmanifest beskriver därför element på programnivå och refererar till ett eller flera tjänstmanifest för att skapa en programtyp. Här är programmanifestet för exempelprogrammet Röstning (och här följer några mer detaljerade exempel):

<?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>

Precis som tjänstmanifest är versionsattribut ostrukturerade strängar och parsas inte av systemet. Versionsattribut används också för att version varje komponent för uppgraderingar.

Parametrar definierar de parametrar som används i hela programmanifestet. Värdena för dessa parametrar kan anges när programmet instansieras och kan åsidosätta inställningar för program- eller tjänstkonfiguration. Standardparametervärdet används om värdet inte ändras under programinstansieringen. Information om hur du underhåller olika program- och tjänstparametrar för enskilda miljöer finns i Hantera programparametrar för flera miljöer.

ServiceManifestImport innehåller referenser till tjänstmanifest som utgör den här programtypen. Ett programmanifest kan innehålla flera importer av tjänstmanifest och var och en kan versionshanteras separat. Importerade tjänstmanifest avgör vilka tjänsttyper som är giltiga inom den här programtypen. I ServiceManifestImport åsidosätter du konfigurationsvärden i Inställningar.xml- och miljövariabler i ServiceManifest.xml filer. Principer (anges inte i föregående exempel) för slutpunktsbindning, säkerhet och åtkomst samt paketdelning kan anges på importerade tjänstmanifest. Mer information finns i Konfigurera säkerhetsprinciper för ditt program.

DefaultServices deklarerar tjänstinstanser som skapas automatiskt när ett program instansieras mot den här programtypen. Standardtjänster är bara en bekvämlighet och fungerar som normala tjänster i alla avseenden efter att de har skapats. De uppgraderas tillsammans med andra tjänster i programinstansen och kan också tas bort. Ett programmanifest kan innehålla flera standardtjänster.

Varning

DefaultServices är inaktuellt till förmån StartupServices.xmlför . Du kan läsa om StartupServices.xml i Introduktion till StartupServices.xml i Service Fabric-programmet.

Certifikat (anges inte i föregående exempel) deklarerar de certifikat som används för att konfigurera HTTPS-slutpunkter eller kryptera hemligheter i programmanifestet.

Placeringsbegränsningar är de instruktioner som definierar var tjänsterna ska köras. Dessa instruktioner är kopplade till enskilda tjänster som du väljer för en eller flera nodegenskaper. Mer information finns i Placeringsbegränsningar och nodegenskapssyntax.

Principer (som inte anges i föregående exempel) beskriver loggsamlingen, standardprinciperna för körning som, hälsa och säkerhet som ska anges på programnivå, inklusive om tjänsterna har åtkomst till Service Fabric-körningen.

Kommentar

Ett Service Fabric-kluster är en enskild klientorganisation och värdbaserade program anses vara betrodda. Om du överväger att vara värd för program som inte är betrodda kan du läsa Värd för ej betrodda program i ett Service Fabric-kluster.

Huvudkonton (som inte anges i föregående exempel) beskriver de säkerhetsobjekt (användare eller grupper) som krävs för att köra tjänster och säkra tjänstresurser. Huvudnamn refereras till i avsnitten Principer .

Nästa steg