BR112016030978B1 - Método e sistema implementado por computador para entregar eventos, e sistema compreendendo um ou mais dispositivos de computação - Google Patents

Método e sistema implementado por computador para entregar eventos, e sistema compreendendo um ou mais dispositivos de computação Download PDF

Info

Publication number
BR112016030978B1
BR112016030978B1 BR112016030978-2A BR112016030978A BR112016030978B1 BR 112016030978 B1 BR112016030978 B1 BR 112016030978B1 BR 112016030978 A BR112016030978 A BR 112016030978A BR 112016030978 B1 BR112016030978 B1 BR 112016030978B1
Authority
BR
Brazil
Prior art keywords
event
processing agent
events
processing
virtual
Prior art date
Application number
BR112016030978-2A
Other languages
English (en)
Other versions
BR112016030978A8 (pt
BR112016030978A2 (pt
Inventor
Henry Hooper Somuah
Sergey Bykov
Tamir Melamed
Robert Louis Rodi
Felix Cheung
Michael William Malyuk
Andrew Alexander Hesky
Gabriel Kliot
Jorgen Thelin
Alan Stuart Geller
Original Assignee
Microsoft Technology Licensing, Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/326,239 external-priority patent/US10554709B2/en
Application filed by Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR112016030978A2 publication Critical patent/BR112016030978A2/pt
Publication of BR112016030978A8 publication Critical patent/BR112016030978A8/pt
Publication of BR112016030978B1 publication Critical patent/BR112016030978B1/pt

Links

Abstract

PROCESSAMENTO DE FLUXO BASEADO EM EVENTO COM A UTILIZAÇÃO DE FLUXOS E AGENTES DE PROCESSAMENTO VIRTUAIS. As tecnologias são descritas no presente documento para entrega de evento e processamento de fluxo com a utilização de agentes de processamento virtuais. Mediante o recebimento de uma publicação de evento em uma fila de espera, um sistema de tempo de execução identifica um ou mais agentes de processamento virtuais que podem estar interessados, mas não assinaram explicitamente o evento publicado. As informações de evento do evento publicado são, então, entregues aos agentes de processamento virtuais identificados. Antes da entrega real, o sistema de tempo de execução determina ainda se os agentes de processamento virtuais foram ativados e ativa esses agentes de processamento que não foram ativados. Com base nas informações de evento recebidas, alguns dos agentes de processamento virtuais podem decidir enviar de modo explícito assinaturas para receber mais eventos a partir da fila de espera. As assinaturas explícitas irão acionar o sistema de tempo de execução para entregar os eventos assinados aos agentes de processamento, que podem incluir eventos passados que foram publicados na fila de espera antes de a assinatura explícita ser recebida.

Description

ANTECEDENTES
[001] Em um sistema de processamento de fluxo, uma unidade de processamento de fluxo pode se comunicar com outras unidades de processamento para receber eventos para processamento. Isso pode ser realizado tanto através de uma comunicação direta a partir de uma unidade de processamento com outra ou através de um modelo de publicação-assinatura em que uma unidade de processamento assina determinados eventos e recebe os eventos quando os mesmos são publicados.
[002] À medida que a escala de um sistema de processamento de fluxo aumenta, por exemplo, em que milhões de unidades de processamento são envolvidas, pode ser inviável utilizar técnicas de comunicação direta entre unidades de processamento. Embora o modelo de publicação-assinatura possa parecer viável, o modelo de publicação-assinatura tradicional exige que uma unidade de processamento envie de modo explícito assinaturas de evento antes de receber quaisquer informações relacionadas aos eventos. Isso pode ser um problema visto que, em alguns casos, pode ser impossível para que uma unidade de processamento preveja quais eventos assinar antes de determinados eventos ocorrerem. Por exemplo, uma unidade de processamento configurada para processar eventos que ocorrem em um mapa de um aplicativo de jogo não sabe qual jogo assinar até um jogo ser iniciado naquele mapa. Em tais situações, para que a unidade de processamento receba os eventos que a mesma está interessada, a unidade de processamento tem que assinar para todos os eventos possíveis, que novamente se torna inviável e ineficiente em um sistema de processamento de fluxo em larga escala.
[003] É com relação a essas e outras considerações que a revelação feita no presente documento é apresentada.
SUMÁRIO
[004] As tecnologias são descritas no presente documento para entrega de evento e processamento de fluxo com a utilização de agentes de processamento virtuais. Um ou mais agentes de processamento virtuais podem ser criados e configurados para receber e processar eventos de fluxo. Um mecanismo, tal como uma fila de espera, pode ser utilizado e/ou configurado para receber publicações de evento a partir de várias entidades em um sistema de processamento de fluxo. Os eventos publicados também podem ser persistidos ou armazenados para recuperação posterior e entrega quando necessário. Mediante o recebimento de uma publicação de evento, um sistema de tempo de execução pode identificar um ou mais agentes de processamento virtuais que podem estar interessados em receber os eventos publicados, mas não assinaram explicitamente para o evento publicado. As informações de evento do evento publicado podem, então, ser entregues aos agentes de processamento virtuais identificados. Antes da entrega real do evento ou informações de evento, o sistema de tempo de execução pode determinar ainda se os agentes de processamento virtuais foram ativados, e o sistema de tempo de execução pode ativar os agentes de processamento se os agentes de processamento não tiverem sido ativados. O evento ou informações de evento contidas no mesmo podem, então, ser entregues aos agentes de processamento ativados.
[005] Com base no evento recebido ou informações de evento, os agentes de processamento virtuais podem decidir enviar de modo explícito assinaturas do recebimento de mais eventos a partir da fila de espera. As assinaturas explícitas podem, então, disparar os eventos assinados a serem entregues aos agentes de processamento, que podem incluir eventos passados que foram publicados na fila de espera antes de a assinatura explícita ser enviada. Utilizando-se as técnicas descritas no presente documento, um agente de processamento virtual pode ter a capacidade de assinar, receber e processar eventos que o agente de processamento pode não saber de outro modo antes de o evento ser publicado na fila de espera. Utilizando-se agentes de processamento virtuais para assinar, receber e processar eventos, a escalabilidade, confiabilidade e flexibilidade de recursos de computação podem ser aperfeiçoados.
[006] Deve-se entender ainda que a matéria descrita acima também pode ser implantada como um aparelho controlado por computador, um processo de computador, um sistema de computação ou como um artigo de fabricação tal como um meio de armazenamento legível por computador. Esses e vários outros recursos se tornarão evidentes a partir da leitura da Descrição Detalhada a seguir e de uma análise dos desenhos associados.
[007] Este Sumário é fornecido para introduzir uma seleção de conceitos em uma forma simplificada que serão ainda descritos abaixo na Descrição Detalhada. Este Sumário não se destina a identificar recursos-chave ou recursos essenciais da matéria reivindicada, nem se destina a ser usado para limitar o escopo da matéria reivindicada. Além disso, a matéria reivindicada não é limitada às implantações que solucionam qualquer uma ou todas as desvantagens observadas em qualquer parte desta revelação.
BREVE DESCRIÇÃO DOS DESENHOS
[008] A Figura 1 é um diagrama de sistema de computador que fornece uma descrição geral de um mecanismo revelado no presente documento para processamento de fluxo com a utilização de agentes de processamento virtuais;
[009] a Figura 2 é um diagrama de blocos que mostra aspectos de uma fila de espera e fluxos virtuais;
[0010] a Figura 3 é um diagrama de fluxo que mostra aspectos adicionais de um processo ilustrativo para entregar eventos a agentes de processamento virtuais;
[0011] a Figura 4 é um diagrama de fluxo que mostra aspectos de um processo ilustrativo para assinatura de evento e processamento por um agente de processamento virtual;
[0012] as Figuras 5A a 5D ilustram operações por agentes de processamento virtuais exemplificativos em resposta a eventos publicados em uma fila de espera em diferentes pontos no tempo; e]
[0013] a Figura 6 é um diagrama de arquitetura de computador que mostra uma arquitetura de hardware de computador ilustrativa para um sistema de computação com a capacidade de implantar as tecnologias apresentadas no presente documento.
DESCRIÇÃO DETALHADA
[0014] As tecnologias são descritas no presente documento para entrega de evento e processamento de fluxo com a utilização de agentes de processamento virtuais. Em tecnologias reveladas no presente documento, um ou mais agentes de processamento virtuais, que podem ser denominados, no presente documento, como "agentes de processamento" ou "PAs", podem ser empregados como unidades de processamento para processamento de fluxo. Esses agentes de processamento virtuais podem ser executados/executar em um ou mais servidores, e podem ser endereçáveis para operações e interações independentes da possibilidade de os agentes de processamento estarem ativados ou não ativados. Cada um dentre os agentes de processamento virtuais pode ser configurado para publicar, receber e/ou processar vários eventos. Os eventos podem ser publicados em uma fila de espera, e podem ser ainda persistidos ou armazenados na fila de espera para restauração posterior.
[0015] Uma vez que uma publicação de um evento é recebida na fila de espera, um ou mais agentes de processamento podem ser identificados para receber os eventos publicados. Os agentes de processamento identificados podem incluir agentes de processamento que não assinaram explicitamente o recebimento do evento publicado, denominados, no presente documento, como "agentes de processamento de assinante implícitos" ou "assinantes implícitos". A identificação de um assinante implícito pode ser realizada com base nas definições ou configurações do agente de processamento virtual, incluindo, mas sem limitação, as ações a serem realizadas pelo agente de processamento virtual, a entrada e saída do agente de processamento virtual, a situação do agente de processamento virtual, e potencialmente outras configurações do agente de processamento virtual. As configurações do agente de processamento virtual podem ser derivadas de uma definição declarativa do agente de processamento, ou obtidas de modo programático.
[0016] O evento publicado ou as informações contidas dentro ou associadas ao evento publicado, denominadas no presente documento como "informações de evento", podem, então, ser entregues aos agentes de processamento de assinante implícitos identificados. Antes da entrega real, um sistema de tempo de execução que suporta e gerencia os agentes de processamento virtuais pode determinar se os agentes de processamento de assinante implícitos foram ativados, e pode ativar os agentes de processamento se os agentes de processamento não estiverem sido ativados. O evento ou as informações de evento podem, então, ser entregues aos agentes de processamento ativados onde o evento ou as informações de evento podem ser processados ainda. De modo similar, quando a publicação de evento é recebida na fila de espera, um ou mais agentes de processamento que assinaram explicitamente para receber o evento publicado também podem ser identificados e ativados se necessário. O evento publicado pode, então, ser entregue aos agentes de processamento de assinante explícitos para processamento.
[0017] Com base no evento recebido ou informações de evento, um agente de processamento de assinante implícito pode decidir que eventos adicionais são necessários para processamento e pode, por sua vez, enviar assinaturas explícitas para receber esses eventos quando os mesmos são publicados na fila de espera. Dependendo das configurações do agente de processamento, eventos especificados na assinatura explícita podem incluir eventos passados que já ocorreram e publicados na fila de espera. Em tal situação, visto que os eventos publicados na fila de espera podem ter sido persistidos ou armazenados, a fila de espera pode restaurar e entregar esses eventos assinados passados ao agente de processamento. A fila de espera pode entregar ainda eventos assinados ao agente de processamento à medida que mais eventos são publicados na fila de espera.
[0018] De acordo com aspectos adicionais, os eventos na fila de espera podem ser mapeados para ou abstraídos em um ou mais fluxos virtuais, e cada um dentre os fluxos virtuais pode incluir um subconjunto de eventos que são publicados na fila de espera. A publicação de evento e assinatura de evento realizadas pelo agente de processamento, e/ou outras entidades, podem ser direcionadas aos fluxos virtuais em vez de ser direcionada à fila de espera. Cada um dentre os fluxos virtuais pode ser definido pelos eventos a serem publicados nos mesmos e/ou pelo tipo de eventos que um agente de processamento está interessado em receber. Como tal, os fluxos virtuais podem ser dinâmicos, e a existência dos fluxos virtuais pode depender dos eventos a serem publicados e/ou eventos a serem entregues. Detalhes adicionais em relação a esses e outros aspectos das tecnologias apresentadas no presente documento serão fornecidos abaixo em relação às Figuras 1 a 6.
[0019] Embora a matéria descrita no presente documento seja apresentada no contexto geral de módulos de programa que são executados em conjunto com a execução de um sistema operacional e programas de aplicativo em um sistema de computador, os versados na técnica reconhecerão que outras implantações podem ser realizadas em combinação com outros tipos de módulos de programa. Em geral, os módulos de programa incluem rotinas, programas, componentes, estruturas de dados e outros tipos de estruturas que realizam tarefas particulares ou implantam tipos de dados abstratos particulares. Ademais, aqueles versados na técnica verificarão que a matéria descrita no presente documento pode ser praticada com outras configurações de sistema de computador, incluindo dispositivos portáteis, sistemas de multiprocessador, eletrônicos de consumo baseados em microprocessador ou programáveis, minicomputadores, computadores centrais e similares.
[0020] Na descrição detalhada a seguir, são feitas referências aos desenhos anexos que formam uma parte do presente documento e que são mostrados a título de ilustração, aspectos específicos ou exemplos. Referindo-se agora aos desenhos, em que numerais iguais representam elementos iguais ao longo das diversas Figuras, os aspectos de um sistema de computação e metodologia para assinar, receber e processar eventos serão descritos.
[0021] Voltando-se, agora, para a Figura 1, os detalhes serão fornecidos em relação a um sistema de computador e diversos componentes incluídos no mesmo de acordo com aspectos apresentados no presente documento. Em particular, a Figura 1 mostra aspectos de um sistema de processamento de fluxo 100 para entrega de evento e processamento de fluxo com a utilização de agentes de processamento virtuais. Conforme mostrado na Figura 1, o sistema de processamento de fluxo 100 pode incluir um sistema de tempo de execução 108 que suporta e facilita a comunicação entre várias entidades no sistema de processamento de fluxo 100, incluindo, mas sem limitação, agentes de processamento virtuais 102A-102N (que podem ser denominados, no presente documento, individualmente como um agente de processamento virtual 102 ou coletivamente como os agentes de processamento virtuais 102), um sistema de fila de espera 104, um dispositivo de computação de cliente 116 e um dispositivo de computação de servidor 118.
[0022] O sistema de tempo de execução 108 pode incluir um grupo de servidores distribuídos (não mostrados na Figura 1) que pode ser configurado para executar uma camada de base de tempo de execução 122 para fornecer coletivamente e suportar "componentes distribuídos virtualizados" (que também podem ser denominados, no presente documento, como "componentes virtuais"). Conforme usado no presente documento, "componentes" se refere a componentes de software tais como objetos de software ou outros tipos de entidades isoladas individualmente endereçáveis, tais como objetos distribuídos, agentes, atores e similares. Um componente distribuído virtualizado suportado pelo sistema de tempo de execução 108 tem uma existência que independe da vida útil de qualquer um de suas instanciações em memória e, desse modo, independe da vida útil de qualquer servidor particular no sistema de tempo de execução 108. Se não houver instância em memória de um componente virtual, uma mensagem enviada ao componente faz com que uma nova instância seja criada automaticamente em um servidor disponível pela camada de base de tempo de execução 122, que pode ser qualquer servidor disponível no sistema de tempo de execução 108. Como tal, um componente virtual é sempre endereçável por uma identidade do componente virtual para interação e/ou operação independente da possibilidade de que o componente virtual esteja ativado no sistema ou não.
[0023] A camada de base de tempo de execução 122 também pode ser configurada para gerenciar ativação e desativação de componente virtual. A camada de base de tempo de execução 122 pode ser configurada ainda para gerenciar comunicações a componentes virtuais transparentes a um programa que usa o componente virtual. Para que isso seja alcançado, a camada de base de tempo de execução 122 pode manter informações que indicam uma ou mais localizações de servidor para qualquer instância ativada do componente virtual, enviar uma ou mais comunicações a uma instância de componente virtual ativado, ou preservar comunicações a um componente virtual que está em um estado desativado até uma instância do componente virtual ser ativada em uma ativação para receber as comunicações do mesmo. A camada de base de tempo de execução 122 pode fornecer, desse modo, a um desenvolvedor, um "espaço de componente" virtual que permite invocar qualquer componente virtual possível no sistema como se estivesse ativado, isto é, presente na memória.
[0024] Se um servidor no qual um componente virtual é ativado falhar, o componente virtual pode ser recuperado reativando-se outra ativação do componente virtual no outro servidor no sistema de tempo de execução 108. Como tal, os componentes virtuais não precisam ser supervisionados e/ou explicitamente recriados por um aplicativo que é desenvolvido com base na camada de base de tempo de execução 122.
[0025] A virtualização de componentes é baseada em um nível de indireção que mapeia a partir de componentes virtuais para ativações/instanciações físicas que estão atualmente sendo executadas. Esse nível de indireção pode fornecer à camada de base de tempo de execução 122 a oportunidade de resolver muitos problemas que iriam precisar, de outra maneira, ser abordados pelo desenvolvedor de aplicativo, tal como colocação de componente virtual e equilíbrio de carga, desativação de componentes virtuais não usados e recuperação de componente virtual após falhas de servidor. Desse modo, os componentes virtuais fornecidos pela camada de base de tempo de execução 122 podem simplificar o modelo de programação enquanto permite a flexibilidade de tempo de execução em equilibrar carga e recuperar de modo transparente de falhas. Mais detalhes sobre camada de base de tempo de execução 122 podem ser encontrados em Pedido de Patente copendente no U.S.14/ 228.129, depositado em 26 de março de 2014, e intitulado "Virtualized Components in Computing Systems."
[0026] De acordo com aspectos de tecnologias apresentados no presente documento, os agentes de processamento virtuais 102 no sistema de processamento de fluxo 100 podem ser construídos como componentes virtuais fornecidos e suportados pela camada de base de tempo de execução 122 do sistema de tempo de execução 108. Com base em tal construção, os agentes de processamento virtuais 102 podem ser sempre endereçáveis para interação e/ou operação independente da possibilidade que os agentes de processamento virtuais 102 estejam ativados ou não. Os agentes de processamento virtuais 102 podem ser recuperados após falha de um servidor no qual o agente de processamento virtual 102 foi ativado reativando-se o agente de processamento virtual 102 em outro servidor no sistema de tempo de execução 108.
[0027] Em alguns aspectos, os agentes de processamento virtuais 102 podem ser, cada um, configurados para implantar determinadas ações e podem fornecer coletivamente funcionalidade para um aplicativo de software em larga escala. Por exemplo, em um aplicativo de jogo de computador, um agente de processamento virtual 102 pode ser criado e configurado para gerenciar cada jogo no aplicativo de jogo. Um agente de processamento virtual 102 também pode ser criado para cada mapa que hospeda um jogo no aplicativo de jogo. Os agentes de processamento virtuais separados 102 podem ser criados e configurados ainda para gerenciar jogadores individuais que participam em vários jogos do aplicativo de jogo. As configurações de um agente de processamento virtual 102, que incluem as ações a serem realizadas pelo agente de processamento virtual 102, a entrada e a saída do agente de processamento virtual 102, e/ou outras configurações, podem ser especificadas através de uma definição declarativa do agente de processamento virtual 102 ou podem ser obtidas de modo programático.
[0028] A fim de fornecer um sistema coerente para processamento de fluxo, os vários agentes de processamento virtuais 102 no sistema de processamento de fluxo 100 podem precisar se comunicar um com o outro. Por exemplo, uma mensagem pode ser comunicada de um agente de processamento virtual 102 para outro para atualizar a situação dos agentes de processamento virtuais 102, para ativar o outro agente de processamento virtual 102 e/ou disparar determinadas ações a serem realizadas pelo outro agente de processamento virtual 102. De acordo com alguns aspectos descritos no presente documento, a mensagem de um agente de processamento virtual 102 destinada a ser comunicada a outros agentes de processamento virtuais 102 e/ou outra entidade em um sistema pode ser publicada como um evento 112 em uma fila de espera 106 implantada pelo sistema de fila de espera 104.
[0029] O sistema de fila de espera 104 pode incluir um ou mais servidores que implantam uma fila de espera 106 para receber e persistir publicações de evento de várias entidades no sistema de processamento de fluxo 100. Deve-se entender que os servidores no sistema de fila de espera 104 e o sistema de tempo de execução 108 podem incluir servidores iguais ou diferentes, e os servidores no sistema de fila de espera 104 e o sistema de tempo de execução 108 podem ser servidores da web, servidores de aplicativo, aparelhos de rede, dispositivos de hardware de computador dedicado, computadores pessoais ("PC") ou qualquer combinação desses e/ou outros dispositivos de computação conhecidos na técnica. Os servidores podem ser conectados através de uma rede (não mostrada na Figura 1), que pode ser uma rede de área local ("LAN"), uma rede de área ampla ("WAN"), a Internet, ou qualquer outra topologia de rede conhecida na técnica que conecta dispositivos de computação.
[0030] O evento 112 a ser publicado na fila de espera 106 pode incluir várias informações associadas a um evento que ocorreu ou foi observado na entidade de envio de evento que pode ser um agente de processamento virtual 102, um dispositivo de computação de cliente 116, um dispositivo de computação de servidor 118 e/ou potencialmente outras entidades no sistema de processamento de fluxo 100. As informações contidas em um evento 112 podem incluir, mas sem limitação, uma identificação da entidade em que o evento originou, o tempo do evento, a localização do evento, identificações de entidades envolvidas no evento e/ou outras informações que podem ser usadas para descrever o evento. O evento 112 pode ser publicado na fila de espera 106 enviando-se uma publicação de evento 110 através do sistema de tempo de execução 108. A publicação de evento 110 pode incluir todas as informações contidas no evento correspondente 112 com informações adicionais tais como uma indicação de que o evento é para publicação, dados especificando onde e quando o evento 112 deve ser publicado, e similares. Em aspectos adicionais, o sistema de fila de espera 104 também pode persistir ou armazenar os eventos publicados 112 na fila de espera 106 ou em outras localizações de armazenamento que são acessíveis ao sistema de fila de espera 104 e/ou ao sistema de tempo de execução 108.
[0031] A fim de receber eventos para processamento de outros agentes de processamento virtuais 102 e/ou outras entidades que originam evento no sistema de processamento de fluxo 100, um agente de processamento virtual 102 pode enviar uma ou mais assinaturas de evento 114 para assinar para receber eventos que são publicados na fila de espera 106. Tal agente de processamento virtual 102 pode ser denominado, no presente documento, como um "agente de processamento de assinante explícito 102" ou um "assinante explícito 102" desses eventos. A título de exemplo, e não limitação, uma assinatura de evento 114 pode conter dados que especificam o tipo ou o conteúdo dos eventos que o agente de processamento virtual que está assinando 102 está interessado em receber. A assinatura de evento 114 também pode especificar um período de tempo durante o qual os eventos assinados devem ocorrer. A assinatura de evento 114 pode especificar ainda um ou mais predicados ou regras que podem ser utilizadas para filtrar eventos a serem entregues ao agente de processamento virtual 102. Deve-se entender que vários outros dados que descrevem os eventos que um agente de processamento virtual 102 está interessado em receber também podem estar incluídos na assinatura de evento 114.
[0032] Conforme será discutido em mais detalhes abaixo, o sistema de tempo de execução 108 também pode ser configurado para executar uma camada de processamento de fluxo 124, que pode ser denominada, no presente documento, como a "camada de processamento de fluxo 124" ou a "camada de processamento de fluxo de tempo de execução 124". A camada de processamento de fluxo de tempo de execução 124 pode ser configurada para gerenciar comunicações de evento entre as entidades no sistema de processamento de fluxo 100, incluindo, mas sem limitação, gerenciar publicações de evento 110 na fila de espera 106, coordenar a entrega de eventos 112 para agentes de processamento virtuais 102 e/ou outros assinantes de evento, receber e processar assinaturas de evento 114, e potencialmente outras operações.
[0033] A camada de processamento de fluxo de tempo de execução 124 pode receber as assinaturas de evento 114 de um ou mais agentes de processamento de assinante explícitos 102, e enviar eventos assinados 112 aos agentes de processamento de assinante explícitos correspondentes 102 quando os eventos assinados 112 são publicados na fila de espera 106. De acordo com aspectos adicionais, a camada de processamento de fluxo de tempo de execução 124 pode enviar ainda um evento publicado 112 ou informações de evento contidas no evento 112 para um ou mais agentes de processamento virtuais 102 que não assinaram explicitamente para os eventos 112, mas podem estar interessados em receber as informações contidas nos eventos publicados 112, que são denominados, no presente documento, como "agentes de processamento de assinante implícitos 102" ou "assinante implícito 102" dos eventos publicados 112.
[0034] Um agente de processamento de assinante implícito 102 pode ser identificado através de análise de configurações ou definições do agente de processamento virtual 102, tais como as ações a serem realizadas pelo agente de processamento virtual 102, a entrada e a saída do agente de processamento virtual 102, a situação do agente de processamento virtual 102 e/ou outras configurações do agente de processamento virtual 102. Por exemplo, um agente de processamento virtual 102 pode ser identificado como um agente de processamento de assinante implícito 102 se as ações a serem realizadas pelo agente de processamento virtual 102 envolverem um objeto ou uma entidade que iniciou, é mencionada ou é associada de outra maneira ao evento publicado 112. Um agente de processamento virtual 102 também pode ser identificado como um agente de processamento de assinante implícito 102 se dados incluídos no evento publicado 112 são consumidos ou processados pelo agente de processamento virtual 102. Deve-se entender que esses exemplos são meramente ilustrativos, e não devem ser interpretados como limitantes. Outros modos de identificar o agente de processamento de assinante implícito 102 também podem ser utilizados.
[0035] Uma vez que a camada de processamento de fluxo de tempo de execução 124 tiver identificado os agentes de processamento de assinante implícitos 102, o evento 112 pode ser entregue aos agentes de processamento de assinante implícitos 102 através da camada de base de tempo de execução 122. Conforme discutido acima, os agentes de processamento virtuais 102 no sistema de processamento de fluxo 100 podem ser implantados como componentes virtuais suportados pela camada de base de tempo de execução 122 do sistema de tempo de execução 108. A partir da perspectiva da camada de processamento de fluxo de tempo de execução 124, os agentes de processamento virtuais 102 podem ser sempre endereçáveis para a entrega dos eventos 112 independente da possibilidade de que os agentes de processamento virtuais 102 estejam ativados no sistema ou não. A camada de processamento de fluxo de tempo de execução 124 pode passar, desse modo, o evento 112 para a camada de base de tempo de execução 122 para entrega.
[0036] Mediante o recebimento do evento 112, a camada de base de tempo de execução 122 pode determinar se os agentes de processamento de assinante implícitos 102 foram ativados ou não, ou seja, se os agentes de processamento de assinante implícitos 102 foram carregados na memória e estão prontos para a operação. Se os agentes de processamento de assinante implícitos 102 não tiverem sido ativados, a camada de base de tempo de execução 122 pode ativar os agentes de processamento de assinante implícitos 102 e, então, entregar o evento 112 aos agentes de processamento de assinante implícitos ativados 102. De modo similar, ao entregar eventos 112 para agentes de processamento de assinante explícitos 102, a camada de base de tempo de execução 122 também pode determinar se os agentes de processamento de assinante explícitos 102 estão ativados, e ativar os agentes de processamento de assinante explícitos 102, se necessário, antes da entrega dos eventos 112.
[0037] Dependendo da implantação dos agentes de processamento virtuais 102 e a situação dos agentes de processamento virtuais 102 quando ativados, alguns dos agentes de processamento de assinante implícitos ativados 102 podem não estar configurados ainda para aceitar e processar o evento 112. Por exemplo, o agente de processamento de assinante implícito 102 pode não ter um manipulador de evento construído ainda mediante a ativação. Em tal situação, as informações de evento que incluem alguns ou todos os dados contidos no evento 112 podem ser redispostas e entregues ao agente de processamento de assinante implícito 102 em um formato que é aceitável ao agente de processamento de assinante implícito 102. Em outras situações, pode ser suficiente enviar informações de evento que indicam a ocorrência do evento 112 ao agente de processamento virtual 102 sem enviar dados detalhados contidos no evento 112.
[0038] Com base no evento recebido 112 ou nas informações de evento, alguns agentes de processamento de assinante implícitos 102 podem decidir enviar uma ou mais assinaturas de evento 114 para a camada de processamento de fluxo de tempo de execução 124 para receber mais eventos publicados na fila de espera 106 para processamento. Conforme mencionado de maneira breve acima, os eventos contidos nas assinaturas de evento explícitas 114 enviadas pelo agente de processamento de assinante implícito 102 podem incluir eventos passados que foram publicados na fila de espera 106 antes de as assinaturas de evento 114 serem recebidas e processadas. A camada de processamento de fluxo de tempo de execução 124 pode restaurar os eventos passados da fila de espera ou outro armazenamento onde os eventos correspondentes são persistidos, e entregar os eventos restaurados ao agente de processamento de assinante implícito 102. Deve-se observar que, quando o agente de processamento de assinante implícito 102 envia a assinatura de evento 114, o agente de processamento de assinante implícito 102 pode se transformar em um agente de processamento de assinante explícito 102 para os eventos assinados e pode ser manuseado de um modo similar àquele descrito acima para manusear o agente de processamento de assinante explícito 102.
[0039] Deve-se entender ainda que, embora a sessão acima tenha descrito essencialmente que o agente de processamento virtual 102 pode enviar publicações de evento 110, enviar assinaturas de evento 114 e/ou receber eventos 112, várias outras entidades no sistema de processamento de fluxo 100 também podem realizar essas operações. Por exemplo, um usuário de um aplicativo de jogo de computador pode estar interessado em receber informações em relação a um jogo, tal como as informações de placar de liderança do jogo. O usuário pode enviar uma assinatura de evento 114 ao sistema de tempo de execução 108 para obter tais informações através de um dispositivo de computação de cliente 116, que pode ser um computador pessoal ("PC"), um computador do tipo laptop, um computador do tipo notebook, um assistente digital pessoal ("PDA"), um console de jogo, um decodificador de sinais, um leitor eletrônico, um dispositivo eletrônico de consumidor, um telefone inteligente, um dispositivo de computação de tablet, um computador servidor ou qualquer outro dispositivo de computação que tenha a capacidade de se comunicar com o sistema de tempo de execução 108.
[0040] De modo similar, um dispositivo de computação de servidor 118, que pode ser computadores servidores, servidores de web, servidores de aplicativo, aparelhos de rede, dispositivos de hardware de computador dedicado, PCs ou qualquer combinação dos mesmos e/ou outros dispositivos de computação conhecidos na técnica, e ter um jogo executado no mesmo, pode enviar uma publicação de evento 110 para publicar um evento de início de jogo 112 na fila de espera 106. O dispositivo de computação de servidor 118 também pode enviar uma ou mais assinaturas de evento 114 a fim de receber eventos 112 que o dispositivo de computação de servidor 118 está interessado em processar. Outras entidades no sistema de processamento de fluxo 100 também podem ser configuradas para publicar, receber e/ou assinar para os eventos 112 de um modo similar àquele descrito acima.
[0041] Deve-se verificar também que, embora a Figura 1 revele essencialmente o uso da fila de espera 106 para receber e persistir publicações de evento 110 de várias entidades no sistema de processamento de fluxo 100, vários outros mecanismos também podem ser utilizados de um modo similar. Na verdade, virtualmente qualquer estrutura de dados que pode armazenar e reter dados para processamento posterior pode ser utilizada de um modo similar àquela descrita acima em relação à fila de espera 106. Pretende-se que este pedido inclua todas as tais estruturas de dados para manter e armazenar as publicações de evento 110.
[0042] Referindo-se agora à Figura 2, um diagrama de blocos que mostra aspectos adicionais da fila de espera 106 e a camada de processamento de fluxo de tempo de execução 124 será descrito. Conforme brevemente discutido acima, a camada de processamento de fluxo de tempo de execução 124 pode fornecer e suportar fluxos virtuais para processar publicações de evento 110 e assinaturas de evento 114. Utilizando-se fluxos virtuais, as publicações de evento 110 e assinaturas de evento 114 enviadas por agentes de processamento virtuais 102 e/ou outras entidades, podem ser direcionadas aos fluxos virtuais em vez de serem direcionadas para a fila de espera 106. Como resultado, os agentes de processamento virtuais 102 podem não precisar saber a existência da fila de espera 106. A Figura 2 ilustra vários fluxos virtuais abstraídos pela camada de processamento de fluxo de tempo de execução 124 e as interações entre os fluxos virtuais, a fila de espera 106 e os agentes de processamento virtuais 102.
[0043] Conforme mostrado na Figura 2, a camada de processamento de fluxo de tempo de execução 124 pode incluir um módulo de fluxo virtual 202 para fornecer e suportar funcionalidade associada a fluxos virtuais e para manter um mapeamento dos eventos entre a fila de espera 106 e os fluxos virtuais. Os fluxos virtuais fornecidos pelo módulo de fluxo virtual 202 podem incluir fluxos virtuais de publicação de evento 204A-204C (que podem ser denominados, no presente documento, individualmente como um fluxo virtual de publicação de evento 204 ou coletivamente como fluxos virtuais de publicação de evento 204) e fluxos virtuais de assinatura de evento 206A-206D (que podem ser denominados, no presente documento, individualmente, como um fluxo virtual de assinatura de evento 206 ou coletivamente como fluxos virtuais de assinatura de evento 206).
[0044] Cada um dentre os fluxos virtuais de publicação de evento 204 pode ser definido pelos eventos a serem publicados nos mesmos, e cada um dentre os fluxos virtuais de assinatura de evento 206 pode ser definido pelos eventos que uma entidade, que está assinando, está interessada em receber. Por exemplo, um agente de processamento virtual 102A pode enviar uma publicação de evento 110 à camada de processamento de fluxo de tempo de execução 124 para publicar um evento 112. A publicação de evento 110 pode ser enviada à camada de processamento de fluxo de tempo de execução 124 através de um fluxo virtual de publicação de evento 204C. Antes de a publicação de evento 110 ser recebida na camada de processamento de fluxo de tempo de execução 124, o fluxo virtual de publicação de evento 204C pode não existir e a chegada da publicação de evento 110 pode fazer com que o fluxo virtual de publicação de evento 204C seja criado. Em outras palavras, uma publicação de evento 110 ou o evento contido na mesma pode definir e causar o fluxo virtual de publicação de evento 204 onde a publicação de evento 110 é enviada para iniciar sua existência. Da mesma maneira, outros agentes de processamento virtuais 102 também podem enviar publicações de evento 110 a seus fluxos virtuais de publicação de evento correspondentes 204 para publicar eventos. Após receber as publicações de evento 110 através dos fluxos virtuais de publicação de evento 204, o módulo de fluxo virtual 202 pode enviar os eventos especificados nas publicações de evento 110 para a fila de espera 106 para publicação.
[0045] De modo similar, quando um agente de processamento virtual 102P envia uma assinatura de evento 114 indicando os eventos que o agente de processamento virtual 102P está interessado em receber, tal assinatura de evento 114 pode definir um fluxo virtual de assinatura de evento 206D que corresponde aos eventos especificados pela assinatura de evento 114. Como resultado, enviando-se a assinatura de evento 114, o agente de processamento virtual 102P está assinando de modo equivalente ao fluxo virtual de assinatura de evento 206D definido pela assinatura de evento 114. Deve-se entender que um agente de processamento virtual 102 pode assinar para múltiplos fluxos virtuais de assinatura de evento 206 enviando-se uma ou múltiplas assinaturas de evento 114 à camada de processamento de fluxo de tempo de execução 124. Uma vez que a camada de processamento de fluxo de tempo de execução 124 tiver recebido a assinatura de evento 114, o fluxo virtual de assinatura de evento 206D pode ser criado e começar sua existência. Com base na assinatura de evento 114, o módulo de fluxo virtual 202 pode restaurar eventos 112 publicados na fila de espera 106, e enviar por push os eventos 112 para o fluxo virtual de assinatura de evento 206D, que podem, então, ser entregues ao agente de processamento virtual 102P.
[0046] Por exemplo, um agente de processamento virtual 102A pode ser configurado para processar um jogo, e pode enviar uma publicação de evento 110 à camada de processamento de fluxo de tempo de execução 124 para publicar um evento 112 que ocorreu no jogo. A publicação de evento enviada 110 pode fazer com que um fluxo de evento de jogo 204C seja criado para receber o evento 112 para publicação. O evento 112 recebido através do fluxo de evento de jogo 204C pode ser enviado ainda à fila de espera 106 para publicação e armazenamento. Enquanto isso, a camada de processamento de fluxo de tempo de execução 124 também pode ter recebido uma assinatura de evento 114 do agente de processamento virtual 102P para assinar para receber todos os eventos de eliminação nos jogos. Tal assinatura de evento 114 pode ter feito com que um fluxo de evento de eliminação 206D fosse criado.
[0047] Mediante o recebimento da publicação de evento 110 no fluxo de evento de jogo 204C, o módulo de fluxo virtual 202 pode detectar que os eventos de eliminação, se houver algum, publicados através do fluxo de evento de jogo 204C devem ser encaminhados para o fluxo de evento de eliminação 206D para entrega ao agente de processamento virtual 102P. A detecção pode ser realizada, por exemplo, utilizando-se o mapeamento de eventos na fila de espera 106 e nos fluxos virtuais mantidos pelo módulo de fluxo virtual 202 conforme discutido acima. Subsequentemente, para cada evento de eliminação 112 publicado através do fluxo de evento de jogo 204C, o módulo de fluxo virtual 202 pode restaurar o evento de eliminação 112 da fila de espera 106 e enviar por push o mesmo para o fluxo de evento de eliminação 206D para entrega ao agente de processamento virtual 102P. Deve-se verificar que o exemplo acima é meramente ilustrativo, e vários outros eventos 112, publicações de evento 110, assinaturas de evento 114 e/ou outros dados podem ser comunicados entre os agentes de processamento virtuais 102 e a fila de espera 106 através dos fluxos virtuais 204 e 206, e/ou da camada de processamento de fluxo de tempo de execução 124.
[0048] De acordo com os aspectos adicionais, a assinatura de evento 114 enviada por um agente de processamento virtual 102 pode especificar ainda um ou mais predicados que podem ser utilizados para definir ainda o fluxo virtual de assinatura de evento correspondente 206. Os predicados podem ser processados no tempo apropriado pela camada de processamento de fluxo de tempo de execução 124 para refinar o fluxo virtual de assinatura de evento 206, tal como para criar um ou mais filtros que podem ser utilizados para filtrar os eventos enviados por push para o fluxo virtual de assinatura de evento 206. Com a utilização dos predicados, os eventos enviados ao agente de processamento virtual 102 podem ser refinados ainda e, desse modo, elimina-se a entrega de eventos não necessários ao agente de processamento virtual 102.
[0049] Conforme pode ser visto acima, os fluxos virtuais 204 e 206 são altamente dinâmicos e flexíveis, e podem ser criados sempre que necessário, aumentando significativamente, desse modo, a escalabilidade do sistema de processamento de fluxo 100. De acordo com aspectos adicionais, os fluxos virtuais 204 e 206 podem existir de modo lógico o tempo todo, mas os recursos de sistema são alocados aos mesmos apenas quando há eventos nos fluxos virtuais 204 e 206 para processar. Os fluxos virtuais 204 e 206 podem ser desativados retomando-se seus recursos quando nenhum evento for recebido nos fluxos virtuais 204 e 206 ao longo de um determinado período de tempo. Esse período de tempo pode ser predeterminado ou ajustado dinamicamente de acordo com a situação do sistema, tal como o uso dos recursos de sistema. Tal implantação pode ser vantajosa em situações em que os fluxos virtuais são formados com uma granularidade fina. Por exemplo, os fluxos virtuais em um sistema de aplicativo podem ser construídos em uma base por usuário, uma base por dispositivo e/ou uma base por sessão. Em um grande sistema de aplicativo, o número de usuários, dispositivos e/ou sessão e, desse modo, o número de fluxos virtuais, podem ser na escala de centenas de milhões ou até mesmo bilhões. Eventos associados a esses fluxos virtuais, entretanto, só podem ocorrer de modo não frequente e/ou em intermitências, e em um momento, apenas uma pequena porção dos fluxos virtuais pode precisar estar ativa. Em tal sistema, alocando-se os recursos para fluxos virtuais apenas quando há eventos nos fluxos virtuais 204 e 206 para processar pode aumentar significativamente a eficiência e a escalabilidade do sistema.
[0050] Além disso, o módulo de fluxo virtual 202 pode ser configurado ainda para agregar as comunicações a e dos agentes de processamento virtuais 102 antes de interagir com a fila de espera 106. Por exemplo, o módulo de fluxo virtual 202 pode receber múltiplas publicações de evento 110 de múltiplos agentes de processamento virtuais 102. Essas múltiplas publicações de evento 110 podem ser agregadas através de, por exemplo, multiplexação, e comunicadas à fila de espera 106 para publicar os múltiplos eventos 112 através de uma única conexão de comunicação. Da mesma maneira, múltiplas assinaturas de evento 114 recebidas de múltiplos agentes de processamento virtuais 102 podem ser processadas e agregadas, e os eventos 112 a serem enviados aos múltiplos agentes de processamento virtuais 102 podem ser restaurados da fila de espera 106 também através de uma única conexão de comunicação com a fila de espera 106.
[0051] Deve-se verificar que, embora os exemplos acima tenham descrito que múltiplas comunicações são agregadas e comunicadas à fila de espera 106 através de uma única conexão de comunicação, deve-se entender que mais do que uma conexão de comunicação pode ser estabelecida entre a camada de processamento de fluxo de tempo de execução 124 e a fila de espera 106 para comunicação. O número de conexões de comunicação estabelecidas, entretanto, pode ser muito menor do que o número de solicitações de comunicação, tais como as publicações de evento 110 e/ou as assinaturas de evento 114, dos agentes de processamento virtuais 102. A vantagem da agregação de comunicação pode se tornar mais significativa à medida que a escala do sistema de processamento de fluxo 100 aumenta. Por exemplo, para um sistema de processamento de fluxo 100 com milhões de agentes de processamento virtuais 102, as solicitações de comunicação dos agentes de processamento virtuais 102 podem ser na escala de dezenas de milhões e é, tipicamente, inviável para que uma fila de espera 106 estabeleça tal quantidade de conexões diretas TCP/IP com cada um dos agentes de processamento virtuais 102. Através de agregação de comunicação, o módulo de fluxo virtual 202 pode reduzir o número de conexões TCP/IP diretas na fila de espera 106 para diversos milhares, reduzindo substancialmente, desse modo, o consumo de recursos de comunicação.
[0052] Deve-se verificar ainda que embora as Figuras 1 e 2 ilustrem que uma fila de espera 106 é utilizada para publicar e persistir os eventos 112, múltiplas filas de espera 106 podem ser empregadas. Em tais implantações, o módulo de fluxo virtual 202 pode ser configurado ainda para gerenciar as múltiplas filas de espera 106 e manter um mapeamento de eventos entre as filas de espera 106 e os vários fluxos virtuais 204 e 206. Deve-se entender também que outras entidades no sistema de processamento de fluxo 100, tais como o dispositivo de computação de cliente e o dispositivo de computação de servidor, também podem publicar eventos por meio de publicações de evento 110, enviar assinaturas de evento 114 e/ou receber eventos 112 através dos fluxos virtuais 204 e 206.
[0053] A Figura 2 ilustra ainda aspectos para organizar e gerenciar agentes de processamento virtuais 102 com a utilização de contentores de agente de processamento 208A-208B (que podem ser denominados, no presente documento, individualmente como um contentor de agente de processamento 208 ou coletivamente como os contentores de agente de processamento 208). Cada um dentre os contentores de agente de processamento 208 pode fornecer um ambiente de computação independente aos agentes de processamento virtuais 102 que é separado e isolado de outros contentores de agente de processamento 208. Vários recursos de computação, tais como máquinas virtuais, podem ser alocados a um contentor de agente de processamento 208 para hospedar os agentes de processamento virtuais 102. Cada contentor de agente de processamento 208 também pode escalar independentemente de outros contentores de agente de processamento 208. Deve-se entender que o agente de processamento virtual 102 que publica um evento 112 e o agente de processamento virtual 102 que assina e recebe o evento 112 podem estar em um mesmo contentor de agente de processamento 208 ou em dois contentores diferentes de agente de processamento 208. Deve-se entender ainda que os agentes de processamento virtuais 102 podem ser organizados e gerenciados de vários outros modos que não envolvem o uso dos contentores de agente de processamento 208.
[0054] A Figura 3 é um diagrama de fluxo que ilustra aspectos de uma rotina ilustrativa 300 para entregar eventos para agentes de processamento virtuais 102. Em algumas implantações, a rotina 300 é realizada pela camada de processamento de fluxo de tempo de execução 124 do sistema de tempo de execução 108 descrito acima em relação à Figura 1. Deve-se verificar, entretanto, que a rotina 300 também pode ser realizada por outros módulos e/ou componentes do sistema de tempo de execução 108 ou por módulos e/ou componentes de outras entidades no sistema de processamento de fluxo 100 ilustrado na Figura 1.
[0055] Deve-se verificar que as operações lógicas descritas no presente documento em relação à Figura 3 e às outras Figuras são implantadas (1) como uma sequência de ações implantadas por computador ou módulos de programa sendo executados em um sistema computacional e/ou (2) como circuitos lógicos de máquinas interconectadas ou módulos de circuito dentro do sistema computacional. A implantação é uma questão de escolha dependente do desempenho e de outras exigências do sistema computacional. Consequentemente, as operações lógicas descritas no presente documento são chamadas de maneira variada como estados, operações, dispositivos estruturais, ações ou módulos. Esses estados, operações, dispositivos estruturais, ações e módulos podem ser implantados em software, em firmware, em lógica digital de propósito especial e qualquer combinação dos mesmos. Deve-se verificar também que mais ou menos operações podem ser realizadas do que mostradas nas Figuras e descritas no presente documento. Essas operações também podem ser realizadas em uma ordem diferente daquelas descritas no presente documento. Deve-se compreender, também, que cada um dentre os métodos ilustrados pode ser concluído a qualquer instante e não precisa ser realizado em sua totalidade.
[0056] Algumas ou todas as operações dos métodos e/ou operações substancialmente equivalentes, podem ser realizadas por meio da execução de instruções legíveis por computador incluídas em um meio de armazenamento por computador, conforme definido abaixo. O termo "instruções legíveis por computador" e variantes do mesmo, conforme usado na descrição e reivindicações, é usado de modo expansivo no presente documento para incluir rotinas, aplicativos, módulos de aplicativo, módulos de programa, programas, componentes, estruturas de dados, algoritmos e similares. As instruções legíveis por computador podem ser implantadas em várias configurações de sistema incluindo sistemas de único processador ou multiprocessador, minicomputadores, computadores centrais, computadores pessoais, dispositivos de computação portáteis, eletrônicos de consumo programáveis baseados em microprocessador, combinações dos mesmos e similares.
[0057] A rotina 300 começa na operação 302 em que a camada de processamento de fluxo 124 do sistema de tempo de execução 108 pode receber uma publicação de evento 110 em um fluxo virtual de publicação de evento correspondente 204. Conforme discutido acima, o fluxo virtual de publicação de evento 204 pode ser criado dinamicamente com base na publicação de evento recebida 110. A rotina 300 prossegue, então, para a operação 304 em que a camada de processamento de fluxo de tempo de execução 124 envia o evento 112 especificado na publicação de evento 110 para a fila de espera 106 para publicação. A camada de processamento de fluxo de tempo de execução 124 pode instruir ainda a fila de espera 106 para persistir ou armazenar o evento 112 na fila de espera 106 de modo que o evento 112 possa ser restaurado posteriormente. Em algumas implantações, o evento 112 também pode ser persistido ou armazenado em um dispositivo de armazenamento que é acessível à fila de espera 106 e/ou à camada de processamento de fluxo de tempo de execução 124.
[0058] Na operação 304, a rotina 300 prossegue para a operação 306 em que a camada de processamento de fluxo de tempo de execução 124 pode restaurar o evento 112 da fila de espera 106, e a rotina 300 prossegue ainda para a operação 308 em que os agentes de processamento de assinante implícitos 102 com base no evento 112 podem ser identificados. Conforme observado acima, um agente de processamento de assinante implícito 102 é um agente de processamento virtual 102 que não assinou explicitamente para o evento 112, mas pode estar interessado em receber as informações contidas no evento publicado 112. O agente de processamento de assinante implícito 102 pode ser identificado através de análise de configurações ou definições do agente de processamento virtual 102, tais como as ações a serem realizadas pelo agente de processamento virtual 102, a entrada e a saída do agente de processamento virtual 102, a situação do agente de processamento virtual 102 e/ou outras configurações do agente de processamento virtual 102. Por exemplo, um agente de processamento virtual 102 pode ser identificado como um agente de processamento de assinante implícito 102 se as ações a serem realizadas pelo agente de processamento virtual 102 envolverem um objeto ou uma entidade que iniciou, é mencionada ou é associada de outra maneira ao evento publicado 112. Um agente de processamento virtual 102 também pode ser identificado como um agente de processamento de assinante implícito 102 se dados incluídos no evento publicado 112 forem consumidos ou processados pelo agente de processamento virtual 102.
[0059] Em algumas implantações, a camada de processamento de fluxo de tempo de execução 124 pode manter uma tabela de ativação implícita que mapeia diferentes tipos de eventos ou os fluxos virtuais de assinatura de evento correspondentes 206 para um ou mais agentes de processamento de assinante implícitos 102. Uma tabela de ativação implícita exemplificativa é mostrada na Figura 6 e será descrita posteriormente. A tabela de ativação implícita pode ser pré- gerada e consultada pela camada de processamento de fluxo de tempo de execução 124 quando necessário. A tabela de ativação implícita também pode ser realizada através de uma função ou um módulo sendo executado na camada de processamento de fluxo de tempo de execução 124 que pode emitir um ou mais agentes de processamento de assinante implícitos 102 para um determinado evento ou informações de evento. Deve-se observar que a tabela de ativação implícita pode ser implantada de outros modos seguindo os mesmos princípios descritos acima.
[0060] Na operação 308, a rotina 300 prossegue para a operação 310, em que os agentes de processamento de assinante implícitos 102 identificados na operação 308 podem ser informados do evento 112, por exemplo, enviando-se o evento 112 ou informações de evento do evento 112 aos agentes de processamento de assinante implícitos 102. Conforme mencionado acima, as informações de evento podem conter informações contidas dentro ou associadas ao evento 112. Dependendo da natureza dos agentes de processamento de assinante implícitos 102, as informações de evento enviadas para alguns agentes de processamento de assinante implícitos 102 podem conter uma porção ou todos os dados contidos no evento 112. Para outros agentes de processamento de assinante implícitos 102, as informações de evento podem conter apenas uma indicação da existência do evento 112. Conforme será discutido em detalhes em relação à Figura 4, com base no evento recebido 112 ou nas informações de evento, os agentes de processamento de assinante implícitos 102 podem decidir assinar para receber mais eventos e/ou realizar operações adicionais.
[0061] Na operação 310, a rotina 300 prossegue para a operação 312, onde a camada de processamento de fluxo de tempo de execução 124 pode receber assinaturas de evento 114 de um ou mais dentre os agentes de processamento de assinante implícitos 102 para assinar para os fluxos virtuais de assinatura de evento correspondentes 206. A rotina 300 prossegue, então, para a operação 314 onde a camada de processamento de fluxo de tempo de execução 124 pode determinar se os eventos especificados nas assinaturas de evento explícitas 114 incluem eventos passados que já ocorreram e foram publicados na fila de espera 106. Se for determinado que as assinaturas de evento explícitas 114 incluem eventos passados, a rotina 300 prossegue para a operação 316 onde a camada de processamento de fluxo de tempo de execução 124 pode restaurar os eventos passados da fila de espera 106 e/ou outros dispositivos de armazenamento que armazenam os eventos passados, e entregar os eventos passados restaurados para os agentes de processamento virtuais correspondentes 102.
[0062] A partir da operação 316, ou se for determinado na operação 314 que as assinaturas de evento explícitas 114 não incluem eventos passados, a rotina 300 prossegue para a operação 318, onde a camada de processamento de fluxo de tempo de execução 124 pode atualizar as assinaturas explícitas que a mesma mantém e/ou realizar outras operações com base nas assinaturas de evento explícitas recebidas 114, tal como atualizar mapeamento de eventos nos fluxos virtuais de publicação de evento 204, nos fluxos virtuais de assinatura de evento 206 e na fila de espera 106.
[0063] Na operação 306, a rotina 300 também pode prosseguir para a operação 320. Na operação 320, a camada de processamento de fluxo de tempo de execução 124 pode identificar um ou mais agentes de processamento de assinante explícitos 102 com base nas assinaturas de evento 114 previamente enviadas pelos agentes de processamento virtuais 102. A rotina 300 pode prosseguir ainda para a operação 322 onde o evento 112 pode ser entregue aos agentes de processamento de assinante explícitos 102. Na operação 318 ou na operação 322, a rotina 300 prossegue para a operação 324 onde pode ser determinado se a camada de processamento de fluxo de tempo de execução 124 precisa entregar mais eventos. Se a camada de processamento de fluxo de tempo de execução 124 precisar entregar mais eventos, a rotina 300 retorna para a operação 302 para receber mais publicações de evento 110 para processamento e entrega. De outra maneira, a rotina 300 prossegue para a operação 326, onde a rotina 300 termina.
[0064] Deve-se verificar que, no processo de entrega de evento descrito acima, ao entregar o evento 112 para agentes de processamento de assinante explícitos 102 e/ou ao enviar o evento 112 ou informações de evento para os agentes de processamento de assinante implícitos 102, a camada de base de tempo de execução 122 pode primeiramente determinar se os agentes de processamento correspondentes 102 foram ativados. Se houver quaisquer agentes de processamento 102 que não foram ativados, a camada de base de tempo de execução 122 pode ativar os agentes de processamento 102 e, então, entregar o evento 112 ou as informações de evento para os agentes de processamento ativados 102.
[0065] Sob esse aspecto, um agente de processamento 102, tal como o agente de processamento de assinante implícito 102, pode ser ativado dinamicamente incluindo alocar recursos de sistema mediante a chegada de um primeiro evento 112 em um fluxo 206 que o agente de processamento 102 é responsável pelo processamento. Desse modo, recursos de sistema, tais como memória e CPU, podem não precisar ser alocados ao agente de processamento 102 antes de o primeiro evento 112 chegar. Da mesma maneira, quando o agente de processamento 102 se tornar ocioso durante um determinado período de tempo, por exemplo, devido a nenhum evento 112 ser recebido para processamento a partir dos fluxos 206 para os quais o agente de processamento 102 é assinado, o agente de processamento 102 pode ser desativado de modo transparente para retomar seus recursos de sistema. O período determinado de tempo para desativar o agente de processamento 102 pode ser predeterminado ou ajustado dinamicamente de acordo com a situação do sistema, tal como o uso dos recursos de sistema.
[0066] A Figura 4 é um diagrama de fluxo que ilustra aspectos de uma rotina ilustrativa 400 para processamento de evento e assinatura. Em algumas implantações, a rotina 400 é realizada pelo agente de processamento virtual 102 descrito acima em relação às Figuras 1 e 2. Deve-se verificar, entretanto, que a rotina 400 também pode ser realizada por outras entidades no sistema de processamento de fluxo 100 ilustrado na Figura 1.
[0067] A rotina 400 começa na operação 402 em que um agente de processamento de assinante implícito 102 pode receber um evento 112 ou informações de evento do evento 112 da camada de processamento de fluxo de tempo de execução 124, e processar ainda o evento recebido 112 ou informações de evento. Na operação 402, a rotina 400 prossegue ainda para a operação 404 onde o agente de processamento de assinante implícito 102 pode determinar se precisa assinar para mais eventos 112 com base no evento recebido 112 ou informações de evento. Se for determinado que o agente de processamento de assinante implícito 102 precisa assinar mais eventos, a rotina prossegue para a operação 406 onde o agente de processamento de assinante implícito 102 pode identificar um ou mais fluxos virtuais de assinatura de evento 206 a partir dos quais os agentes de processamento de assinante implícitos 102 estão interessados em receber eventos. Na operação 408, o agente de processamento de assinante implícito 102 pode assinar os fluxos virtuais de assinatura de evento identificados 206 enviando-se assinaturas de evento 114 para a camada de processamento de fluxo de tempo de execução 124. Enviando-se as assinaturas de evento 114, o agente de processamento de assinante implícito 102 pode se transformar em um agente de processamento de assinante explícito 102 em relação às assinaturas de evento enviadas 114.
[0068] Na operação 408, a rotina 400 prossegue para a operação 410 em que o agente de processamento de assinante explícito 102 pode receber os eventos assinados que são publicados na fila de espera 106. Conforme discutido acima, se a assinatura de evento 114 enviada na operação 408 especificar eventos passados, os eventos recebidos na operação 410 podem incluir esses eventos passados. A rotina 400 prossegue, então, para a operação 412 em que os eventos recebidos podem ser processados. A rotina 400 prossegue ainda para a operação 414 onde pode ser determinado se o agente de processamento de assinante explícito 102 precisa de mais eventos para processar. Se for determinado que mais eventos são necessários, a rotina 400 retorna para a operação 410 onde o agente de processamento de assinante explícito 102 pode receber mais eventos 112 para processamento. Se for determinado na operação 414 que não é necessário mais nenhum evento, ou se for determinado, na operação 404 que o agente de processamento de assinante implícito 102 não precisa assinar mais eventos, a rotina 400 prossegue para a operação 416 onde a rotina 400 termina.
[0069] As Figuras 5A a 5D ilustram operações por agentes de processamento virtuais exemplificativos 102 em resposta a eventos 112 publicados na fila de espera 106 em diferentes pontos no tempo, de acordo com um ou mais aspectos apresentados no presente documento. Conforme ilustrado na Figura 5A, a camada de processamento de fluxo 124 do sistema de tempo de execução 108 pode manter ou gerar de outra maneira uma tabela de ativação implícita 506 que mapeia diferentes tipos de eventos 112 ou seus fluxos virtuais de assinatura de evento correspondentes 206 para agentes de processamento de assinante implícitos 102. De acordo com a tabela de ativação implícita exemplificativa 506 mostrada na Figura 5A, os agentes de processamento de mapa, agentes de processamento de jogo, agentes de processamento de placar de liderança e/ou agentes de processamento de jogador de elite podem ser identificados como agentes de processamento de assinante implícitos 102 de um fluxo de jogo 504. De modo similar, para um fluxo de jogador 520, os agentes de processamento de assinante implícitos potenciais 102 podem incluir agentes de processamento de jogador, agentes de processamento de jogo e/ou agentes de processamento de jogador de elite. Com base na tabela de ativação implícita 506, a camada de processamento de fluxo de tempo de execução 124 pode identificar e ativar um ou mais agentes de processamento de assinante implícitos 102 à medida que os eventos 112 são recebidos e publicados na fila de espera 106.
[0070] No tempo T0, um evento de início de jogo 502 é publicado na fila de espera 106, por exemplo, através de um fluxo virtual de publicação de evento 204. Os dados contidos no evento de início de jogo 502 indica que o jogo X iniciou no mapa H com jogadores A a F atualmente no jogo X. A camada de processamento de fluxo de tempo de execução 124 pode restaurar o evento de início de jogo 502 a partir da fila de espera 106, e identificar agentes de processamento de assinante implícitos 102 de um fluxo de jogo 504 que correspondem ao evento de início de jogo 502. Com base na tabela de ativação implícita 506, a camada de processamento de fluxo de tempo de execução 124 pode determinar que os agentes de processamento de assinante implícitos 102 do fluxo de jogo 504 podem incluir o agente de processamento de mapa 508 para calcular o número de eliminações no mapa G, o agente de processamento de mapa 510 para calcular o número de eliminações no mapa H, e o agente de processamento de jogador de elite 512 para calcular o número de eliminações para jogadores de elite C, M e S. A camada de processamento de fluxo de tempo de execução 124 pode, então, gerar, informações de evento de início de jogo 514 com base no evento de início de jogo 502 e enviar por push para o fluxo de jogo 504 para entrega aos agentes de processamento de assinante implícitos identificados 508, 510 e 512.
[0071] No tempo T1 conforme mostrado na Figura 5B, as informações de evento de início de jogo 514 podem ter sido entregues e processadas pelos agentes de processamento de assinante implícitos 508, 510 e 512. No agente de processamento 508, pode ser determinado que o mapa H associado ao jogo X indicado nas informações de evento de início de jogo 514 é diferente do mapa G que o agente de processamento de mapa 508 está interessado. Como resultado, o agente de processamento 508 pode não fazer nada em relação às informações de evento de início de jogo recebidas 514. No agente de processamento de mapa 510, entretanto, pode ser determinado que o mapa H contido nas informações de evento de início de jogo 514 são o que o agente de processamento de mapa 510 está interessado e, desse modo, o agente de processamento de mapa 510 pode, então, enviar uma assinatura 520 para assinar um fluxo de eliminação de jogo X 530 para receber todos os eventos de eliminação no jogo X.
[0072] De modo similar, o agente de processamento de jogador de elite 512 pode determinar que o jogo X inclui um dos jogadores de elite que está processando e, desse modo, pode enviar uma assinatura 524 para assinar um fluxo de eliminação de jogador C no jogo X 532 para receber todos os eventos de eliminação pelo jogador C no jogo X. Deve-se observar que embora as informações de evento de início de jogo 504 estão sendo entregues e processadas nos agentes de processamento 508, 510 e 512, pode haver mais eventos publicados na fila de espera 106, tais como o evento de eliminação 514 pelo jogador C, o evento de premiação 516 para premiar o jogador A e o evento de eliminação 518 pelo jogador F.
[0073] No tempo T2 conforme mostrado na Figura 5C, a camada de processamento de fluxo de tempo de execução 124 pode processar as assinaturas de evento enviadas pelo agente de processamento de mapa 510 e agente de processamento de jogador de elite 512. Visto que a assinatura 522 solicita todos os eventos de eliminação desde o início do jogo X, a camada de processamento de fluxo de tempo de execução 124 pode determinar que tal assinatura inclui eventos de eliminação passados 514 e 518 que são publicados antes de a assinatura 522 ser recebida. Da mesma maneira, a camada de processamento de fluxo de tempo de execução 124 também pode determinar que a assinatura 524 inclua evento de eliminação passado 514. Consequentemente, a camada de processamento de fluxo de tempo de execução 124 pode restaurar os eventos de eliminação 514 e 518 a partir da fila de espera 106, enviar os eventos de eliminação 514 e 518 para o agente de processamento de mapa 510 através do fluxo de eliminação de jogo X 530 e enviar o evento de eliminação 514 para o agente de processamento de jogador de elite 512 através do fluxo de eliminação de jogador C no jogo X 532.
[0074] Conforme mostrado na Figura 5D, no tempo T3, um novo evento de eliminação 528 é publicado na fila de espera 106. A camada de processamento de fluxo de tempo de execução 124 pode restaurar o evento 528 da fila de espera 106 e determinar que esse novo evento de eliminação 528 pertence ao fluxo de eliminação de jogo X 530. O evento de eliminação 528 pode, então, ser enviado por push para o fluxo de eliminação de jogo X 530 e entregue ao agente de processamento de mapa 510. A camada de processamento de fluxo de tempo de execução 124 pode continuar a processar e entregar mais eventos à medida que os mesmos são publicados na fila de espera 106 de um modo similar.
[0075] Pode ser visto acima, permitindo-se que um agente de processamento de assinante implícito 102 receba informações em eventos para os quais o mesmo não assinou, os agentes de processamento de fluxo 102 podem ser ativados automaticamente com base em eventos que fluem através do sistema suportando, desse modo, unidades de processamento de fluxo muito granulares simplificando significativamente, desse modo, o modelo de programação. Além disso, reduzindo-se a definição de fluxos para a semântica dos eventos que são entregues pelos menos, agentes de processamento 102 podem não precisar estar ciente da topologia de fluxo e podem focar, em vez disso, nos eventos específicos que os mesmos desejam processar, que simplifica ainda o modelo de programação. Além disso, utilizando-se as tecnologias apresentadas no presente documento, definição ad-hoc de detecção de evento complexo e lógica de agregação pode ser aplicada dinamicamente ao sistema sem que ter que recompilar ou reimplantar a topologia.
[0076] A Figura 6 mostra uma arquitetura de computador exemplificativa para um dispositivo de computação 600 com a capacidade de armazenar e executar os componentes mostrados na Figura 1. A arquitetura de computador mostrada na Figura 6 ilustra um computador servidor convencional, estação de trabalho, computador do tipo desktop, computador do tipo laptop, tablet, phablet, aparelho de rede, assistente digital pessoal ("PDA"), leitor eletrônico, telefone celular digital ou outro dispositivo de computação, e pode ser utilizado para executar qualquer um dos componentes de software apresentados no presente documento. Por exemplo, a arquitetura de computador mostrada na Figura 6 pode ser utilizada para executar qualquer um dos componentes de software descritos acima.
[0077] O dispositivo de computação 600 inclui uma placa-base 602 ou "placa-mãe" que é uma placa de circuito impresso a qual uma multiplicidade de componentes ou dispositivos podem ser conectados por meio de um barramento de sistema ou outras vias de comunicação elétricas. Em um aspecto ilustrativo, uma ou mais unidades de processamento centrais ("CPUs") 604 operam em conjunto com um conjunto de chips 606. As CPUs 604 podem ser processadores programáveis padrão que realizam operações aritméticas e lógicas necessárias para a operação do dispositivo de computação 600.
[0078] As CPUs 604 realizam operações transicionando de um estado físico específico para o seguinte através da manipulação de elementos de comutação que diferenciam e mudam esses estados. Os elementos de comutação podem incluir, em geral, circuitos eletrônicos que mantêm um dentre dois estados binários, tais como flip-flops, e circuitos eletrônicos que fornecem um estado de saída com base na combinação lógica dos estados de um ou mais outros elementos de comutação, tais como portas lógicas. Esses elementos de comutação básicos podem ser combinados para criar mais circuitos lógicos complexos, que incluem registros, adicionadores-subtratores, unidades de lógica aritmética, unidades de ponto flutuante e similares.
[0079] O conjunto de chips 606 fornece uma interface entre as CPUs 604 e o restante dos componentes e dispositivos na placa base 602. O conjunto de chips 606 pode fornecer uma interface a uma RAM 608, usada como a memória principal no dispositivo de computação 600. O conjunto de chips 606 pode fornecer ainda uma interface a um meio de armazenamento legível por computador tal como uma memória apenas de leitura ("ROM") 610 ou RAM não volátil ("NVRAM") para armazenar rotinas básicas que ajudam a inicializar o dispositivo de computação 600 e a transferir informações entre os vários componentes e dispositivos. A ROM 610 ou NVRAM também pode armazenar outros componentes de software necessários para a operação do dispositivo de computação 600 em conformidade com os aspectos descritos no presente documento.
[0080] O dispositivo de computação 600 pode operar em um ambiente em rede com o uso de conexões lógicas em dispositivos de computação remotos e sistemas de computador através de uma rede, tal como a rede de área local 620. O conjunto de chips 606 pode incluir funcionalidade para fornecer conectividade de rede através de um controlador de interface de rede (NIC) 612, tal como um adaptador de Ethernet de gigabit. O NIC 612 tem a capacidade de conectar o dispositivo de computação 600 em outros dispositivos de computação ao longo da rede 620. Deve-se verificar que múltiplos NICs 612 podem estar presentes no dispositivo de computação 600, que conectam o computador a outros tipos de redes e sistemas de computador remotos. A rede de área local 620 permite que o dispositivo de computação 600 se comunique com servidores e serviços remotos, tais como um computador remoto 650.
[0081] O dispositivo de computação 600 pode ser conectado a um dispositivo de armazenamento em massa 616 que fornece armazenamento não volátil para o dispositivo de computação. O dispositivo de armazenamento em massa 616 pode armazenar programas de sistema, programas de aplicativo, outros módulos de programa, e dados, que foram descritos em maiores detalhes no presente documento. O dispositivo de armazenamento em massa 616 pode ser conectado ao dispositivo de computação 600 através de um controlador de armazenamento 614 conectado ao conjunto de chips 606. O dispositivo de armazenamento em massa 616 pode consistir em uma ou mais unidades de armazenamento físicas. O controlador de armazenamento 614 pode realizar interface com as unidades de armazenamento físicas através de uma interface SCSI anexada serial ("SAS"), uma interface de fixação de tecnologia avançada serial ("SATA"), uma interface de canal de fibra ("FC") ou outro tipo de interface para conectar fisicamente e transferir dados entre computadores e unidades de armazenamento físicas. Deve-se verificar também que o dispositivo de armazenamento em massa 616, outro meio de armazenamento e o controlador de armazenamento 614 podem incluir componentes MultiMediaCard (MMC), componentes eMMC, componentes Secure Digital (SD), componentes PCI Express ou similares.
[0082] O dispositivo de computação 600 pode armazenar dados no dispositivo de armazenamento em massa 616 transformando-se o estado físico das unidades de armazenamento físicas para refletir as informações sendo armazenadas. A transformação específica de estado físico pode depender de vários fatores, em diferentes implantações desta descrição. Exemplos de tais fatores podem incluir, mas sem limitação, a tecnologia usada para implantar as unidades de armazenamento físicas, se o dispositivo de armazenamento em massa 616 é distinguido como armazenamento primário ou secundário, e similares.
[0083] Por exemplo, o dispositivo de computação 600 pode armazenar informações no dispositivo de armazenamento em massa 616 emitindo-se instruções através do controlador de armazenamento 614 para alterar as características magnéticas de uma localização particular dentro de uma unidade de disco magnético, as características refletivas ou refrativas de uma localização particular em uma unidade de armazenamento óptico, ou as características elétricas de um capacitor particular, transistor ou outro componente distinto em uma unidade de armazenamento de estado sólido. Outras transformações de meio físico são possíveis sem que se afaste do escopo e do espírito da presente descrição, em que os exemplos anteriormente mencionados servem apenas para facilitar esta descrição. O dispositivo de computação 600 pode ler ainda informações do dispositivo de armazenamento em massa 616 detectando-se os estados físicos ou características de uma ou mais localizações particulares dentro das unidades de armazenamento físicas.
[0084] Além do dispositivo de armazenamento em massa 616 descrito acima, o dispositivo de computação 600 pode ter acesso a outro meio de armazenamento legível por computador para armazenar e restaurar informações, tais como módulos de programa, estruturas de dados ou outros dados. Desse modo, embora o sistema de tempo de execução 108 e outros módulos sejam mostrados como dados e software armazenados no dispositivo de armazenamento em massa 616, deve-se verificar que o sistema de tempo de execução 108 e/ou outros módulos podem ser armazenados, pelo menos em parte, em outro meio de armazenamento legível por computador do dispositivo 600. Embora a descrição de meio legível por computador contido no presente documento se refira a um dispositivo de armazenamento em massa, tal como uma unidade de estado sólido, um disco rígido ou uma unidade de CD-ROM, deve ser entendido pelos versados na técnica que o meio legível por computador pode ser qualquer meio legível por computador disponível ou meio de comunicação que pode ser acessado pelo dispositivo de computação 600.
[0085] Os meios de comunicação incluem instruções legíveis por computador, estruturas de dados, módulos de programa, ou outros dados em um sinal de dados modulados, tal como uma onda de portador ou outro mecanismo de transporte, e inclui quaisquer meios de entrega. O termo "sinal de dados modulado" significa um sinal que tem uma ou mais de suas características alteradas ou definidas de modo a codificar informações no sinal. A título de exemplo, e não limitação, meio de comunicação inclui meio com fio tal como uma rede com fio ou conexão com fio direta, e meio sem fio tal como meio acústico, RF, infravermelho e outros meios sem fio. As combinações dos supracitados também devem ser abrangidas pelo escopo de meios legíveis por computador.
[0086] A título de exemplo, e não de limitação, os meios de armazenamento de computador podem incluir meios voláteis e não voláteis, removíveis e não removíveis implantados em qualquer método ou tecnologia para armazenamento de informações, tais como instruções legíveis por computador, estruturas de dados, módulos de programa ou outros dados. Por exemplo, os meios de computador incluem, sem limitação, RAM, ROM, EPROM, EEPROM, memória flash ou outra tecnologia de memória de estado sólido, CD-ROM, discos versáteis digitais ("DVD"), HD-DVD, BLU-RAY, ou outro armazenamento óptico, cassetes magnéticos, fita magnética, armazenamento em disco magnético ou outros dispositivos de armazenamento magnético, ou qualquer outro meio que pode ser usado para armazenar as informações desejadas e que pode ser acessado pelo dispositivo de computação 600. Para propósitos das reivindicações, as expressões "meio de armazenamento em computador", "meio de armazenamento legível por computador" e variações das mesmas, não incluem ondas ou sinais por si e/ou meios de comunicação.
[0087] O dispositivo de armazenamento em massa 616 pode armazenar um sistema operacional 622 utilizado para controlar a operação do dispositivo de computação 600. De acordo com um aspecto, o sistema operacional compreende o sistema operacional LINUX. De acordo com outro aspecto, o sistema operacional compreende o sistema operacional WINDOWS® da MICROSOFT Corporation. De acordo com aspectos adicionais, o sistema operacional pode compreender os sistemas operacionais UNIX, Android, Windows Phone ou iOS. Deve-se verificar que outros sistemas operacionais também podem ser utilizados. O dispositivo de armazenamento em massa 616 pode armazenar outro sistema ou programas de aplicativo e dados utilizados pelo dispositivo de computação 600, tais como o sistema de tempo de execução 108 e/ou qualquer um dentre os outros componentes de software e dados descritos acima. O dispositivo de armazenamento em massa 616 também pode armazenar outros programas e dados não identificados especificamente no presente documento.
[0088] Em um aspecto, o dispositivo de armazenamento em massa 616 ou outros meios de armazenamento legíveis por computador é codificado com instruções executáveis por computador que, quando carregadas no dispositivo de computação 600, transformam o computador de um sistema de computação de propósito geral em um computador de propósito especial com a capacidade de implantar os aspectos descritos no presente documento. Essas instruções executáveis por computador transformam o dispositivo de computação 600 especificando-se como as CPUs 604 transicionam entre estados, conforme descrito acima. De acordo com um aspecto, o dispositivo de computação 600 tem acesso a meios de armazenamento legíveis por computador que armazenam instruções executáveis por computador que, quando executadas pelo dispositivo de computação 600, realizam as várias rotinas descritas acima em relação às Figuras 3 e 4. O dispositivo de computação 600 também pode incluir meios de armazenamento legíveis por computador para realizar qualquer uma dentre as outras operações implantadas por computador descritas no presente documento.
[0089] O dispositivo de computação 600 também pode incluir um ou mais controladores de entrada/saída 617 para receber e processar entrada de um dispositivo de entrada 619. O dispositivo de entrada 619 pode incluir uma variedade de dispositivos de entrada, tais como um teclado, um mouse, um microfone, um fone de ouvido, um teclado numérico sensível ao toque, uma tela sensível ao toque, uma caneta stylus eletrônica ou qualquer outro tipo de dispositivo de entrada. De modo similar, o controlador de entrada/saída 617 pode fornecer saída a um visor, tal como um monitor de computador, um visor de tela plana, um projetor digital, uma impressora, uma plotadora ou outro tipo de dispositivo de saída. Será verificado que o dispositivo de computação 600 pode não incluir todos os componentes mostrados na Figura 6, pode incluir outros componentes que não são explicitamente mostrados na Figura 6 ou pode utilizar uma arquitetura completamente diferente daquela mostrada na Figura 6.
[0090] A revelação apresentada no presente documento pode ser considerada tendo em vista as cláusulas a seguir.
[0091] Cláusula 1. Método implantado por computador para entregar eventos, sendo que o método compreende: receber uma publicação de um evento; identificar um agente de processamento para receber informações associadas ao evento com base em configurações do agente de processamento, em que o agente de processamento não assina explicitamente para receber o evento; determinar se o agente de processamento está ativado; em resposta à determinação de que o agente de processamento não está ativado, ativar o agente de processamento; entregar as informações associadas ao evento ao agente de processamento; receber uma assinatura de um ou mais eventos do agente de processamento; e entregar o um ou mais eventos ao agente de processamento.
[0092] Cláusula 2. Método, da cláusula 1, que compreende ainda: determinar se a assinatura especifica um ou mais eventos passados a serem entregues; e em resposta à determinação de que a assinatura especifica um ou mais eventos passados a serem entregues, entregar o um ou mais eventos passados ao agente de processamento.
[0093] Cláusula 3. Método, das cláusulas 1 e 2, em que receber a publicação do evento na fila de espera compreende: receber uma solicitação para publicar o evento em uma fila de espera; ativar um fluxo virtual que corresponde ao evento; e publicar o evento na fila de espera através do fluxo virtual.
[0094] Cláusula 4. Método, das cláusulas 1 a 3, em que a assinatura de um ou mais eventos define um fluxo virtual, e a assinatura é uma assinatura do fluxo virtual que corresponde ao um ou mais eventos.
[0095] Cláusula 5. Método, das cláusulas 1 a 4, em que ativar o agente de processamento compreende alocar recursos de sistema ao agente de processamento, e em que a assinatura do fluxo virtual ativa o fluxo virtual e faz com que os recursos de sistema sejam alocados ao fluxo virtual.
[0096] Cláusula 6. Método das cláusulas 1 a 5, que compreende ainda: desativar o fluxo virtual quando nenhum evento é recebido no fluxo virtual ao longo de um determinado período de tempo retomandose os recursos de sistema alocados ao fluxo virtual; e desativar o agente de processamento, o agente de processamento se torna ocioso durante um determinado período de tempo retomando-se os recursos de sistema alocados ao agente de processamento.
[0097] Cláusula 7. Método das cláusulas 1 a 6, em que a configuração do agente de processamento é obtida de modo programático ou determinada a partir de uma definição declarativa do agente de processamento.
[0098] Cláusula 8. Método das cláusulas 1 a 7, em que o agente de processamento é endereçável para entregar o evento independente da possibilidade de que o agente de processamento esteja ativado ou não ativado.
[0099] Cláusula 9. Meio de armazenamento legível por computador que tem instruções executáveis por computador armazenadas no mesmo que, quando executadas por um computador, fazem com que o computador: determine um agente de processamento para receber um evento que é publicado em uma fila de espera e que o agente de processamento não assina explicitamente, em que o evento é publicado na fila de espera através de um primeiro fluxo virtual que corresponde ao evento; determine se o agente de processamento está ativado; em resposta à determinação de que o agente de processamento não está ativado, ative o agente de processamento; faça com que as informações de evento do evento sejam entregues ao agente de processamento; processe uma assinatura explícita de um segundo fluxo virtual definido pela assinatura explícita, em que a assinatura explícita é enviada pelo agente de processamento em resposta às informações de evento entregues ao agente de processamento; e faça com que eventos no segundo fluxo virtual sejam entregues ao agente de processamento.
[00100] Cláusula 10. Meio de armazenamento legível por computador da cláusula 9, em que os eventos publicados na fila de espera são persistidos.
[00101] Cláusula 11. Meio de armazenamento legível por computador das cláusulas 9 e 10, que compreende ainda instruções executáveis por computador que, quando executadas pelo computador, fazem com que o computador: determine se o segundo fluxo virtual inclui eventos passados publicados na fila de espera; e em resposta à determinação de que o segundo fluxo virtual inclui eventos passados publicados na fila de espera, faça com que os eventos passados sejam enviados por push para o segundo fluxo virtual e entregues ao agente de processamento.
[00102] Cláusula 12. Meio de armazenamento legível por computador das cláusulas 9 a 11, que compreende ainda instruções executáveis por computador que, quando executadas pelo computador, fazem com que o computador: desative o segundo fluxo virtual quando nenhum evento é recebido no segundo fluxo virtual ao longo de um determinado período de tempo retomando-se os recursos de sistema alocados ao fluxo virtual; e desative o agente de processamento quando o agente de processamento se torna ocioso durante um determinado período de tempo retomando-se os recursos de sistema alocados ao agente de processamento.
[00103] Cláusula 13. Meio de armazenamento legível por computador das cláusulas 9 a 12, em que ativar o agente de processamento compreende alocar recursos de sistema ao agente de processamento, e em que a assinatura do segundo fluxo virtual ativa o segundo fluxo virtual e faz com que os recursos de sistema sejam alocados ao segundo fluxo virtual.
[00104] Cláusula 14. Meio de armazenamento legível por computador das cláusulas 9 a 13, em que o agente de processamento é endereçável para entregar o evento independente da possibilidade de que o agente de processamento esteja ativado ou não ativado.
[00105] Cláusula 15. Meio de armazenamento legível por computador das cláusulas 9 a 14, em que o agente de processamento é obtido de modo programático ou determinado com base em uma definição declarativa do agente de processamento.
[00106] Cláusula 16. Sistema que compreende um ou mais dispositivos de computação que executam um tempo de execução que é configurado para: gerenciar uma fila de espera para receber e persistir publicações de eventos; receber uma publicação de um evento em um primeiro fluxo virtual e encaminhar a publicação do evento para a fila de espera; identificar um agente de processamento para entregar informações de evento do evento com base em uma configuração do agente de processamento, em que o agente de processamento não assina explicitamente para receber o evento e é endereçável para entregar as informações de evento independente da possibilidade de que o agente de processamento esteja ativado ou não ativado; determinar se o agente de processamento está ativado; em resposta à determinação de que o agente de processamento não está ativado, ativar o agente de processamento; entregar as informações de evento ao agente de processamento; receber uma assinatura explícita de eventos em um segundo fluxo virtual do agente de processamento após as informações de evento serem entregues ao agente de processamento; determinar se a assinatura explícita especifica eventos passados publicados na fila de espera antes de a assinatura explícita ser recebida; em resposta à determinação de que a assinatura explícita especifica eventos passados, restaurar um evento passado a partir dos eventos passados publicados na fila de espera e enviar por push os eventos passados aos segundos fluxos virtuais, e entregar os eventos no segundo fluxo virtual ao agente de processamento.
[00107] Cláusula 17. Sistema, de acordo com a reivindicação 16, em que ativar o agente de processamento compreende alocar recursos de sistema ao agente de processamento, e em que a assinatura do segundo fluxo virtual ativa o segundo fluxo virtual e faz com que os recursos de sistema sejam alocados ao segundo fluxo virtual.
[00108] Cláusula 18. Sistema, das cláusulas 16 e 17, que compreende ainda uma pluralidade de servidores que executam um ou mais agentes de processamento, em que o tempo de execução é configurado ainda para retomar um agente de processamento após falha de um servidor no qual o agente de processamento foi ativado reativando-se o agente de processamento em outro servidor.
[00109] Cláusula 19. Sistema, das cláusulas 16 a 18, em que a configuração do agente de processamento é obtida de modo programático ou determinada a partir de uma definição declarativa do agente de processamento.
[00110] Cláusula 20. Sistema, das cláusulas 16 a 19, em que o tempo de execução é configurado ainda para: desativar o segundo fluxo virtual quando nenhum evento for recebido no segundo fluxo virtual ao longo de um determinado período de tempo retomando-se os recursos de sistema alocados ao fluxo virtual; e desativar o agente de processamento quando o agente de processamento se tornar ocioso durante um determinado período de tempo retomando-se os recursos de sistema alocados ao agente de processamento.
[00111] Com base no antecedente, deve-se verificar que conceitos e tecnologias para assinar, receber e processar eventos são apresentados no presente documento. Embora a matéria apresentada no presente documento tenha sido descrita em linguagem específica para recursos estruturais de computador, ações metodológicas e meios legíveis por computador, deve-se entender que a invenção definida nas reivindicações anexas não se limita necessariamente aos recursos, ações ou meios específicos descritos no presente documento. Em vez disso, os recursos, ações e meios específicos são revelados como formas exemplificativas de implantação das reivindicações.
[00112] A matéria descrita acima é fornecida a título de ilustração apenas e não deve ser interpretada como limitante. Várias modificações e mudanças podem ser feitas à matéria descrita no presente documento sem seguir os aspectos exemplificativos e aplicações ilustradas e descritas, e sem se afastar do espírito e escopo verdadeiros da presente invenção, que são estabelecidos nas reivindicações a seguir.

Claims (20)

1. Método implementado por computador para entregar eventos para um agente de processamento executando em um ou mais servidores, o método caracterizado pelo fato de que compreende: receber (302) uma publicação de um evento em uma fila de eventos, em que o evento inclui informações que descrevem uma interação do jogador com um aplicativo de jogo; mapear o evento para um agente de processamento de uma pluralidade de agentes de processamento diferentes, em que o agente de processamento não assinou explicitamente para receber o evento; determinar que o agente de processamento não está ativado; em resposta à determinação de que o agente de processamento não está ativado, ativar o agente de processamento de modo que o agente de processamento esteja disponível para proporcionar funcionalidade para um aplicativo; entregar o evento para o agente de processamento; receber (312) uma assinatura do agente de processamento; receber uma ou mais publicações adicionais de um ou mais eventos adicionais na fila de eventos, o um ou mais eventos adicionais ocorrendo depois que a assinatura é recebida do agente de processamento; entregar (316, 322), com base pelo menos em parte na assinatura, o um ou mais eventos adicionais para o agente de processamento; determinar (314) que a assinatura solicita que um ou mais eventos passados sejam entregues, o um ou mais eventos passados foram publicados na fila de eventos antes da recepção da assinatura do agente de processamento; e em resposta à determinação de que a assinatura solicita que o um ou mais eventos passados sejam entregues, entregar (316) o um ou mais eventos passados para o agente de processamento.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que receber a publicação do evento na fila de eventos compreende: receber uma solicitação (110) para publicar o evento na fila de eventos; ativar um fluxo virtual correspondendo ao evento; e publicar o evento na fila de eventos através do fluxo virtual.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que a assinatura (114) define um fluxo virtual.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que ativar o agente de processamento compreende alocar recursos de sistema para o agente de processamento.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que uma configuração do agente de processamento é obtida de maneira programável ou determinada de uma definição declarativa do agente de processamento.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o agente de processamento é endereçado para entregar o evento independente de se o agente de processamento está ativado ou não ativado.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o agente de processamento está configurado para receber um tipo particular de evento e a assinatura solicita todos os eventos do tipo particular de evento que são publicados na fila de eventos incluindo o evento, o um ou mais eventos adicionais e o um ou mais eventos passados.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende utilizar uma tabela de ativação para mapear o evento para o agente de processamento.
9. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o agente de processamento está configurado para receber eventos diferentes que ocorrem dentro de uma sessão individual do aplicativo de jogo.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o agente de processamento está configurado para receber eventos diferentes causados por um jogador individual participando de uma sessão do aplicativo de jogo.
11. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o agente de processamento está configurado para receber eventos diferentes causados por um dispositivo individual participando de uma sessão do aplicativo de jogo.
12. Sistema compreendendo um ou mais dispositivos de computação, caracterizado pelo fato de que tem um método que compreende: gerenciar uma fila para receber e persistir em publicações de eventos, em que um evento individual inclui informações que descrevem uma interação do jogador com um aplicativo de jogo; receber (302) uma publicação de um evento em um fluxo virtual; encaminhar a publicação do evento para a fila; mapear o evento para um agente de processamento de uma pluralidade de agentes de processamento diferentes, em que o agente de processamento não assinou explicitamente para receber o evento e o agente de processamento é endereçado para entregar o evento independente de se o agente de processamento está ativado ou não ativado; determinar que o agente de processamento não está ativado; em resposta à determinação de que o agente de processamento não está ativado, ativar o agente de processamento de modo que o agente de processamento esteja disponível para proporcionar funcionalidade para um aplicativo; entregar o evento para o agente de processamento; receber uma assinatura explicita para o fluxo virtual do agente de processamento depois que o evento é entregue para o agente de processamento; receber uma ou mais publicações adicionais de um ou mais eventos adicionais no fluxo virtual depois que a assinatura explicita é recebida; encaminhar a uma ou mais publicações adicionais do um ou mais eventos adicionais para a fila; entregar, com base pelo menos em parte na assinatura explicita, o um ou mais eventos adicionais para o agente de processamento; determinar que eventos passados do tipo particular foram publicados na fila antes que a assinatura explicita seja recebida; recuperar os eventos passados que foram publicados na fila; e entregar os eventos passados para o agente de processamento.
13. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que ativar o agente de processamento compreende alocar recursos de sistema para o agente de processamento.
14. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que ainda compreende: desativar o fluxo virtual quando nenhum evento é recebido no fluxo virtual ao longo de um certo período de tempo, retomando os recursos de sistema alocados ao fluxo virtual; e desativar o agente de processamento quando o agente de processamento se torna ocioso durante um determinado período de tempo, retomando os recursos de sistema alocados ao agente de processamento.
15. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que o agente de processamento está configurado para receber um tipo particular de evento e a assinatura explicita solicita todos os eventos do tipo particular que são publicados na fila incluindo o evento, o um ou mais eventos adicionais e os eventos passados.
16. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que ainda compreende utilizar uma tabela de ativação para mapear o evento para o agente de processamento.
17. Sistema caracterizado pelo fato de que compreende: um ou mais processadores; e uma ou mais meios de armazenamento legíveis por computador com um método armazenado nas mesmas que, quando executado por um ou mais processadores, faz o sistema: receber uma publicação de um evento em uma fila de eventos, em que o evento inclui informações que descrevem uma interação do jogador com um aplicativo de jogo; mapear o evento para um agente de processamento de uma pluralidade de diferentes agentes de processamento, em que o agente de processamento não assinou explicitamente para receber o evento; determinar que o agente de processamento não está ativado; em resposta à determinação de que o agente de processamento não está ativado, ativar o agente de processamento de modo que o agente de processamento esteja disponível para fornecer funcionalidade ao aplicativo de jogo; entregar o evento para o agente de processamento; receber uma assinatura do agente de processamento; receber uma ou mais publicações adicionais de um ou mais eventos adicionais na fila de eventos, o um ou mais eventos adicionais que ocorrem após o recebimento da assinatura do agente de processamento; entregar, com base pelo menos em parte na assinatura, um ou mais eventos adicionais para o agente de processamento; determinar que a assinatura solicita que um ou mais eventos passados sejam entregues, tendo sido publicados um ou mais eventos passados na fila de eventos antes do recebimento da assinatura do agente de processamento; e em resposta à determinação de que a assinatura solicita que um ou mais eventos passados sejam entregues, entregar o um ou mais eventos passados ao agente de processamento.
18. Sistema, de acordo com a reivindicação 17, caracterizado pelo fato de que o agente de processamento é responsável pelo processamento de diferentes eventos que ocorrem dentro de uma sessão individual do aplicativo de jogo.
19. Sistema, de acordo com a reivindicação 17, caracterizado pelo fato de que o agente de processamento é responsável pelo processamento de diferentes eventos causados por um jogador individual participando de uma sessão do aplicativo de jogo.
20. Sistema, de acordo com a reivindicação 17, caracterizado pelo fato de que o agente de processamento é responsável pelo processamento de diferentes eventos causados por um dispositivo individual participando de uma sessão do aplicativo de jogo.
BR112016030978-2A 2014-07-08 2015-07-06 Método e sistema implementado por computador para entregar eventos, e sistema compreendendo um ou mais dispositivos de computação BR112016030978B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/326,239 US10554709B2 (en) 2014-07-08 2014-07-08 Stream processing utilizing virtual processing agents
US14/326,239 2014-07-08
PCT/US2015/039170 WO2016007399A1 (en) 2014-07-08 2015-07-06 Stream based event processing utilizing virtual streams and processing agents

Publications (3)

Publication Number Publication Date
BR112016030978A2 BR112016030978A2 (pt) 2017-08-22
BR112016030978A8 BR112016030978A8 (pt) 2021-06-15
BR112016030978B1 true BR112016030978B1 (pt) 2023-07-04

Family

ID=

Similar Documents

Publication Publication Date Title
US11310286B2 (en) Mechanism for providing external access to a secured networked virtualization environment
KR102055325B1 (ko) 원격으로 액세스되는 데이터의 효율적인 라이브-이송
US10884799B2 (en) Multi-core processor in storage system executing dynamic thread for increased core availability
US10091295B1 (en) Converged infrastructure implemented with distributed compute elements
US20200233704A1 (en) Multi-core processor in storage system executing dedicated polling thread for increased core availability
US11184418B2 (en) Stream processing utilizing virtual processing agents
US9697029B2 (en) Guest idle based VM request completion processing
US9881018B2 (en) File management in thin provisioning storage environments
Markussen et al. Smartio: Zero-overhead device sharing through pcie networking
Rosen Namespaces and cgroups, the basis of Linux containers
US11256577B2 (en) Selective snapshot creation using source tagging of input-output operations
US10785295B2 (en) Fabric encapsulated resilient storage
US20200042622A1 (en) Polling process for monitoring interdependent hardware components
BR112016030978B1 (pt) Método e sistema implementado por computador para entregar eventos, e sistema compreendendo um ou mais dispositivos de computação
US10860078B2 (en) Managing power request during cluster operations
US11593121B1 (en) Remotely disabling execution of firmware components
US20230244390A1 (en) Collecting quality of service statistics for in-use child physical functions of multiple physical function non-volatile memory devices
US20160103779A1 (en) Methods and systems for sharing information between processors