Manifesty aplikací a služeb Service Fabric
Tento článek popisuje, jak jsou definovány a verze aplikací a služeb Service Fabric pomocí ApplicationManifest.xml a ServiceManifest.xml souborů. Podrobnější příklady najdete v příkladech manifestu aplikací a služeb. Schéma XML pro tyto soubory manifestu je dokumentováno v dokumentaci ke schématu ServiceFabricServiceModel.xsd.
Upozorňující
Schéma souboru XML manifestu vynucuje správné řazení podřízených elementů. Jako částečné alternativní řešení otevřete v sadě Visual Studio soubor C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd při vytváření nebo úpravách některého z manifestů Service Fabric. To vám umožní zkontrolovat pořadí podřízených prvků a poskytuje intelli-sense.
Popis služby v ServiceManifest.xml
Manifest služby deklarativně definuje typ a verzi služby. Určuje metadata služby, jako je typ služby, vlastnosti stavu, metriky vyrovnávání zatížení, binární soubory služby a konfigurační soubory. Jinak popisuje kód, konfiguraci a datové balíčky, které tvoří balíček služby pro podporu jednoho nebo více typů služeb. Manifest služby může obsahovat více balíčků kódu, konfigurace a dat, které lze nezávisle na verzích. Tady je manifest služby pro webovou front-end službu ASP.NET Core ukázkové aplikace Voting (a tady je několik podrobnějších příkladů):
<?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>
Atributy verze jsou nestrukturované řetězce, které systém neanalyzuje. Atributy verze se používají k verzi každé součásti pro upgrady.
ServiceTypes deklaruje, jaké typy služeb jsou v tomto manifestu podporovány balíčky CodePackage. Když se služba vytvoří instance pro jeden z těchto typů služeb, aktivují se všechny balíčky kódu deklarované v tomto manifestu spuštěním vstupních bodů. Očekává se, že výsledné procesy zaregistrují podporované typy služeb za běhu. Typy služeb jsou deklarovány na úrovni manifestu, nikoli na úrovni balíčku kódu. Pokud tedy existuje více balíčků kódu, jsou všechny aktivovány vždy, když systém hledá některý z deklarovaných typů služeb.
Spustitelný soubor určený EntryPointem je obvykle dlouhotrvajícím hostitelem služby. SetupEntryPoint je privilegovaný vstupní bod, který běží se stejnými přihlašovacími údaji jako Service Fabric (obvykle účet LocalSystem ) před jakýmkoli jiným vstupním bodem. Přítomnost samostatného vstupního bodu nastavení zabraňuje spuštění hostitele služby s vysokými oprávněními po delší dobu. Spustitelný soubor zadaný entrypointem se spustí po úspěšném ukončení setupEntryPointu . Pokud se proces někdy ukončí nebo dojde k chybovému ukončení, výsledný proces se monitoruje a restartuje (počínaje aplikací SetupEntryPoint).
Typické scénáře použití SetupEntryPoint jsou, když spustíte spustitelný soubor před spuštěním služby nebo provedete operaci se zvýšenými oprávněními. Příklad:
- Nastavení a inicializace proměnných prostředí, které potřebuje spustitelný soubor služby To se neomezuje jenom na spustitelné soubory napsané prostřednictvím programovacích modelů Service Fabric. Například npm.exe potřebuje některé proměnné prostředí nakonfigurované pro nasazení Node.js aplikace.
- Nastavení řízení přístupu instalací certifikátů zabezpečení
Další informace o tom, jak nakonfigurovat SetupEntryPoint, naleznete v tématu Konfigurace zásad pro vstupní bod nastavení služby.
EnvironmentVariables (není nastaveno v předchozím příkladu) poskytuje seznam proměnných prostředí, které jsou nastaveny pro tento balíček kódu. Proměnné prostředí je možné přepsat tak ApplicationManifest.xml
, aby poskytovaly různé hodnoty pro různé instance služby.
DataPackage (nenastaveno v předchozím příkladu) deklaruje složku pojmenovanou atributem Name , která obsahuje libovolná statická data, která má proces za běhu využívat.
ConfigPackage deklaruje složku pojmenovanou atributem Name , která obsahuje soubor Settings.xml . Soubor nastavení obsahuje oddíly uživatelem definovaného páru klíč-hodnota, které proces přečte za běhu. Pokud se během upgradu změní jenom verze balíčku ConfigPackage, pak se spuštěný proces nerestartuje. Místo toho zpětné volání upozorní proces, že se změnilo nastavení konfigurace, aby bylo možné je dynamicky načíst. Tady je příklad souboru Settings.xml :
<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>
Příkladem prostředku Service Fabric je koncový bod služby Service Fabric. Prostředek Service Fabric lze deklarovat nebo měnit beze změny zkompilovaného kódu. Přístup k prostředkům Service Fabric, které jsou zadané v manifestu služby, je možné řídit prostřednictvím skupiny zabezpečení v manifestu aplikace. Pokud je prostředek koncového bodu definovaný v manifestu služby, Service Fabric přiřadí porty z vyhrazeného rozsahu portů aplikace, pokud není port explicitně zadaný. Přečtěte si další informace o zadávání nebo přepsání prostředků koncového bodu.
Upozorňující
Statické porty by se neměly překrývat s rozsahem portů aplikace zadaným v ClusterManifestu. Pokud zadáte statický port, přiřaďte ho mimo rozsah portů aplikace, jinak dojde ke konfliktům portů. Ve verzi 6.5CU2 vydáme upozornění na stav, když zjistíme takový konflikt, ale necháme nasazení pokračovat v synchronizaci s chováním expedované verze 6.5. Nasazení aplikace však můžeme zabránit v dalších hlavních verzích.
Popis aplikace v ApplicationManifest.xml
Manifest aplikace deklarativní popisuje typ a verzi aplikace. Určuje metadata složení služeb, jako jsou stabilní názvy, schéma dělení, počet instancí/ faktor replikace, zásady zabezpečení/izolace, omezení umístění, přepsání konfigurace a typy základních služeb. Domény vyrovnávání zatížení, do kterých je aplikace umístěná, jsou popsány také.
Manifest aplikace proto popisuje prvky na úrovni aplikace a odkazuje na jeden nebo více manifestů služby k vytvoření typu aplikace. Tady je manifest aplikace pro ukázkovou aplikaci Voting (a tady je několik podrobnějších příkladů):
<?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>
Podobně jako manifesty služby jsou atributy verze nestrukturované řetězce a systém je neanalyzuje. Atributy verze se také používají k verzi každé komponenty pro upgrady.
Parametry definují parametry použité v manifestu aplikace. Hodnoty těchto parametrů lze zadat při vytvoření instance aplikace a může přepsat nastavení konfigurace aplikace nebo služby. Výchozí hodnota parametru se použije, pokud se hodnota během vytváření instance aplikace nezmění. Informace o tom, jak udržovat různé parametry aplikace a služby pro jednotlivá prostředí, najdete v tématu Správa parametrů aplikace pro více prostředí.
ServiceManifestImport obsahuje odkazy na manifesty služby, které tvoří tento typ aplikace. Manifest aplikace může obsahovat více importů manifestu služby a každý z nich může být nezávisle na verzích. Importované manifesty služby určují, jaké typy služeb jsou platné v rámci tohoto typu aplikace. V rámci ServiceManifestImport přepíšete konfigurační hodnoty v Settings.xml a proměnných prostředí v ServiceManifest.xml souborech. Zásady (nenastavované v předchozím příkladu) pro vazby koncového bodu, zabezpečení a přístup a sdílení balíčků je možné nastavit u importovaných manifestů služby. Další informace najdete v tématu Konfigurace zásad zabezpečení pro vaši aplikaci.
DefaultServices deklaruje instance služby, které se automaticky vytvoří při každé instanci aplikace pro tento typ aplikace. Výchozí služby jsou jen pohodlí a chovají se jako normální služby v každém ohledu po jejich vytvoření. Upgradují se spolu s dalšími službami v instanci aplikace a dají se také odebrat. Manifest aplikace může obsahovat více výchozích služeb.
Upozorňující
DefaultServices je zastaralá ve prospěch StartupServices.xml
. O StartupServices.xml si můžete přečíst v tématu Úvod StartupServices.xml v aplikaci Service Fabric.
Certifikáty (nenastavované v předchozím příkladu) deklarují certifikáty použité k nastavení koncových bodů HTTPS nebo šifrování tajných kódů v manifestu aplikace.
Omezení umístění jsou příkazy, které definují, kde se mají služby spouštět. Tyto příkazy jsou připojené k jednotlivým službám, které vyberete pro jednu nebo více vlastností uzlu. Další informace naleznete v tématu Omezení umístění a syntaxe vlastností uzlu.
Zásady (nenastavené v předchozím příkladu) popisují shromažďování protokolů, výchozí zásady spuštění jako, stav a zabezpečení , které se mají nastavit na úrovni aplikace, včetně toho, jestli mají služby přístup k modulu runtime Service Fabric.
Poznámka:
Cluster Service Fabric je jedním tenantem podle návrhu a hostované aplikace jsou považovány za důvěryhodné. Pokud uvažujete o hostování nedůvěryhodných aplikací, přečtěte si téma Hostování nedůvěryhodných aplikací v clusteru Service Fabric.
Objekty zabezpečení (nejsou nastavené v předchozím příkladu) popisují objekty zabezpečení (uživatele nebo skupiny) potřebné ke spouštění služeb a zabezpečených prostředků služeb. Na objekty zabezpečení se odkazuje v oddílech Zásady .
Další kroky
- Zabalte aplikaci a připravte ji k nasazení.
- V aplikaci použijte StartupServices.xml.
- Nasaďte a odeberte aplikace.
- Nakonfigurujte parametry a proměnné prostředí pro různé instance aplikace.
- Nakonfigurujte zásady zabezpečení pro vaši aplikaci.
- Nastavení koncových bodů HTTPS
- Šifrování tajných kódů v manifestu aplikace
- Osvědčené postupy zabezpečení Azure Service Fabric