Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo descreve como migrar suas funções Web e de trabalho dos Serviços de Nuvem (suporte estendido) para serviços sem estado do Service Fabric. Este é o caminho de migração mais simples dos Serviços em Nuvem (suporte estendido) para o Service Fabric para aplicativos cuja arquitetura geral permanecerá aproximadamente a mesma.
Projeto de Serviços de Nuvem (suporte estendido) para projeto de aplicativo do Service Fabric
Um projeto de Serviço de Nuvem e um projeto de Aplicativo do Service Fabric têm uma estrutura semelhante e ambos representam a unidade de implantação do seu aplicativo - ou seja, cada um deles define o pacote completo que é implantado para executar seu aplicativo. Um projeto de Serviço de Nuvem contém uma ou mais Funções Web ou de Trabalho. Da mesma forma, um projeto de aplicativo do Service Fabric contém um ou mais serviços.
A diferença é que o projeto do Serviço de Nuvem associa a implantação do aplicativo a uma implantação de VM e, portanto, contém definições de configuração de VM nele, enquanto o projeto de Aplicativo do Service Fabric define apenas um aplicativo que será implantado em um conjunto de VMs existentes em um cluster do Service Fabric. O cluster do Service Fabric em si só é implantado uma vez, por meio de um modelo do Resource Manager ou do portal do Azure, e vários aplicativos do Service Fabric podem ser implantados nele.
Função de trabalhador para serviço sem estado
Conceitualmente, uma Função de Trabalho representa uma carga de trabalho sem monitoração de estado, o que significa que cada instância da carga de trabalho é idêntica e as solicitações podem ser roteadas para qualquer instância a qualquer momento. Não se espera que cada instância se lembre da solicitação anterior. O estado em que a carga de trabalho opera é gerenciado por um armazenamento de estado externo, como o Armazenamento de Tabela do Azure ou o Azure Cosmos DB. No Service Fabric, esse tipo de carga de trabalho é representado por um Serviço sem Estado. A abordagem mais simples para migrar uma Função de Trabalho para o Service Fabric consiste em converter o código da Função de Trabalho num serviço sem estado.
Função Web para serviço sem estado
Semelhante à Função de Trabalho, uma Função Web também representa uma carga de trabalho sem estado e, portanto, conceitualmente, ela também pode ser mapeada para um serviço sem estado do Service Fabric. No entanto, ao contrário das funções Web, o Service Fabric não oferece suporte ao IIS. Para migrar uma aplicação Web de uma Função Web para um serviço sem estado, é necessário primeiro mover para um framework da Web que possa ser hospedado localmente ou autogerido e não dependa do IIS ou do System.Web, como o ASP.NET Core 1.
Aplicação | Suportado | Caminho de migração |
---|---|---|
ASP.NET Web Forms | Não | Converter para ASP.NET Core 1 MVC |
ASP.NET MVC | Com a migração | Atualize para o ASP.NET Core 1 MVC |
API Web ASP.NET | Com a migração | Usar servidor auto-hospedado ou ASP.NET Core 1 |
ASP.NET Núcleo 1 | Sim | N/A |
API e ciclo de vida do ponto de entrada
As APIs de serviço do Cargo do Trabalhador e do Service Fabric oferecem pontos de entrada semelhantes.
Ponto de entrada | Função do trabalhador | Serviço do Service Fabric |
---|---|---|
Em processamento | Run() |
RunAsync() |
Início da VM | OnStart() |
N/A |
Interrupção de VM | OnStop() |
N/A |
Abrir ouvinte para os pedidos dos clientes | N/A |
|
Função do trabalhador
using Microsoft.WindowsAzure.ServiceRuntime;
namespace WorkerRole1
{
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
}
public override bool OnStart()
{
}
public override void OnStop()
{
}
}
}
Serviço sem estado do Service Fabric
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.ServiceFabric.Services.Communication.Runtime;
using Microsoft.ServiceFabric.Services.Runtime;
namespace Stateless1
{
public class Stateless1 : StatelessService
{
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
}
protected override Task RunAsync(CancellationToken cancelServiceInstance)
{
}
}
}
Ambos têm uma configuração primária 'Executar' na qual iniciar o processamento. Os serviços do Service Fabric combinam Run
, Start
e Stop
em um único ponto de entrada, RunAsync
. O seu serviço deve começar a funcionar quando RunAsync
for iniciado e deve parar de funcionar quando o CancellationToken do método RunAsync
for sinalizado.
Há várias diferenças importantes entre o ciclo de vida e o tempo de vida das funções de trabalho e dos serviços do Service Fabric:
- Ciclo de vida: a maior diferença é que uma Função de Trabalho é uma VM e, portanto, seu ciclo de vida está vinculado à VM, o que inclui eventos para quando a VM inicia e para. Um serviço do Service Fabric tem um ciclo de vida separado do ciclo de vida da VM, portanto, não inclui eventos para quando a VM ou a máquina do host inicia e para, pois eles não estão relacionados.
-
Tempo de vida: Uma instância de Worker Role será reciclada se o método
Run
for encerrado. ORunAsync
método num serviço do Service Fabric, todavia, pode ser executado até ao fim e a instância de serviço continuará operacional.
O Service Fabric fornece um ponto de entrada de configuração de comunicação opcional para serviços que escutam solicitações de clientes. Tanto o RunAsync quanto o ponto de entrada de comunicação são substituições opcionais nos serviços do Service Fabric - seu serviço pode optar por ouvir apenas as solicitações do cliente ou executar apenas um loop de processamento, ou ambos - e é por isso que o método RunAsync tem permissão para sair sem reiniciar a instância de serviço, porque ele pode continuar a ouvir as solicitações do cliente.
API e ambiente de aplicativos
A API do ambiente de Serviços de Nuvem (suporte estendido) fornece informações e funcionalidades para a instância de VM atual, bem como informações sobre outras instâncias de função de VM. O Service Fabric fornece informações relacionadas ao seu tempo de execução e algumas informações sobre o nó em que um serviço está sendo executado no momento.
Tarefa Ambiente | Serviços na nuvem (suporte alargado) | Service Fabric |
---|---|---|
Definições de configuração e notificação de alteração | RoleEnvironment |
CodePackageActivationContext |
Armazenamento Local | RoleEnvironment |
CodePackageActivationContext |
Informações sobre o ponto final | RoleInstance
|
|
Emulação de ambiente | RoleEnvironment.IsEmulated |
N/A |
Evento de alteração simultânea | RoleEnvironment |
N/A |
Definições de configuração
As definições de configuração nos Serviços de Nuvem (suporte estendido) são definidas para uma função VM e se aplicam a todas as instâncias dessa função VM. Essas configurações são pares chave-valor definidos em arquivos ServiceConfiguration.*.cscfg e podem ser acessadas diretamente por meio de RoleEnvironment. No Service Fabric, as configurações se aplicam individualmente a cada serviço e a cada aplicativo, em vez de a uma VM, porque uma VM pode hospedar vários serviços e aplicativos. Um serviço é composto por três pacotes:
- Código: contém os executáveis de serviço, binários, DLLs e quaisquer outros arquivos que um serviço precise executar.
- Config: todos os arquivos de configuração e definições para um serviço.
- Dados: ficheiros de dados estáticos associados ao serviço.
Cada um desses pacotes pode ser versionado e atualizado de forma independente. Semelhante aos Serviços de Nuvem (suporte estendido), um pacote de configuração pode ser acessado programaticamente por meio de uma API e eventos estão disponíveis para notificar o serviço de uma alteração de pacote de configuração. Um ficheiro Settings.xml pode ser usado para configuração chave-valor e acesso programático de forma semelhante à secção de definições da aplicação de um ficheiro App.config. No entanto, ao contrário dos Serviços de Nuvem (suporte estendido), um pacote de configuração do Service Fabric pode conter qualquer arquivo de configuração em qualquer formato, seja XML, JSON, YAML ou um formato binário personalizado.
Acessando a configuração
Serviços na nuvem (suporte alargado)
As definições de configuração de ServiceConfiguration.*.cscfg podem ser acedidas através de RoleEnvironment
. Essas configurações estão disponíveis globalmente para todas as instâncias de função na mesma implantação do Serviço de Nuvem.
string value = RoleEnvironment.GetConfigurationSettingValue("Key");
Service Fabric
Cada serviço tem seu próprio pacote de configuração individual. Não há nenhum mecanismo interno para definições de configuração global acessíveis por todos os aplicativos em um cluster. Ao usar o arquivo de configuração de Settings.xml especial do Service Fabric em um pacote de configuração, os valores em Settings.xml podem ser substituídos no nível do aplicativo, tornando as definições de configuração no nível do aplicativo possíveis.
As definições de configuração são acedidas em cada instância de serviço através do CodePackageActivationContext
.
ConfigurationPackage configPackage = this.Context.CodePackageActivationContext.GetConfigurationPackageObject("Config");
// Access Settings.xml
KeyedCollection<string, ConfigurationProperty> parameters = configPackage.Settings.Sections["MyConfigSection"].Parameters;
string value = parameters["Key"]?.Value;
// Access custom configuration file:
using (StreamReader reader = new StreamReader(Path.Combine(configPackage.Path, "CustomConfig.json")))
{
MySettings settings = JsonConvert.DeserializeObject<MySettings>(reader.ReadToEnd());
}
Eventos de atualização de configuração
Serviços na nuvem (suporte alargado)
O RoleEnvironment.Changed
evento é usado para notificar todas as instâncias de função quando ocorre uma alteração no ambiente, como uma alteração de configuração. Isso é usado para consumir atualizações de configuração sem reciclar instâncias de função ou reiniciar um processo de trabalho.
RoleEnvironment.Changed += RoleEnvironmentChanged;
private void RoleEnvironmentChanged(object sender, RoleEnvironmentChangedEventArgs e)
{
// Get the list of configuration changes
var settingChanges = e.Changes.OfType<RoleEnvironmentConfigurationSettingChange>();
foreach (var settingChange in settingChanges)
{
Trace.WriteLine("Setting: " + settingChange.ConfigurationSettingName, "Information");
}
}
Service Fabric
Cada um dos três tipos de pacote em um serviço - Código, Configuração e Dados - tem eventos que notificam uma instância de serviço quando um pacote é atualizado, adicionado ou removido. Um serviço pode conter vários pacotes de cada tipo. Por exemplo, um serviço pode ter vários pacotes de configuração, cada um com versão individual e atualizável.
Esses eventos estão disponíveis para consumir alterações em pacotes de serviço sem reiniciar a instância de serviço.
this.Context.CodePackageActivationContext.ConfigurationPackageModifiedEvent +=
this.CodePackageActivationContext_ConfigurationPackageModifiedEvent;
private void CodePackageActivationContext_ConfigurationPackageModifiedEvent(object sender, PackageModifiedEventArgs<ConfigurationPackage> e)
{
this.UpdateCustomConfig(e.NewPackage.Path);
this.UpdateSettings(e.NewPackage.Settings);
}
Tarefas de arranque
As tarefas de inicialização são ações executadas antes do início de um aplicativo. Uma tarefa de inicialização é normalmente usada para executar scripts de instalação usando privilégios elevados. Os Serviços de Nuvem (suporte estendido) e o Service Fabric suportam tarefas de inicialização. A principal diferença é que, nos Serviços de Nuvem (suporte estendido), uma tarefa de inicialização está vinculada a uma VM porque faz parte de uma instância de função, enquanto no Service Fabric uma tarefa de inicialização está vinculada a um serviço, que não está vinculado a nenhuma VM específica.
Service Fabric | Serviços na nuvem (suporte alargado) |
---|---|
Localização da configuração | ServiceDefinition.csdef |
Privilégios | "limitado" ou "elevado" |
Sequenciação | "simples", "fundo", "primeiro plano" |
Serviços na nuvem (suporte alargado)
Nos Serviços de Nuvem (suporte estendido), um ponto de entrada de inicialização é configurado por função em ServiceDefinition.csdef.
<ServiceDefinition>
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
<Environment>
<Variable name="MyVersionNumber" value="1.0.0.0" />
</Environment>
</Task>
</Startup>
...
</ServiceDefinition>
Service Fabric
No Service Fabric, um ponto de entrada de inicialização é configurado por serviço em ServiceManifest.xml:
<ServiceManifest>
<CodePackage Name="Code" Version="1.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>Startup.bat</Program>
</ExeHost>
</SetupEntryPoint>
...
</ServiceManifest>
Uma nota sobre o ambiente de desenvolvimento
Os Serviços de Nuvem (suporte estendido) e o Service Fabric são integrados ao Visual Studio com modelos de projeto e suporte para depuração, configuração e implantação local e no Azure. Os Serviços na Nuvem (suporte estendido) e o Service Fabric também fornecem um ambiente de desenvolvimento local. A diferença é que, enquanto o tempo de execução de desenvolvimento do Serviço de Nuvem emula o ambiente do Azure no qual é executado, o Service Fabric não usa um emulador - ele usa o tempo de execução completo do Service Fabric. O ambiente do Service Fabric executado na máquina de desenvolvimento local é o mesmo que é executado na produção.
Próximos passos
Leia mais sobre os Serviços Confiáveis do Service Fabric e as diferenças fundamentais entre os Serviços de Nuvem (suporte estendido) e a arquitetura de aplicativos do Service Fabric para entender como aproveitar o conjunto completo de recursos do Service Fabric.