Aracılığıyla paylaş


Mevcut yürütülebilir dosyayı paketleme ve Service Fabric'e dağıtma

Mevcut bir yürütülebilir dosyayı konuk yürütülebilir dosyası olarak paketlerken, Visual Studio proje şablonu kullanmayı veya uygulama paketini el ile oluşturmayı seçebilirsiniz. Visual Studio kullanılarak, uygulama paketi yapısı ve bildirim dosyaları sizin için yeni proje şablonu tarafından oluşturulur.

Tavsiye

Var olan bir Windows yürütülebilir dosyasını bir hizmete paketlemenin en kolay yolu Visual Studio kullanmak; Linux'ta ise Yeoman kullanmaktır.

Mevcut yürütülebilir dosyayı paketlemek ve dağıtmak için Visual Studio kullanma

Visual Studio, bir Service Fabric kümesine konuk yürütülebilir dosyası dağıtmanıza yardımcı olacak bir Service Fabric hizmet şablonu sağlar.

  1. Dosya>Yeni Proje'yi seçin ve bir Service Fabric uygulaması oluşturun.
  2. Hizmet şablonu olarak Guest Yürütülebilir'i seçin.
  3. Hizmeti oluşturmak için, yürütülebilir dosyanızın bulunduğu klasörü seçip diğer parametreleri doldurmak üzere Gözat seçeneğine tıklayın.
    • Kod Paketi Davranışı. Klasörünüzün tüm içeriğini Visual Studio Projesine kopyalanacak şekilde ayarlanabilir; bu, yürütülebilir dosya değişmezse yararlıdır. Yürütülebilir dosyanın değişmesini bekliyorsanız ve yeni derlemeleri dinamik olarak alabilmeyi istiyorsanız, bunun yerine klasöre bağlanmayı seçebilirsiniz. Visual Studio'da uygulama projesi oluştururken bağlı klasörleri kullanabilirsiniz. Bu, projenin içinden kaynak konumuna bir bağlantı kurar ve konuk yürütülebilir dosyasını kaynak konumunda güncelleştirmenizi mümkün hale getirir. Bu güncelleştirmeler derlemedeki uygulama paketinin bir parçası haline gelir.
    • Program , hizmeti başlatmak için çalıştırılması gereken yürütülebilir dosyayı belirtir.
    • Bağımsız değişkenler yürütülebilir dosyaya geçirilmesi gereken bağımsız değişkenleri belirtir. Bağımsız değişkenler içeren bir parametre listesi olabilir.
    • WorkingFolder , başlatılacak işlem için çalışma dizinini belirtir. Üç değer belirtebilirsiniz:
      • CodeBase çalışma dizininin uygulama paketindeki kod dizinine (Code önceki dosya yapısında gösterilen dizin) ayarlandığını belirtir.
      • CodePackage çalışma dizininin uygulama paketinin köküne ayarlandığını belirtir (GuestService1Pkg önceki dosya yapısında gösterilir).
      • Work dosyaların work adlı bir alt dizine yerleştirildiğini belirtir.
  4. Hizmetinize bir ad verin ve Tamam'a tıklayın.
  5. Hizmetinizin iletişim için bir uç noktaya ihtiyacı varsa, artık protokolü, bağlantı noktasını ve türü ServiceManifest.xml dosyasına ekleyebilirsiniz. Örneğin: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.
  6. Artık Visual Studio'da çözümün hatalarını ayıklayarak yerel kümenizde paket ve yayımlama eylemini kullanabilirsiniz. Hazır olduğunuzda, uygulamayı uzak bir kümede yayımlayabilir veya çözümü kaynak denetimine iade edebilirsiniz.
  7. Service Fabric Explorer'da çalışan konuk yürütülebilir hizmetinizi nasıl görüntüleyebileceğinizi görmek için çalışan uygulamanızı denetleyin bölümünü okuyun.

Örnek bir izlenecek yol için bkz. Visual Studio kullanarak ilk konuk yürütülebilir uygulamanızı oluşturma.

Visual Studio ile birden çok yürütülebilir dosyayı paketleme

Birden çok konuk yürütülebilir dosyası içeren bir uygulama paketi oluşturmak için Visual Studio'yu kullanabilirsiniz. İlk konuk yürütülebilir dosyasını ekledikten sonra, uygulama projesine sağ tıklayın ve çözüme ikinci konuk yürütülebilir projesini eklemek için Yeni Ekle> Service Fabric hizmetini seçin.

Uyarı

Visual Studio projesindeki kaynağı bağlamayı seçerseniz, Visual Studio çözümünü derlemek, uygulama paketinizin kaynaktaki değişikliklerle güncel olmasını sağlar.

Linux'ta var olan bir yürütülebilir dosyayı paketlemek ve dağıtmak için Yeoman kullanma

Linux'ta konuk yürütülebilir dosyası oluşturma ve dağıtma yordamı, C# veya Java uygulaması dağıtmakla aynıdır.

  1. Terminale yazın yo azuresfguest.
  2. Uygulamanızı adlandırın.
  3. Hizmetinizi adlandırın ve yürütülebilir dosyanın yolu ve çağrılması gereken parametreler de dahil olmak üzere ayrıntıları sağlayın.

Yeoman, uygun uygulama ve manifesto dosyalarıyla birlikte yükleme ve kaldırma betikleri içeren bir uygulama paketi oluşturur.

Linux üzerinde Yeoman kullanarak birden çok yürütülebilir dosyayı paketleme

kullanılarak yoönceden oluşturulmuş bir uygulamaya başka bir hizmet eklemek için aşağıdaki adımları gerçekleştirin:

  1. Dizini var olan uygulamanın köküne değiştirin. Örneğin, cd ~/YeomanSamples/MyApplication, MyApplication Yeoman tarafından oluşturulan uygulamaysa.
  2. komutunu çalıştırın yo azuresfguest:AddService ve gerekli ayrıntıları sağlayın.

Mevcut yürütülebilir dosyayı el ile paketleme ve dağıtma

Konuk yürütülebilir dosyasını el ile paketleme işlemi aşağıdaki genel adımları temel alır:

  1. Paket dizin yapısını oluşturun.
  2. Uygulamanın kodunu ve yapılandırma dosyalarını ekleyin.
  3. Hizmet bildirim dosyasını düzenleyin.
  4. Uygulama bildirim dosyasını düzenleyin.

Paket dizin yapısını oluşturma

Azure Service Fabric Uygulamasını Paketleme bölümünde açıklandığı gibi dizin yapısını oluşturarak işe başlayabilirsiniz.

Uygulamanın kodunu ve yapılandırma dosyalarını ekleme

Dizin yapısını oluşturduktan sonra, uygulamanın kodunu ve yapılandırma dosyalarını kod ve yapılandırma dizinlerinin altına ekleyebilirsiniz. Kod veya yapılandırma dizinleri altında ek dizinler veya alt dizinler de oluşturabilirsiniz.

Service Fabric, uygulama kök dizininin içeriğinin bir xcopy kısmını yapar, bu nedenle en iyi iki dizin, kod ve ayar oluşturmak dışında kullanılacak önceden tanımlanmış bir yapı yoktur. (İsterseniz farklı adlar seçebilirsiniz. Diğer ayrıntılar sonraki bölümde yer almaktadır.)

Uyarı

Uygulamanın ihtiyaç duyduğu tüm dosyaları ve bağımlılıkları eklediğinizden emin olun. Service Fabric, uygulama paketinin içeriğini, uygulamanın hizmetlerinin dağıtılacağı kümedeki tüm düğümlere kopyalar. Paket, uygulamanın çalıştırması gereken tüm kodu içermelidir. Bağımlılıkların zaten yüklü olduğunu varsaymayın.

Hizmet bildirim dosyasını düzenleme

Sonraki adım, hizmet bildirimi dosyasını aşağıdaki bilgileri içerecek şekilde düzenlemektir:

  • Hizmet türünün adı. Bu, Service Fabric'in bir hizmeti tanımlamak için kullandığı bir kimliktir.
  • Uygulamayı başlatmak için kullanılacak komut (ExeHost).
  • Uygulamayı ayarlamak için çalıştırılması gereken tüm betikler (SetupEntrypoint).

Aşağıda bir ServiceManifest.xml dosyası örneği verilmiştir:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="NodeApp" Version="1.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true"/>
   </ServiceTypes>
   <CodePackage Name="code" Version="1.0.0.0">
      <SetupEntryPoint>
         <ExeHost>
             <Program>scripts\launchConfig.cmd</Program>
         </ExeHost>
      </SetupEntryPoint>
      <EntryPoint>
         <ExeHost>
            <Program>node.exe</Program>
            <Arguments>bin/www</Arguments>
            <WorkingFolder>CodePackage</WorkingFolder>
         </ExeHost>
      </EntryPoint>
   </CodePackage>
   <Resources>
      <Endpoints>
         <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
      </Endpoints>
   </Resources>
</ServiceManifest>

Aşağıdaki bölümler, dosyanın güncelleştirmeniz gereken farklı bölümlerinin üzerinden geçer.

ServiceType'ları Güncelleştirme

<ServiceTypes>
  <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
  • için ServiceTypeNameistediğiniz herhangi bir adı seçebilirsiniz. Değer, hizmeti tanımlamak için ApplicationManifest.xml dosyasında kullanılır.
  • UseImplicitHost="true" belirtin. Bu öznitelik Service Fabric'e hizmetin kendi içinde bulunan bir uygulamayı temel aldığı konusunda bilgi sağlar, bu nedenle Service Fabric'in tek yapması gereken bunu bir işlem olarak başlatmak ve sistem durumunu izlemektir.

CodePackage'i güncelleştirme

CodePackage öğesi, hizmet kodunun konumunu (ve sürümünü) belirtir.

<CodePackage Name="Code" Version="1.0.0.0">

Name öğesi, hizmet kodunu içeren uygulama paketindeki dizinin adını belirtmek için kullanılır. CodePackage ayrıca özniteliğine version sahiptir. Bu, kodun sürümünü belirtmek için kullanılabilir ve service Fabric'teki uygulama yaşam döngüsü yönetim altyapısı kullanılarak hizmetin kodunu yükseltmek için de kullanılabilir.

İsteğe bağlı: Kurulum Giriş Noktasını Güncelleştir

<SetupEntryPoint>
   <ExeHost>
       <Program>scripts\launchConfig.cmd</Program>
   </ExeHost>
</SetupEntryPoint>

SetupEntryPoint öğesi, hizmetin kodu başlatılmadan önce yürütülmesi gereken yürütülebilir dosyaları veya toplu iş dosyalarını belirtmek için kullanılır. bu isteğe bağlı bir adımdır, bu nedenle başlatma gerekli değilse eklenmesi gerekmez. Hizmet her yeniden başlatıldığında SetupEntryPoint yürütülür.

Tek bir SetupEntryPoint olduğundan, uygulamanın kurulumu birden çok betik gerektiriyorsa kurulum betiklerinin tek bir toplu iş dosyasında gruplanması gerekir. SetupEntryPoint herhangi bir dosya türünü yürütebilir: yürütülebilir dosyalar, toplu iş dosyaları ve PowerShell cmdlet'leri. Daha fazla ayrıntı için bkz. Kurulumu YapılandırmaEntryPoint.

Yukarıdaki örnekte, SetupEntryPoint kod dizininin alt dizininde scripts (WorkingFolder öğesinin CodeBase olarak ayarlandığı varsayılarak) bulunan adlı LaunchConfig.cmd bir toplu iş dosyası çalıştırır.

EntryPoint'i Güncelleştirme

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
  </ExeHost>
</EntryPoint>

EntryPoint Hizmet bildirimi dosyasındaki öğesi, hizmetin nasıl başlatılacağını belirtmek için kullanılır.

öğesi, ExeHost hizmeti başlatmak için kullanılması gereken yürütülebilir dosyayı (ve bağımsız değişkenleri) belirtir. İsteğe bağlı olarak, programın kod paketinin dışında bir dış yürütülebilir dosya olduğunu belirtmek için ExeHost özniteliğini ekleyebilirsinizIsExternalExecutable="true". Örneğin, <ExeHost IsExternalExecutable="true">.

  • Program hizmeti başlatması gereken yürütülebilir dosyanın adını belirtir.
  • Arguments yürütülebilir dosyaya geçirilmesi gereken bağımsız değişkenleri belirtir. Bağımsız değişkenler içeren bir parametre listesi olabilir.
  • WorkingFolder başlatılacak işlem için çalışma dizinini belirtir. Üç değer belirtebilirsiniz:
    • CodeBase çalışma dizininin uygulama paketindeki kod dizinine (Code önceki dosya yapısındaki dizin) ayarlandığını belirtir.
    • CodePackage çalışma dizininin uygulama paketinin köküne (GuestService1Pkg önceki dosya yapısında) ayarlandığını belirtir.
      • Work dosyaların work adlı bir alt dizine yerleştirildiğini belirtir.

WorkingFolder, göreli yolların uygulama veya başlatma betikleri tarafından kullanılabilmesi için doğru çalışma dizinini ayarlamak için kullanışlıdır.

Uç Noktaları güncelleştirme ve iletişim için Adlandırma Hizmeti'ne kaydolma

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>

Yukarıdaki örnekte öğesi, Endpoint uygulamanın dinleyebileceği uç noktaları belirtir. Bu örnekte, Node.js uygulaması 3000 numaralı bağlantı noktasında http'yi dinler.

Ayrıca, diğer hizmetlerin bu hizmette uç nokta adresini bulabilmesi için Service Fabric'in bu uç noktayı Adlandırma Hizmeti'ne yayımlamasını isteyebilirsiniz. Bu, konuk yürütülebilir hizmetler arasında iletişim kurmanızı sağlar. Yayımlanan uç nokta adresi biçimindedir UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme ve PathSuffix isteğe bağlı özniteliklerdir. IPAddressOrFQDN, yürütülebilir dosyanın yerleştirildiği düğümün IP adresi veya tam etki alanı adıdır ve bu sizin için hesaplanır.

Aşağıdaki örnekte, hizmet dağıtıldıktan sonra Service Fabric Explorer'da hizmet örneği için yayımlanana http://10.1.4.92:3000/myapp/ benzer bir uç nokta görürsünüz. Veya bu yerel bir makineyse, http://localhost:3000/myapp/ görürsünüz.

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000"  UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>

Hizmetler arasında iletişim kurmak için bu adresleri ters proxy ile kullanabilirsiniz.

Uygulama bildirim dosyasını düzenleme

Dosyayı yapılandırdıktan Servicemanifest.xml sonra, doğru hizmet türünün ve adının kullanıldığından emin olmak için dosyada bazı değişiklikler ApplicationManifest.xml yapmanız gerekir.

<?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="NodeAppType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
   </ServiceManifestImport>
</ApplicationManifest>

ServiceManifestImport

öğesinde ServiceManifestImport , uygulamaya eklemek istediğiniz bir veya daha fazla hizmeti belirtebilirsiniz. Hizmetler, dosyanın bulunduğu ServiceManifest.xml dizinin adını belirten ServiceManifestName ile başvurulur.

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>

Günlük kaydını yapılandırma

Misafir çalıştırılabilir dosyalar için, uygulama ve yapılandırma betiklerinde hata olup olmadığını öğrenmek amacıyla konsol kayıtlarını görebilmek yararlıdır. Konsol yeniden yönlendirmesi, ConsoleRedirection öğesi kullanılarak ServiceManifest.xml dosyasında yapılandırılabilir.

Uyarı

Üretimde dağıtılan bir uygulamada, uygulamanın yük devretme işlevselliğini etkileyebileceğinden, asla konsol yönlendirme ilkesini kullanmayın. Bunu yalnızca yerel geliştirme ve hata ayıklama amacıyla kullanın.

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
    <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
  </ExeHost>
</EntryPoint>

ConsoleRedirection konsol çıkışını (hem stdout hem de stderr) çalışan bir dizine yeniden yönlendirmek için kullanılabilir. Bu, Service Fabric kümesinde uygulamanın kurulumu veya yürütülmesi sırasında hata olmadığını doğrulama olanağı sağlar.

FileRetentionCount çalışma dizinine kaç dosya kaydedildiğini belirler. Örneğin 5 değeri, önceki beş yürütmenin günlük dosyalarının çalışma dizininde depolandığı anlamına gelir.

FileMaxSizeInKb günlük dosyalarının maksimum boyutunu belirtir.

Günlük dosyaları hizmetin çalışma dizinlerinden birine kaydedilir. Dosyaların nerede bulunduğunu belirlemek için Hizmetin hangi düğümde çalıştığını ve hangi çalışma dizininin kullanıldığını belirlemek için Service Fabric Explorer'ı kullanın. Bu işlem, bu makalenin devamında ele alınmıştır.

Dağıtım

Son adım uygulamanızı dağıtmaktır. Aşağıdaki PowerShell betiğinde uygulamanızı yerel geliştirme kümesine dağıtma ve yeni bir Service Fabric hizmeti başlatma gösterilmektedir.


Connect-ServiceFabricCluster localhost:19000

Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath 'C:\Dev\MultipleApplications' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'nodeapp'

Write-Host 'Registering application type...'
Register-ServiceFabricApplicationType -ApplicationPathInImageStore 'nodeapp'

New-ServiceFabricApplication -ApplicationName 'fabric:/nodeapp' -ApplicationTypeName 'NodeAppType' -ApplicationTypeVersion 1.0

New-ServiceFabricService -ApplicationName 'fabric:/nodeapp' -ServiceName 'fabric:/nodeapp/nodeappservice' -ServiceTypeName 'NodeApp' -Stateless -PartitionSchemeSingleton -InstanceCount 1

Tavsiye

Paket büyükse veya çok sayıda dosyası varsa görüntü deposuna kopyalamadan önce paketi sıkıştırın. Daha fazla bilgi için buraya bakabilirsiniz.

Service Fabric hizmeti çeşitli "yapılandırmalarda" dağıtılabilir. Örneğin, tek veya birden çok örnek olarak dağıtılabilir veya Service Fabric kümesinin her düğümünde hizmetin bir örneği olacak şekilde dağıtılabilir.

InstanceCount Cmdlet'in New-ServiceFabricService parametresi, Service Fabric kümesinde hizmetin kaç örneğinin başlatılması gerektiğini belirtmek için kullanılır. Dağıttığınız InstanceCount uygulamanın türüne bağlı olarak değeri ayarlayabilirsiniz. En yaygın iki senaryo şunlardır:

  • InstanceCount = "1". Bu durumda, kümede hizmetin yalnızca bir örneği dağıtılır. Hizmetin hangi düğümde dağıtılacağı Service Fabric'in zamanlayıcısı tarafından belirlenir.
  • InstanceCount ="-1". Bu durumda hizmetin bir örneği Service Fabric kümesindeki her düğüme dağıtılır. Sonuç, kümedeki her düğüm için hizmetin bir (ve yalnızca bir) örneğine sahip olmaktır.

İstemci uygulamalarının uç noktayı kullanmak için kümedeki düğümlerden herhangi birine "bağlanması" gerektiğinden bu, ön uç uygulamalar (örneğin REST uç noktası) için kullanışlı bir yapılandırmadır. Bu yapılandırma, örneğin Service Fabric kümesinin tüm düğümleri bir yük dengeleyiciye bağlandığında da kullanılabilir. İstemci trafiği daha sonra kümedeki tüm düğümlerde çalışan hizmet arasında dağıtılabilir.

Çalışan uygulamanızı denetleme

Service Fabric Explorer'da hizmetin çalıştığı düğümü belirleyin. Bu örnekte Node1 üzerinde çalışır:

Hizmetin çalıştığı düğüm

Düğüme gidip uygulamaya göz atarsanız, disk üzerindeki konumu da dahil olmak üzere temel düğüm bilgilerini görürsünüz.

Disk üzerindeki konum

Sunucu Gezgini'ni kullanarak dizine göz atarsanız, aşağıdaki ekran görüntüsünde gösterildiği gibi çalışma dizinini ve hizmetin günlük klasörünü bulabilirsiniz:

Günlüğün konumu

Sonraki adımlar

Bu makalede, konuk yürütülebilir dosyasını paketlemeyi ve Service Fabric'e dağıtmayı öğrendiniz. İlgili bilgiler ve görevler için aşağıdaki makalelere bakın.