Копирование основного приложения DotNet в хранилище изображений в Service Fabric занимает много времени - PullRequest
0 голосов
/ 26 июня 2018

Приложение My Service Fabric (все приложения .net core 2.1) состоит из 14 сервисов.После обработки пакета в моей сборке VSTS я замечаю, что каждая служба имеет около 100 МБ, что дает 1,4 ГБ (ish) для общего объема.

Следствием этого является то, что при копировании файлов пакета происходитмного времени!Около 10 минут для фазы «Копирование приложения в хранилище изображений ...».

Глядя на пакет, кажется, что он включает в себя сборки .net core 2.1 framework, и я думаю, именно поэтому каждый пакет услугтакой большой.

Строго необходимо, чтобы процесс пакета включал компоненты платформы .net core 2.1?Есть ли способ упаковать его без каркаса ядра .net, и если я это сделаю, есть ли способ установить каркас .net на все виртуальные машины кластера сервисной фабрики и поддерживать эту платформу в актуальном состоянии?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

У нас похожая ситуация, когда при попытке выгрузки пакета в хранилище образов время развертывания приложения Service Fabric со многими микросервисами истекает.

Для .net core 2.2 можно развернуть исполняемый файл, зависящий от фреймворка (FDE) , который удаляет среду .net из вашей выходной папки.Он ведет себя именно так, как работал бы исполняемый файл .net full Framework.TL;DR; выполните следующие действия:

  • Добавьте <SelfContained>True</SelfContained> в csproj (или, если вы публикуете dotnet publish, используйте флаг --self-contained false

Дополнительная оптимизация заключается виспользуйте целевой файл манифеста для зависимостей. Подробнее об этом можно узнать в хранилище пакетов времени выполнения docs.
Это можно использовать для удаления зависимости SwashBuckle (10 МБ) из ваших служб и просто разверните ее в целевой системе.окружение.

Для проектов Service Fabric Actor, как @ morten-fischer-madsen предлагает в одном из комментариев выше, вам необходимо:

  • Установить <UpdateServiceFabricManifestEnabled>False</UpdateServiceFabricManifestEnabled> в вашем csproj илиудалите его, иначе сборка не удастся из-за Microsoft.ServiceFabric.Actors nuget, например
The command "dotnet "obj\\FabActUtilTemp\FabActUtil.dll" /spp:"PackageRoot" /t:manifest /sp:"Actor1" /in:"bin\Debug\netcoreapp2.2\win7-x64\\Actor1.dll" /arp:"C:\Users\%username%\source\repos\Application1\Actor1\bin\Debug\netcoreapp2.2\win7-x64\\" " exited with code -2147450745.
Actor1
C:\Users\%username%\.nuget\packages\microsoft.servicefabric.actors\3.3.654\build\netcoreapp2.0\Microsoft.ServiceFabric.Actors.targets
22

Я открыл ошибку для этого здесь

0 голосов
/ 26 июня 2018

См. repo , чтобы узнать, как пропустить включение среды выполнения как части пакета.Мы используем очень похожий метод для нашего приложения, состоящего из 32 служб .Net Core 2.0, которые уменьшили размер нашего пакета с ~ 2,5 ГБ до ~ 600 МБ.

Это, однако, означает, что нам нужно установить среды выполнения (.NetCore и ASP.Net Core) вручную на каждом из SF-узлов.Если кто-то знает, как автоматизировать эту часть, я тоже очень заинтересован в этом.

...