BR112016021037B1 - Método e sistema para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, método e sistema para permitir tolerância a falhas para um aplicativo de software - Google Patents

Método e sistema para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, método e sistema para permitir tolerância a falhas para um aplicativo de software Download PDF

Info

Publication number
BR112016021037B1
BR112016021037B1 BR112016021037-9A BR112016021037A BR112016021037B1 BR 112016021037 B1 BR112016021037 B1 BR 112016021037B1 BR 112016021037 A BR112016021037 A BR 112016021037A BR 112016021037 B1 BR112016021037 B1 BR 112016021037B1
Authority
BR
Brazil
Prior art keywords
instance
instances
application
results
primary
Prior art date
Application number
BR112016021037-9A
Other languages
English (en)
Other versions
BR112016021037A2 (pt
Inventor
James Michael Cape
Robert Park
Allen Zhang
Zoran Perkov
Lieting Yu
Prerak Pukhraj Sanghvi
Beau Tateyama
Constantine Sokoloff
Eric Quinlan
Original Assignee
IEX Group, Inc
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
Application filed by IEX Group, Inc filed Critical IEX Group, Inc
Priority claimed from US14/644,674 external-priority patent/US10210005B2/en
Publication of BR112016021037A2 publication Critical patent/BR112016021037A2/pt
Publication of BR112016021037B1 publication Critical patent/BR112016021037B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Retry When Errors Occur (AREA)
  • Stored Programmes (AREA)

Abstract

sistemas e métodos para sincronização de dados e gerenciamento de failover. trata-se de um sistema de sincronização de dados e gerenciamento de failover (dsfm) que monitora a execução simultânea de instâncias não-idênticas de um aplicativo de software e pode rotular como um resultado particular do aplicativo de software a saída mais precoce correspondente àquele resultado produzido por uma das instâncias. o dsfm pode rotular uma das instâncias como uma instância primária e as outras instâncias como instâncias secundárias e, se a instância primária falhar, pode re-rotular uma das instâncias secundárias que computou todas as operações associadas ao último resultado produzido antes da falha da instância primária, como uma nova instância primária.

Description

REFERÊNCIA REMISSIVA AOS PEDIDOS DE DEPÓSITO CORRELATOS
[001] O presente pedido reivindica prioridade e benefício ao Pedido de Pa-tenteProvisório noU.S. 61/951.374, intitulado “Data Synchronization and Failover Management Apparatuses, Methods and Systems,” depositado em 11 de março de 2014. Este pedido também reivindica prioridade e benefício ao Pedido de Utilidade noU.S. 14.644.674, com título igual, depositado em 11 de março de 2015. A matéria do presente pedido está relacionada ao Pedido de Utilidade co-pendente noU.S. 14/644.606, depositado em 11 de março de 2015, que reivindica prioridade ao: (a) Pedido Provisório noU.S. 61/951.364, depositado em 11 de março de 2014; e (b) Pedido Provisório noU.S. 61/951.390, depositado em 11 de março de 2014. A matéria do presente pedido também está relacionada ao Pedido Internacional PCT no PCT/US2013/059558, depositado em 12 de setembro de 2013. Cada um dos pedidos correlatos supracitados se encontra aqui incorporado em sua totalidade a título de referência.
CAMPO DA INVENÇÃO
[002] A presente revelação refere-se, em geral, a ambientes de tempo de execução para execução de aplicativos de software e, em particular, a técnicas para aprimorar o desempenho e a confiabilidade de um aplicativo de software.
FUNDAMENTOS
[003] Programas e sistemas de software, geralmente referidos como aplicativos ou aplicativos de software, geralmente realizam tarefas críticas de missão em vários campos como monitoramento e controle de sistemas médicos, transações financeiras, monitoramento e controle de produção industrial, etc. Um aplicativo que realiza uma tarefa crítica algumas vezes falha, por exemplo, devido a um erro de software. Através da análise de código, teste, e reparos ao código, erros de software podem ser evitados ou pelo menos minimizados. Algumas vezes, no entanto, a exe-cução de um aplicativo de software falha não devido a um erro de software mas devido a um evento no ambiente no qual o aplicativo é executado. Por exemplo, um disco ou outra memória a partir da qual o aplicativo avalia dados pode falhar, um link de rede para acessar um ou mais componentes do aplicativo e/ou dados requeridos podem falhar, etc. Essas falhas ambientais podem fazer com que um aplicativo de software falhe.
[004] Em vários campos, como aqueles descritos anteriormente, espera-se que um aplicativo de software não somente entregue alto desempenho, por exemplo, para gerar resultados computacionais requeridos o mais rápido possível, mas também proporcionar esses resultados de maneira confiável. Embora erros de software possam ser evitados ou pelo menos minimizados, conforme descrito anteriormente, erros causados por fatores ambientais e/ou falhas de hardware tendem a ser imprevisíveis. Portanto, uma forma de aperfeiçoar a confiabilidade do aplicativo de software consiste em executar simultaneamente duas instâncias do aplicativo de software. Mesmo se uma instância falhar devido a um evento ambiental, não é muito provável que nesse momento de tempo ocorra um evento no ambiente da outra instância, fazendo com que a instância também falhe. Portanto, a outra instância, geralmente denominada como uma instância de backup, pode continuar a realizar as tarefas computacionais requeridas.
[005] No entanto, essa abordagem baseada em redundância apresenta alguns desafios. Primeiro, executar duas instâncias do aplicativo de software geralmente aumenta os custos de execução do aplicativo de software em termos de recursos requeridos como processadores, servidores, memória, interfaces de rede, etc. Segundo, essa abordagem não é altamente escalonável porque outro evento ambiental que induz uma falha da instância de backup pode ocorrer. Embora duas ou mais instâncias de backup possam ser executadas simultaneamente, para aumentar a redundância e, logo, a confiabilidade, também se pode aumentar ainda mais os custos de execução do aplicativo de software.
[006] Para uma execução eficiente de um aplicativo de software, linguagens computacionais interpretadas oferecem vários benefícios em relação a suas contra- partes compiladas, tal como maior portabilidade ao longo das diferentes arquiteturas computacionais. A execução de código em um interpretador pode ser dramaticamente mais lenta, no entanto, do que executar o mesmo código compilado a uma linguagem de máquina nativa do processador. Para superar essa desvantagem, muitos interpretadores podem aperfeiçoar o desempenho incluindo-se compilação just-intime (JIT), em que pelo menos uma porção do código de byte do interpretador é compilada ao código nativo do processador. O interpretador pode, então, executar o código nativo ao invés de interpretar o código de byte para tal porção do programa. Esse recurso é proporcionado em vários tempos de execução de interpretador, incluindo a implementação de HotSpot padrão da Máquina Virtual Java (JVM) e Microsoft's Common Language Runtime (comumente conhecido como. NET), e pode oferecer um desempenho comparável a linguagens compiladas ahead-of-time (AIT) tradicionais.
[007] Outro aperfeiçoamento de desempenho é possível com linguagens compiladas JIT, onde à medida que interpretador excuta um código de byte particular (ou outra representação intermediária, ou código fonte), o interpretador pode acumu-larinformações de perfil sobre o código executado ou pelo menos uma porção do mesmo, permitindo um grau maior que otimização quando o código ou uma porção do mesmo for compilado. Essa otimização adaptativa é proporcionada no HotSpot JVM e pode algumas vezes oferecer um desempenho melhor do que um código compilado ahead-of-time. Uma desvantagem principal dessa técnica é que o código ou uma porção do mesmo deve ser executado muitas vezes (por exemplo, dezenas, centenas, milhares, ou até mesmo mais vezes) usando o interpretador para coletar informações de perfil suficientes para otimizar a compilação. Durante a fase de perfil, o aplicativo de software tipicamente executa mais lento do que uma versão compilada que usa uma técnica de compilação tradicional como compilação AIT. Somente após o perfil do código estar completo o JIT adaptativo pode oferecer um desempenho aprimorado.
[008] O documento US8621275 fornece um sistema, método e meio legível por computador para migração dinâmica assíncrona de aplicativos entre dois ou mais servidores. Os aplicativos primários são executados em hosts primários e uma ou mais instâncias replicadas de cada aplicativo primário são executados em um ou mais hosts de backup. A migração dinâmica assíncrona é fornecida por meio de uma combinação de replicação de processo, registro, sincronização de barreira, ponto de verificação, mensagens confiáveis e reprodução de mensagens. A migração dinâmicaé transparente para o aplicativo e não requer modificação no aplicativo, sistema operacional, pilha de rede ou bibliotecas.
SUMÁRIO
[009] As modalidades dos sistemas e métodos descritos no presente docu-mento apresentam Sincronização de Dados e Gerenciamento de Tolerância a Falhas (“Failover”) (DSFM), através do qual a confiabilidade de um aplicativo de software pode ser aumentada facilitando-se a execução simultânea de várias instâncias não- idênticas do aplicativo de software. Embora isso possa aumentar os custos de exe-cução do aplicativo de software, técnicas diferentes baseadas meramente em re-dundância, as instâncias não-idênticas podem proporcionar um aprimoramento de desempenho. De modo específico, cada instância pode ser gerada para otimizar um respectivo objetivo diferente, tal como maximizar, minimizar, ou utilizar de acordo com um limite especificado um ou mais recursos, como memória, interfaces de rede, capacidade de processamento, número de processadores disponíveis, etc. Algumas instâncias podem ser otimizadas para execução usando informações de tempo de execução disponíveis a partir de ciclos anteriores e/ou utilizando-se compilação justin-time (JIT). Essas instâncias podem ser geradas compilando-se o código fonte do aplicativo de software usando compiladores diferentes e/ou utilizando-se diferentes opções de compilador que podem otimizar um ou mais objetivos especificados, tais como aqueles descritos anteriormente.
[010] Visto que cada instância é derivada substancialmente a partir do mes-mocódigo fonte, cada instância produz, em suma, os mesmos resultados que qualquer outra instância, isto é, cada instância é propensa a produzir os mesmos resultados que se espera que o aplicativo de software produza. Diferentes instâncias podem ser otimizadas de modo diferente, no entanto, e, portanto, podem produzir um ou mais resultados em uma sequência de resultados em diferentes momentos durante sua respectiva execução, apesar de a execução das várias instâncias do aplicativo de software ser iniciada em, ou aproximadamente ao, mesmo tempo. Se for esperado que aplicativo de software produza uma sequência de resultados, para cada resultado, uma implementação de um sistema de DSFM pode designar/rotular uma saída correspondente de uma instância que produziu a saída antes de todas as outras instâncias que o resultado requerido e pode descartar as saídas de outras instâncias como duplicatas. Em geral, diferentes instâncias podem primeiramente produzir resultados diferentes. Designando-se/rotulando-se as respectivas saídas produzidas mais precocemente que os sucessivos resultados do aplicativo de software, uma implementação do sistema de DSFM pode aprimorar o desempenho geral do aplicativo de software.
[011] Independentemente se uma implementação do sistema de DSFM de- signa/rotula ou seleciona uma saída particular de uma instância particular como um resultado particular do aplicativo de software, cada instância realiza todas as compu- tações necessárias para gerar o resultado. Essas instâncias podem estar em estados diferentes porque algumas instâncias, devido a respectivas otimizações diferentes das mesmas, podem ter realizado computações adicionais que não são necessárias para produzir o resultado particular. Todavia, quando todas as instâncias tiverem concluído as computações que são necessárias para produzir um resultado particular, uma implementação do sistema de DSFM considera que essas instâncias estejam em sincronização ou em sincronia.
[012] Uma implementação do sistema de DSFM pode designar/rotular uma dessas instâncias como uma instância primária. Opcionalmente, uma implementação do sistema de DSFM pode designar/rotular as saídas da instância primária como os resultados do aplicativo de software, e pode descartar as saídas de uma ou mais outras instâncias, designadas/rotuladas como instância(s) secundária(s). Se a instância primária falhar após k resultados serem produzidos, coletivamente por todas as instâncias, conforme descrito anteriormente, ou pela instância primária sozinha, uma implementação do sistema de DSFM pode designar/rotular uma das instâncias secundárias como uma nova instância primária porque, conforme descrito anterior-mente, todas essas instâncias são em sincronia, embora não em um estado idêntico, após os k resultados serem produzidos. O (k+1)-ésimo e um ou mais resultados subsequentes pode ser produzido pela instância secundária re-designada/re- rotulada como a nova instância primária.
[013] Se a instância primária recentemente designada/rotulada falhar após, por exemplo, a computação de n resultados, ainda outra instância secundária estaria em sincronia, e uma implementação do sistema de DSFM pode ser re-designar/re- rotular essa outra instância secundária como a nova instância primária. Embora os custos de executar um aplicativo de software aumentem genericamente com o número de instâncias, as diferentes instâncias, devido a respectivas otimizações diferentes das mesmas, podem ter diferentes desempenhos associados à produção de resultados diferentes, e a seleção da saída mais precoce pode aumentar o desem-penho gera do aplicativo de software. Embora as várias instâncias sejam não- idênticas, várias implementações de um sistema de DSFM podem determinar os ins-tantes nos quais as várias instâncias são em sincronia, e podem, portanto, habilitar tolerância a falhas (“failover”)de uma instância para outra instância diferente, prova-velmente em um estado diferente daquele da instância falha, sem afetar os resultados produzidos, e, logo, podem aumentar a confiabilidade do aplicativo de software.
[014] De modo correspondente, em um aspecto, proporciona-se um método para executar um aplicativo de software de modo expeditivo em pelo menos um pro-cessador computacional. O método inclui executar simultaneamente várias instâncias do aplicativo de software em um ou mais processadores computacionais, onde cada instância é compilada de acordo com uma respectiva opção de compilador que seja diferente de respectivas opções de compilador usadas para compilar todas as outras instâncias a partir das várias instâncias. Para cada um dentre um primeiro conjunto de resultados a serem produzidos pelo aplicativo de software, o método inclui monitorar, correspondente ao resultado, uma respectiva saída gerada por cada instância. Para cada um dentre o primeiro conjunto de resultados a serem produzidos pelo aplicativo, o método também inclui rotular a partir das saídas monitoradas a saída que ocorre mais precocemente que a saída do aplicativo correspondente ao resultado, e rotular todas as outras saídas como duplicatas. Dessa forma, cada um dentre o primeiro conjunto de resultados é obtido a partir de uma instância que produziu tal resultado particular antes de todas as outras instâncias, acelerando, assim, um desempenho computacional do um ou mais processadores computacionais em executar o aplicativo de software.
[015] Em algumas modalidades, as várias instâncias incluem uma primeira instância e uma segunda instância, e a opção de compilador para a primeira instância inclui uma compilação ahead-of-time (AIT). Por exemplo, a primeira instância po- de ser compilada usando uma compilação AIT. A opção de compilador para a segun-dainstância pode incluir uma compilação just-in-time (JIT). A compilação JIT da se-gundainstância pode se basear, pelo menos em parte, nas informações de tempo de execução obtidas a partir de uma ou mais execuções anteriores da segunda instância. Pelo menos uma porção do código fonte do aplicativo de software pode ser especificada usando uma linguagem de programação que seja pelo menos parcial-mente interpretada.
[016] Em algumas modalidades, as várias instâncias incluem uma primeira instância, e a opção de compilador para a primeira instância pode ser uma ou mais dentre o uso de memória sem limitações, minimização de uso de memória, maximi-zaçãode operações simultâneas, e simultaneidade limitada de operações. Logo, em um exemplo, a primeira instância pode maximizar a computação paralela levando vantagem do uso de memória sem limitações. Em outro exemplo, a primeira instância pode minimizar o uso de memória, etc.
[017] Em algumas modalidades, o método inclui, ainda, rotular uma instância a partir das várias instâncias como uma instância primária, e rotular todas as outras instâncias como instâncias secundárias. O método também pode incluir, para cada resultado de uma segunda pluralidade de resultados a serem produzidos pelo aplica-tivo, correspondentes ao resultado, respectivas saídas das instâncias secundárias. O método também pode incluir identificar uma falha da instância primária após produzir k resultados a partir da segunda pluralidade de resultados, onde k >1. A instância primária pode, então, ser rotulada como uma instância falha. O método pode incluir, ainda, selecionar uma instância secundária que executou uma lógica associada à computação de cada um dos k resultados, e re-rotular as instâncias secundárias se-lecionadas como a instância primária, desse modo, a instância primária re-rotulada produz o (k+1)-ésimo resultado. Devido ao fato de a instância secundária selecionada ter executado uma lógica associada à computação de cada um dos k resultados, a instância secundária selecionada provavelmente está em sincronia com a instância primária antes da falha da mesa. Portanto, a execução do aplicativo através de duas ou mais instâncias pode realizar tolerância a falhas (“failover”) de uma instância para outra, geralmente sem introduzir retardos substanciais (como aqueles associados à reinicialização de um aplicativo) e/ou erros.
[018] Em outro aspecto, proporciona-se um método para habilitar tolerância a falhas (“failover”) para um aplicativo de software. O método inclui monitorar execuções simultâneas de controlador baseado em processador de uma instância primária do aplicativo de software e uma primeira instância secundária do aplicativo. A instân-ciaprimária é compilada de acordo com uma primeira opção de compilador, e a pri-meirainstância secundária é compilada de acordo com uma opção de compilador que seja diferente da primeira opção de compilador. O método também inclui detectar uma falha da instância primária após a produção de k resultados do aplicativo de software, onde k >1. Além disso, o método inclui confirmar que a primeira instância secundária computou as operações requeridas para computar o k-ésimo resultado, e rotular a primeira instância secundária como a instância primária. Devido ao fato de a primeira instância secundária ter computado as operações necessárias para computar cada um dos k resultados, a primeira instância secundária provavelmente está em sincronia com a instância primária antes da falha da mesma. Portanto, a execução do aplicativo através de duas ou mais instâncias pode realizar tolerância a falhas (“failover”) de uma instância para outa, genericamente sem introduzir retardos substanciais (como aqueles associados à reinicialização de um aplicativo) e/ou erros.
[019] O controlador pode suprimir as saídas da primeira instância secundária que correspondem aos k resultados, isto é, antes da falha da instância rotulada como a instância primária. A primeira opção de compilador pode incluir uma compilaçãojust-in-time (JIT), e a opção de compilador usada para a primeira instância secundária pode incluir uma compilação ahead-of-time (AIT). Em algumas modalida- des, o método inclui, ainda, monitorar pelo controlador a execução simultânea de uma segunda instância secundária do aplicativo. A segunda instância secundária é compilada de acordo com uma opção de compilador que seja diferente da primeira opção de compilador e da opção de compilador usada para compilar a primeira ins-tância secundária. Se não for confirmado pelo método que a primeira instância se-cundária computou as operações necessárias para computar o k-ésimo resultado, o método pode incluir confirmar que a segunda instância secundária computou as ope-rações necessárias computar o k-ésimo resultado. A segunda instância secundária pode, então, ser rotulada como a instância primária, permitindo uma tolerância a falhas (“failover”) eficiente e isento de erros a partir da instância previamente rotulada como a instância primária até a segunda instância secundária, que é re-rotulada como a instância primária.
[020] Em outro aspecto, um sistema para executar um aplicativo de software de modo expeditivo em pelo menos um processador computacional inclui um primeiro processador e uma primeira memória em comunicação elétrica com o primeiro processador. A primeira memória inclui instruções que, quando executadas por uma unidade de processamento que pode incluir o primeiro processador e/ou um segundo processador, programam a unidade de processamento para executar simultane-amentevárias instâncias do aplicativo de software em um ou mais processadores computacionais. Cada instância é compilada de acordo com uma respectiva opção de compilador que seja diferente das respectivas opções de compilador usadas para compilar todas as outras instâncias das várias instâncias. Para cada um dentre um primeiro conjunto de resultados a serem produzidos pelo aplicativo, as instruções programam a unidade de processamento para monitorar, correspondente ao resultado, uma respectiva saída gerada por cada instância. Para cada um dentre o primeiro conjunto de resultados a serem produzidos pelo aplicativo, as instruções também programam a unidade de processamento para rotular a partir das saídas monitora- das a saída que ocorre mais precocemente como a saída do aplicativo correspondente ao resultado, e rotular todas as outras saídas como duplicatas. Dessa forma, cada um dentre o primeiro conjunto de resultados é obtido a partir de uma instância que produziu tal resultado particular antes de todas as outras instâncias, acelerando, assim, um desempenho computacional do um ou mais processadores computacionais em executar o aplicativo de software. Em várias modalidades, as instruções podem programar a unidade de processamento a realizar uma ou mais das etapas de método descritas anteriormente.
[021] Em outro aspecto, um sistema para habilitar tolerância a falhas (“failover”) para um aplicativo de software inclui um primeiro processador e uma primeira memória em comunicação elétrica com o primeiro processador. A primeira memória inclui instruções que, quando executadas por uma unidade de processamento que pode incluir o primeiro processador e/ou um segundo processador, programam a unidade de processamento para monitorar execuções simultâneas de uma instância primária do aplicativo de software e uma primeira instância secundária do aplicativo. A instância primária é compilada de acordo com uma primeira opção de compilador, e a primeira instância secundária é compilada de acordo com uma opção de compilador que seja diferente da primeira opção de compilador. As instruções também programam a unidade de processamento para detectar uma falha da instância primária após a produção de k resultados do aplicativo de software, onde k >1. Além disso, as instruções programam a unidade de processamento para confirmar que a primeira instância secundária computou as operações necessárias para computar o k-ésimo resultado, e rotular a primeira instância secundária como a instância primária. Como tal, a execução do aplicativo através de duas ou mais instâncias pode realizar tolerância a falhas (“failover”) de uma instância para outra, geralmente sem introduzir retardos substanciais (tais como aqueles associados à reinicialização de um aplicativo) e/ou erros. Em várias modalidades, as instruções podem programar a unidade de processamento a realizar uma ou mais etapas de método descritas ante-riormente.
[022] Em outro aspecto, um artigo manufaturado que inclui um meio de ar-mazenamentonão-transitório armazenou nele as instruções que, quando executadas por uma unidade de processamento, programam a unidade de processamento, que se encontra em comunicação eletrônica como uma memória, para executar si-multaneamentevárias instâncias do aplicativo de software em um ou mais proces-sadores computacionais. Cada instância é compilada de acordo com uma respectiva opção de compilador que seja diferente das respectivas opções de compilador usadas para compilar todas as outras instâncias das várias instâncias. Para cada um dentre um primeiro conjunto de resultados as serem produzidos pelo aplicativo, as instruções programam a unidade de processamento para monitorar, correspondente ao resultado, uma respectiva saída gerada por cada instância. Para cada um dentre o primeiro conjunto de resultados a serem produzidos pelo aplicativo, as instruções também programam a unidade de processamento para rotular a partir das saídas monitoradas a saída que ocorre mais precocemente como a saída do aplicativo correspondente ao resultado, e rotular todas as outras saídas como duplicatas. Em várias modalidades, as instruções podem programar a unidade de processamento para realizar uma ou mais etapas de método descritas anteriormente.
[023] Em outo aspecto, um artigo manufaturado que inclui um meio de arma-zenamentonão-transitório armazenou nele instruções que, quando executadas por uma unidade de processamento programam a unidade de processamento, que se encontra em comunicação eletrônica com uma memória, para monitorar execuções simultâneas de uma instância primária do aplicativo de software e uma primeira ins-tância secundária do aplicativo. A instância primária é compilada de acordo com uma primeira opção de compilador, e a primeira instância secundária é compilada de acordo com uma opção de compilador que seja diferente da primeira opção de com- pilador. As instruções também programam a unidade de processamento para detectar uma falha da instância primária após a produção de k resultados do aplicativo de software, onde k >1. Além disso, as instruções programam a unidade de processa-mento para confirmar que a primeira instância secundária computou as operações necessárias para computar o k-ésimo resultado, e rotular a primeira instância secun-dária como a instância primária. Em várias modalidades, as instruções podem pro-gramar a unidade de processamento para realizar uma ou mais etapas de método descritas anteriormente.
[024] Um efeito técnico de várias modalidades da presente invenção diz que o desempenho geral de um aplicativo de software que se espera produzir uma se-quência de resultados pode ser aumentado selecionando-se para cada resultado a saída mais precoce a partir de várias instâncias simultaneamente que produzem saídas correspondentes a tal resultado. Os momentos nos quais as diferentes instâncias podem produzir saídas correspondentes a um resultado particular podem ser diferentes devido às diferenças na maneira na qual as diferentes instâncias são compiladas. Algumas instâncias podem inicialmente produzir saídas mais lentamente do que algumas outras instâncias, mas podem posteriormente produzir saídas mais rápido que essas instâncias. Selecionando-se a saída mais precoce para cada resultado, efetivamente, o aplicativo de software é executado através das instâncias que eram as mais rápidas em produzir saídas respectivamente correspondentes a diferentes resultados, acelerando, assim, a execução do aplicativo de software geral.
[025] Outro efeito técnico de várias modalidades da presente invenção diz que enquanto aumenta o desempenho conforme descrito anteriormente, as diferentes instâncias podem ser mantidas em sincronização, apesar de não no mesmo exato estado, na computação de cada um dentre uma série de resultados a serem produzidos pelo aplicativo de software. Portanto, se uma instância falhar após a produção de um ou mais resultados, outra instância, provavelmente a mais rápida em pro- duzir o próximo resultado dentre aqueles que não falharam, pode ser usada para produzir o próximo resultado. Logo, uma tolerância a falhas (“failover”) segura, isto é, genericamente isento de erros pode ser alcançado sem precisar incorrer retardos excessivos, como aqueles associados à reinicialização do aplicativo, enquanto apri-mora o desempenho geral do aplicativo de software.
[026] Esses e outros objetivos, junto às vantagens e recursos das modalidades reveladas no presente documento, se tornarão mais aparentes através da referência à descrição a seguir, aos desenhos anexos, e às reivindicações. Adicionalmente, deve-se compreender que os recursos das várias modalidades descritas no presente documento não são mutuamente exclusivos e podem estar presentes em várias combinações e permutações.
BREVE DESCRIÇÃO DOS DESENHOS
[027] Nos desenhos, caracteres de referência similares geralmente se refe-remàs mesmas partes ao longo das diferentes vistas. Da mesma forma, os dese-nhosnão estão necessariamente em escala, ao invés disso, enfatiza-se geralmente a ilustração dos princípios da invenção. Na descrição a seguir, várias modalidades da presente invenção são descritas com referência aos desenhos a seguir, em que:
[028] A Figura 1 ilustra os usos de várias modalidades de um sistema de DSFM;
[029] A Figura 2 descreve um diagrama gráfico de dados que ilustra uma to-lerância a falhas (“failover”) a partir de uma instância primária de um aplicativo de software a uma instância secundária, usando uma modalidade de um sistema de DSFM;
[030] A Figura 3 descreve um fluxograma lógico que ilustra uma transição a partir de uma instância de um aplicativo de software para outra instância, usando uma modalidade de um sistema de DSFM;
[031] As Figuras 4 e 5 ilustram esquematicamente o aprimoramento de de- sempenho de um aplicativo de software usando uma modalidade de um sistema de DSFM; e
[032] A Figura 6 descreve esquematicamente um controlador DSFM, de acordo com uma modalidade.
DESCRIÇÃO DETALHADA
[033] Com referência à Figura 1, um usuário 101 pode desejar executar um aplicativo de software particular. Um sistema de Sincronização de Dados e Gerenci-amento de Tolerância a Falhas (“Failover”) (DSFM) 102 pode executar duas instâncias do aplicativo de software, uma designada/rotulada como uma instância primária e outra designada/rotulada como uma instância secundária. A instância primária pode falhar, por exemplo, devido a uma falha de hardware, erro de rede, etc., e a execução pode ser transferida à instância secundária (também denominada como uma instância de backup). Em algumas modalidades, a instância secundária pode não estar no mesmo exato estado que a instância primária, por exemplo, porque embora as instâncias primária e secundária sejam derivadas de um código fonte idêntico, as duas instâncias podem ser compiladas de modo diferente. Portanto, a instância secundária pode não seguir o mesmo caminho de código que a instância primária. Como tal, a execução da instância secundária pode ser diferente comparada àquela da instância primária, resultando, por exemplo, em resultados diferentes e/ou potencialmente abaixo da média, por exemplo, em termos de velocidade de execução.
[034] Por exemplo, as instâncias primária e secundária, mesmo se estivessem em estados idênticos no início, podem se afastar durante a execução, e mesmo quando estiverem em sincronia, isto é, geralmente implementando a mesma lógica geral, as duas instâncias podem não estar exatamente no mesmo estado. Por exemplo, em alguns sistemas de software que são codificados em linguagens interpretadas ou parcialmente interpretadas, como, sem limitação, Java, uma compilação just-in-time (JIT) pode traduzir um código de bytes e um código de máquina, enquan- to busca por um caminho de código ótimo para seguir durante a execução. Se uma compilação JIT for usada para gerar a instância primária ou a instância secundária, mas não ambas, em um momento particular, as instâncias primária e secundária po-demnão executar exatamente as mesmas instruções. Como um exemplo, considera-se um segmento de código:
[035] Uma instância (denotada como Instância A) desse segmento de código, compilada usando um compilador, pode primeiramente avaliar a condição, então, determinar se a condição é verdadeira, e pode, então, computar f1 ou f2 de modo correspondente, para produzir o resultado x.
[036] O mesmo compilador ou outro compilador podem ter ciência que a avaliação da condição geralmente dura um longo tempo (por exemplo, alguns milis- segundos), e a avaliação de f1 e f2 também leva algum tempo (por exemplo, a alguns milissegundos), mas que todas as três computações não são dependentes entre si. Portanto, outra instância (denotada como Instância B) do mesmo segmento de código, compilada usando a ciência sobre os tempos de execução, usando o outro compilador ou uma opção diferente do mesmo compilador, pode computar tanto f1 como f2 enquanto a avaliação da condição estiver em andamento. Após a conclusão da avaliação, a Instância B pode prontamente escolher entre os resultados de f1 e f2, produzindo, assim, a saída mais rápido que a Instância A. Logo, em um momento de tempo particular, a Instância A do segmento de código pode estar avaliando a condição somente, enquanto a Instância B pode estar adicionalmente computando f1 e f2, também.
[037] Ainda em outro exemplo, um compilador usado para gerar outra ins- tância (denotada como Instância C) do segmento de código pode ter ciência que na maioria das vezes, a condição é falsa. Portanto, a Instância C pode computar f2 somente e não f1, enquanto a avaliação da condição estiver em andamento, e computar f1 somente se a condição for determinada como sendo verdadeira. Logo, a computação de x pode ser acelerada em relação àquela pela Instância A, que foi compilada sem usar qualquer conhecimento adicional, em uma maioria de situações, mas não em todas elas. Em um momento particular no tempo, a Instância A pode estar avaliando a condição somente, enquanto a Instância C pode estar avaliando a tanto a condição f1 como a condição f2. Logo, embora as instâncias A, B e C geralmente implementem a mesma lógica que é especificada pelo segmento de código, em um momento de tempo particular, cada uma dessas instâncias pode executar diferentes instruções.
[038] Se duas ou mais dessas instâncias compiladas usando técnicas de compilação diferentes, diferentes compiladores, e/ou diferentes opções de compilador executarem simultaneamente, a uma ou mais instâncias que geralmente atrasam na produção de resultados do aplicativo em relação à outra instância, podem ser configuradas para suprimir suas respectivas saídas, por exemplo, para evitar a du-plicação de resultados. A título de ilustração, durante a execução, a instância primária (por exemplo, Instância B) pode ter gerado uma saída particular (por exemplo, resultado x) e, portanto, a instância secundária (por exemplo, Instâncias A ou C) podenão produzir uma duplicada de tal saída, mesmo quando as computações necessárias para produzir essa saída forem realizadas pelas instâncias A e C. Em algumas modalidades, a instância designada/rotulada para produzir saídas como resultados do aplicativo pode ser denominada como uma instância primária (por exemplo, Instância B), e a uma ou mais outras instâncias (por exemplo, Instância A e Instância C) podem ser denominadas como instâncias secundária. Fazer com que a(s) instân- cia(s) secundária(s) realize(m) as operações associadas a cada resultado a ser pro- duzido pelo aplicativo e suprimindo-se somente as saídas da(s) instância(s) secun- dária(s), a(s) instância(s) secundária(s) é(são) mantida(s) em sincronia com a instância primária e em um estado mais próximo possível ao estado da instância primária.
[039] Em algumas implementações, a compilação JIT para as instâncias primária e secundária pode gerar diferentes caminhos de código com diferentes ins-truções para a instâncias primária e secundária, conforme descrito anteriormente usando o segmento de código exemplificador. Em algumas implementações, as ins-tâncias primária e secundária podem ter diferentes caminhos de código porque dife-rentes tipos de compiladores (por exemplo, JIT e ahead-of-time (AIT)) são usados para compilar as instâncias primária e secundária. Em algumas implementações, o mesmo compilador pode ser usado para compilar tanto a instância primária como a instância secundária, mas diferentes opções de compilador podem ser usadas durante as respectivas compilações. Exemplos de opções de compilador incluem, mas não se limitam a, minimizar o uso de memória, uso de memória sem limitações, ma-ximizaroperações simultâneas e/ou parcialmente sobrepostas (por exemplo, usando processadores paralelos, vários threads, etc.), limitar o número de operações simul-tâneas e/ou parcialmente sobrepostas a um limite específico, etc. Em algumas im-plementações, detecta-se uma instância primária que falhou e a execução é comutada para uma instância secundária. A execução da instância secundária pode seguir um caminho de código diferente e, portanto, o desempenho e a eficiência da instância secundária podem não corresponder àqueles da instância primária, por exemplo, 104.
[040] Várias modalidades de um sistema de DSFM descrito no presente do-cumento podem obter vantagem de uma opção em alguns tempos de execução de JIT, usando-os o programa pode ser compilado ahead-of-time. Por exemplo, no HotSpot JVM, a opção de linha de comando -Xcomp pode fazer com que o tempo de execução compile cada método executado imediatamente ao invés de submeter o método à interpretação relativamente mais lenta e a fases de perfil. Em .NET, a utili-dade NGen pode compilar programas de código de bytes a código nativo no momento da instalação ao invés de fazê-lo sempre que o programa for executado. Embora essas opções possam diferir em sua operação, ambas geralmente têm o mesmo efeito de transformar a compilação JIT em compilação ahead-of-time.
[041] Em algumas modalidades, duas instâncias de um único programa de código de bytes são executadas simultaneamente. Em geral, simultaneamente signi-fica com pelo menos uma sobreposição parcial nos respectivos tempos de execução. A primeira instância usa a compilação ahead-of-time opcional enquanto a segundaé executada pelo tempo de execução de JIT adaptativo padrão. Ambas instâncias são supridas com entradas idênticas e podem produzir saídas idênticas, mas em diferentes velocidades. Em geral, inicialmente a primeira instância é significativamente mais rápida visto que usa um código compilado enquanto a segunda instância continua a realizar o perfil do código no interpretador. À medida que a segundainstância gradualmente compila o programa, seu desempenho tipicamente aumenta e eventualmente pode exceder o desempenho da primeira instância, em parte devido à otimização maior disponível com o compilador JIT adaptativo.
[042] As diferentes execuções das duas instâncias podem ser representadas como uma única execução de um aplicativo de software. Nesse sentido, as saídas respectivas das duas instâncias podem ser unidas através de um processo de filtra-gem. Em algumas modalidades, o processo de filtragem coleta as mensagens de saída das duas instâncias, mas somente emite uma mensagem de saída em respostaà primeira ou mais precoce produzida dentre as mensagens unidas, isto é, uma mensagem produzida por uma instância mais rápida, e as mensagens duplicadas produzidas pela outra instância relativamente mais lenta são descartadas. Visto que se espera que cada instância produza as mesmas mensagens de saída na mesma ordem, o filtro pode emitir efetivamente mensagens a partir da mais rápida das duas instâncias. De fato, a combinação das duas instâncias e o filtro operam como uma única instância com o desempenho inicial mais rápido de compilação ahead-of-time e o desempenho a longo prazo mais rápido de JIT adaptativo. Essa técnica pode ser estendida a mais de duas instâncias, por exemplo, conforme descrito abaixo com referência às Figuras 4 e 5.
[043] Com referência à Figura 2, em algumas implementações, usuá- rios/clientes 201 podem solicitar a execução de um aplicativo, por exemplo, execu-tando-se uma parte de código em um dado sistema, por exemplo, 205. Em algumas implementações, pode existir uma configuração que designa/rotula, por exemplo, 202, uma instância do aplicativo como primária 203, e o resto como secundárias 204. Em algumas modalidades, para manter o exato mesmo registro entre as dife-rentesinstâncias de execuções de código (por exemplo, primária e secundária), o aplicativo de backup usa o mesmo caminho de código que a instância primária. Mas, em algumas modalidades, algumas etapas nas execuções podem ser ligeiramente diferentes. Por exemplo, uma instância primária e uma instância secundária podem seguir o exato mesmo caminho de código exceto pela instância primária que gera uma saída após a execução, por exemplo, 207, enquanto a secundária não, por exemplo, 208. Em algumas modalidades, o processamento de geração de saída pelo aplicativo de backup pode rodas através do caminho de execução completo da instância primária até, mas sem incluir, o ponto de publicar a saída, resultando em instâncias primária e secundária que são mantidas como identicamente próximas entre si o máximo possível. Em algumas modalidades, as instâncias primária e secundária podem não terminar em um estado exatamente idêntico, entretanto. Por exemplo, em sistemas que são codificados em java, se as instâncias primária e secundária seguirem os exatos mesmos caminhos de execução de código até, mas sem incluir, a publicação das saídas de mensagem dos códigos, podem ter o fluxo de mensagem completo em comum e podem estar em sincronia entre si, mas não estarão precisamente no mesmo estado. Por exemplo, as solicitações de execução 206a à instância primária podem especificar que uma saída final precisa ser produzida. Por exemplo, as solicitações de execução 206a e 206b podem ser mensagens de Protocolo de Transferência de Hipertexto (Seguro) (“HTTP(S)”) POST incluindo uma instrução de “gravar saída” sob a forma de dados formatados de acordo com XML. Proporciona-se abaixo uma listagem exemplificadora de uma solicitação de execução de aplicativo 206a e 206b, substancialmente sob a forma de uma mensagem HTTPS POST incluindo dados formatados em XML:
[044] Em algumas implementações, para aperfeiçoar o desempenho de tempo de execução de códigos, pode-se utilizar capacidades de compilação just-in-time (JIT) de um sistema, e converter os códigos em códigos de máquina. Em algumas implementações, o compilador JIT pode iniciar a otimização dos códigos como parte da compilação, se o mesmo for primário, por exemplo, 207, ou secundário, por exemplo, 208. Por exemplo, a compilação JIT pode consolidar linhas de código du- plicativas em linhas sucintas, e/ou remover caminhos de código estranho para otimizar com maior eficiência os caminhos que estiverem sendo mais usados. Por exemplo, se um caminho de código tiver sido usado mais que um número limiar de vezes predeterminado e/ou dinamicamente determinado, em algumas modalidades, pode- se atribuir uma prioridade maior e favorecida em relação a outros caminhos de código com menos uso. Em algumas modalidades, a instância secundária que pode executar através do caminho de execução completo da instância primária até o pon- to de publicar a saída pode ter um caminho de código que não seja o mesmo que a instância primária, porque o código da instância secundária que leva ao ponto de publicação pode não ser otimizado similarmente como o código correspondente da instância primária.
[045] Em algumas modalidades, o aplicativo secundário e/ou de prontidão pode se tornar uma instância primária quando o aplicativo primário original e/ou ativo for determinado como tendo falhado. Por exemplo, um servidor 204 pode monitorar o desempenho da instância primária e iniciar a tolerância a falhas (“failover”) do aplica-tivo quando o mesmo detectar a falha do sistema e/ou aplicativo na parte da instân-ciaprimária original, por exemplo, 209. Uma vez que a instância primária original for determinada como tendo falhado, em algumas modalidades, o servidor pode desig- nar/rotular uma instância secundária do aplicativo e uma nova instância primária e direcionar os códigos para execução à instância primária recente, por exemplo, 210. Por exemplo, o servidor secundário 204 pode gerar uma mensagem de Protocolo de Transferência de Hipertexto (Seguro) (“HTTP(S)”) POST incluindo uma instrução de comutação sob a forma de dados formatados de acordo com XML. Proporciona-se abaixo uma listagem exemplificadora de uma instrução de tolerância a falhas (“fai-lover”) 210, substancialmente sob a forma de uma mensagem HTTP(S) POST incluindo dados formatados em XML:
[046] Em algumas modalidades, após a instrução, a execução de código po-de,então, ser direcionada ao aplicativo com o caminho de código ótimo onde o código “publicar” ou “gravar” do aplicativo está frio, isto é, não otimizado, por exemplo, 211. Por exemplo, a solicitação de execução de código 211 pode ser uma mensagem de Protocolo de Transferência de Hipertexto (Seguro) (“HTTP(S)”) POST incluindo uma instrução de “gravar saída” sob a forma de dados formatados de acordo com XML conforme descrito anteriormente com referência à Figura 2. Em algumas modalidades, o desempenho da execução de código pode ser inferior comparado ao previamente primário, visto que algumas partes do caminho de código não são otimizadas. Por exemplo, em sistemas codificados em java, e uma vez que a comutação for feita à instância secundária com um caminho de código que tenha um código de “gravação” frio, java pode rodar através do número limiar de iterações predeterminado e/ou dinamicamente determinado do código de “gravação” do caminho de código para otimizar, isto é, “aquecer” o caminho de código, e no processo desacelerar o aplicativo ao longo da duração do período de aquecimento, resultando em de-gradação no desempenho comparado à instância primária antes da comutação, por exemplo, 212.
[047] Em algumas implementações, o sistema de DSFM pode permitir que os aplicativos secundários e/ou de prontidão executem até o final do caminho de código completo incluindo a publicação das saídas de mensagem dos códigos. Em algumas implementações, isso permite que as instâncias primária e secundária para manter estados idênticos, e no evento de falha com a instância primária, a instância secundária pode assumir e proceder com a execução de código ao longo do mesmo caminho de código otimizado como a instância previamente primária teria adotado e, portanto, sem degradação em desempenho, por exemplo, 213. Por exemplo, a instância secundária pode permitir que o caminho de processamento de mensagem execute até o final do segmento java e fazer com que java grave a saída de mensagemà próxima etapa, mas, então, pare o caminho antes que a próxima etapa se inicie. Nessas modalidades, o caminho java completo pode ser executado pelo aplicativoprimário e pelo aplicativo de backup, e ambos aplicativos podem manter um estado idêntico. Em algumas modalidades, se o primário precisar realizar tolerância a falhas (“failover”) à instância secundária, a instância secundária pode escolher imediatamente onde a instância primária ficará sem degradação em desempenho visto que a instância secundária é tanto otimizada por java como “aquecida” como a instância primária.
[048] A Figura 3 mostra um fluxograma lógico que ilustra exemplos de trans-formar uma solicitação por execução de aplicativo através de uma modalidade de um componente de DSFM em uma execução otimizada e eficiente do aplicativo. Em algumas modalidades, um usuário pode desejar executar um aplicativo, por exemplo, 301, e iniciar a execução executando-se uma parte de código do aplicativo. Em algumas implementações, isso pode ser a primeira instância da execução do código, e a compilação do código pode ser garantida, por exemplo, 302. Por exemplo, um código fonte java traduzido em um código de byte pode ser compilado por um compilador JIT em um código de máquina, por exemplo, 303. Em algumas modalidades, a compilação pode ser realizada dinamicamente e/ou pode ser realizada em somente uma parte do código completo (por exemplo, ao método do código que foi convocado, etc.). Uma vez que o aplicativo inicia a execução, por exemplo, 304, em algumas modalidades, java pode iniciar o monitoramento da execução do código para otimizar a execução, por exemplo, 305. Por exemplo, java pode aguardar por um número de iterações antes de identificar métodos, funções, etc., que são frequentemente convocados e/ou usados como “hot spots”, por exemplo, 306. Em algumas implementações, uma vez que o aplicativo tiver executado um número suficiente de vezes para determinar esses hot spots, os hot spots podem ser discriminados para otimização adicional, por exemplo, 309. Por exemplo, esses métodos, funções, etc., podem se tornar mais eficientes consolidando-se comandos, descartando elementos de código, etc., para aprimorar a eficiência e a velocidade na execução do aplicativo. Em algumas implementações, java também pode aguardar por um número de iterações antes de identificar os caminhos de código que são frequentemente usados, por exemplo, 307, e otimizar/”originar” o aplicativo para uma eficiência aprimorada removendo-se caminhos de código estranho que sejam infrequentemente usados, por exemplo, 310. Por exemplo, após um caminho ter sido executado 10.000 vezes, o mesmo pode receber uma prioridade maior, enquanto outras partes que são infrequentemente usadas podem ser descartadas em prol do caminho com maior prioridade. Em algumas implementações, uma vez que hot spots são otimizados, e caminhos de código de alta prioridade são identificados, a execução do aplicativo pode se tornar mais eficiente, por exemplo, 311.
[049] A Figura 4 mostra diagramas de bloco que ilustram um sistema de DSFM exemplificador que proporciona otimização de aplicativo, sincronização e tolerância a falhas (“failover”) em virtude de uma redundância de processos de aplicativo. Em algumas implementações, mediante uma solicitação para executar um aplicativo, o sistema de DSFM pode iniciar a execução de pelo menos duas instâncias do aplicativo, por exemplo, 401a-n (equivalente a dois ou mais aplicativos idênticos). Em algumas modalidades, pode não existir nenhuma designação/rotulação de status dessas instâncias dos aplicativos como primário e secundário/backups, e cada instância de aplicativo pode executar independentemente para produzir saídas de mensagemidênticas ou quase idênticas que são gravadas a um barramento/fio de mensagens 406. Em algumas modalidades, variações mínimas em processamento de sistemas (por exemplo, software, hardware, etc.) podem fazer com que essas saídas de mensagem 402 produzidas por duas ou mais instâncias do mesmo aplicativo (isto é, aplicativos idênticos) a serem gravados ao fio não-simultaneamente. Em algumas implementações, um sequenciador pode processar as mensagens de chegada e classificar uma saída como uma saída de mensagem do aplicativo e o resto como duplicatas. Por exemplo, um sequenciador 403 pode designar/rotular uma saída de mensagem gravada ao fio por uma das duas ou mais instâncias de um aplicativo como uma saída de mensagem do aplicativo a ser mantida, e rotular (e, consequentemente, por exemplo, descartar) o resto das saídas de mensagem provenientes das instâncias do aplicativos mais lentas como duplicatas. Em algumas modalidades, o sequenciador pode utilizar o momento da chegada das mensagens como o critério para escolher quais mensagens manter e quais mensagens rotular como duplicatas. Por exemplo, o sequenciador pode escolher a primeira mensagem a ser gravada ao fio como a saída de mensagem do aplicativo e descartar o resto, por exemplo, 404. Em algumas implementações, o sequenciador pode utilizar outros critérios, ao invés de, ou em combinação com o tempo de chegada para determinar a mensagem que deve ser mantida como a saída de mensagem do aplicativo. Por exemplo, em algu- mas modalidades, os critérios podem incluir o tempo de chegada da mensagem, o tamanho da mensagem, etc. Por exemplo, o sequenciador pode empregar o critério que a mensagem que é mantida como a saída do aplicativo é a primeira mensagem que chega cujo tamanho é menor que algum número limiar de bytes em tamanho (e/ou o menor em tamanho, etc).
[050] Em algumas modalidades, com dois ou mais aplicativos idênticos ou quase idênticos em execução, as mensagens que são retidas pelo sequenciador podem ser provenientes de aplicativos diferentes, como qual aplicativo “prevalece” em gravar uma mensagem varia mensagem por mensagem. Por exemplo, com referência à Figura 5, a saída de mensagem final de aplicativos em execução pode ser combinada pelo sequenciador a partir das saídas de mensagem dos múltiplos aplicativosidênticos ou quase idênticos. Por exemplo, com N aplicativos em execução, mensagem do aplicativo D pode ser a primeira a chegar entre um primeiro lote de N mensagens, por exemplo, 501. Em um segundo lote de N mensagens, uma mensagem de outro aplicativo (digamos, do aplicativo K) pode ser a primeira a chegar no sequenciador, por exemplo, 502. Nessas modalidades, o sequenciador 504 pode combinar a mensagem do aplicativo D no primeiro lote, seguido pela mensagem do aplicativo K no segundo lote, etc., para chegar na saída de mensagem final do aplicativo, por exemplo, 505.
[051] Nessas implementações onde múltiplos aplicativos idênticos ou quase idênticos são executados, a redundância pode induzir o tráfego de mensagens no barramento/fio de mensagem. Por exemplo, com N aplicativos idênticos ou quase idênticos em execução, existiriam N saídas de mensagem idênticas ou quase idênti-cas, resultando em um tráfego de mensagens aumentado para o fio. De modo oposto, a redundância pode ser utilizada para otimização de desempenho visto que o sistema colhe o benefício de obter saídas de mensagem a partir dos aplicativos mais rápidos conforme descrito anteriormente. Em algumas implementações, a redundân- cia pode proporcionar um mecanismo a prova de falhas em casos onde um ou mais aplicativos falham, por exemplo, 405. Nessas implementações, pode não haver a necessidade de intervir manual e/ou automaticamente, visto que existem um ou mais outros aplicativos em execução, e saídas de mensagem podem ser obtidas a partir desses um ou mais aplicativos, por exemplo, 406.
[052] Logo, várias modalidades descritas no presente documento podem aumentar o desempenho de código em linguagens interpretadas e/ou outras lingua-gens, por exemplo, com tempos de execução compilados just-in-time (JIT) opcionais. Os compiladores de JIT adaptativos podem aumentar o desempenho a longo prazo comparado aos compiladores ahead-of-time e/ou JIT simples, no custo de um período de desempenho inicial mais lento enquanto o código é interpretado e perfilado para aperfeiçoar a fase de compilação posterior. Executando-se o mesmo código em paralelo em dois ou mais tempos de execução como duas ou mais instâncias não- idênticas, podem-se alcançar os benefícios de compilação JIT otimizada sem sacrificar o desempenho inicial durante a fase interpretada. Controlador de DSFM
[053] A Figura 6 mostra um diagrama de bloco que ilustra exemplos de um controlador de DSFM 601. Nessa modalidade, o controlador de DSFM 601 pode servir para agregar, processar, armazenar, buscar, servir, identificar, instruir, gerar, cor-responder e/ou facilitar interações com um computador através de várias tecnologias, e/ou outros dados relacionados.
[054] Os usuários, por exemplo, 633a, que podem ser pessoas e/ou outros sistemas, podem engajar sistemas de tecnologia da informação (por exemplo, com-putadores) para facilitar o processamento de informações. Sucessivamente, os com-putadores empregam processadores para processar informações; esses processadores 603 podem ser referidos como unidades de processamento central (CPU). Uma forma de processador é referida como um microprocessador. CPUs usam cir- cuitos comunicativos para passar sinais codificados binários que atuam como instru-ções para permitir várias operações. Essas instruções podem ser instruções opera-cionais e/ou de dados contendo e/ou referenciando outras instruções e dados em várias áreas acessíveis e operáveis por processador de memória 629 (por exemplo, registros, memória em cache, memória de acesso aleatório, etc.). Essas instruções comunicativas podem ser armazenadas e/ou transmitidas em lotes (por exemplo, lotes de instruções) como programas e/ou componentes de dados para facilitar as operações desejadas. Esses códigos de instrução armazenados, por exemplo, programas, podem engajar os componentes de circuito de CPU e outros componentes de placa-mãe e/ou sistema para realizar as operações desejadas. Um tipo de programaé um sistema operacional computacional, que pode ser executado por uma CPU em um computador; o sistema operacional permite e facilita que os usuários acessem e operem tecnologia de informações computacionais e recursos. Alguns recursos que podem ser empregados em sistemas de tecnologia da informação incluem: mecanismos de entrada e saída (I/O) através dos quais dados podem passar para dentro e para fora de um computador; armazenamento de memória no qual dados podem ser salvos; e processadores através dos quais informações podem ser processadas. Esses sistemas de tecnologia da informação podem ser usados para coletar dados para restauração, análise e manipulação posterior, que podem ser facilitadasatravés de um programa de banco de dados. Esses sistemas de tecnologia da informação proporcionam interfaces que permitem que os usuários acessem e operem vários componentes do sistema.
[055] Em uma modalidade, o controlador de DSFM 601 pode ser conectado e/ou se comunicar com entidades como, sem limitação: um ou mais usuários de dis-positivos de entrada de usuário 611; dispositivos periféricos 612; um dispositivo pro-cessadorcriptográfico opcional 628; e/ou uma rede de comunicação 613. Por exemplo, o controlador de DSFM 601 pode ser conectado e/ou se comunicar com usuá- rios, por exemplo, 633a, operando dispositivo(s) de cliente, por exemplo, 633b, inclu-indo, sem limitação, computadores pessoais, servidores e/ou vários dispositivos móveis incluindo, sem limitação, telefones celulares, smartphones (por exemplo, iPhone®, Blackberry®, telefones baseados em OS Android etc.), computadores tipo tablet (por exemplo, Apple iPad™, HP Slate™, Motorola Xoom™, etc.), leitores de eBook (por exemplo, Amazon Kindle™, Barnes e Noble’s Nook™ eReader, etc.), computadores tipo laptop, notebooks, netbooks, consoles de jogos (por exemplo, XBOX Live™, Nintendo® DS, Sony PlayStation® Portable, etc.), digitalizadores portáteis e/ou similares.
[056] Imagina-se que as redes comumente incluam a interconexão e intero- peração de clientes, servidores, e nós intermediários em uma topologia gráfica. Deve-se notar que o termo “servidor” conforme o uso em questão se refere, em geral, a um computador, outro dispositivo, programa, ou uma combinação desses que processe e responda às solicitações de usuários remotos ao longo de uma rede de comunicação. Os servidores servem suas informações para solicitar “clientes.” O termo “cliente” conforme o uso em questão se refere, em geral, a um programa computacional, outro dispositivo, usuário e/ou uma combinação desses que seja capaz de processar e realizar solicitações e obter e processar quaisquer respostas a partir dos servidores ao longo de uma rede de comunicação. Um computador, outro dispositivo, programa, ou combinação dos mesmos que facilite, processe informações e solicitações, e/ou promoções da passagem de informações a partir de um usuário de origem a um usuário de destino é comumente referido como um “nó.” Imagina-se que as redes geralmente facilitam a transferência de informações a partir de pontos de origem para destinos. Um nó especificamente tem a tarefa de promover a passagem de informações a partir de uma origem para um destino é comumente referido como um “roteador.” Existem muitas formas de redes, como Redes de Área Local (LANs), redes Pico, Redes de Área Ampliada (WANs), Redes Sem Fio (WLANs), etc. Por exemplo, a Internet é geralmente aceita como sendo uma interconexão de uma pluralidade de redes pelas quais clientes remotos e servidores podem acessar e in- teroperar entre si.
[057] O controlador de DSFM 601 pode se basear em sistemas computacionais que podem incluir, sem limitação, componentes como: uma sistemização com-putacional 602 conectada à memória 629.
[058] Um sistema computacional 602 tipicamente inclui um relógio 630, uma unidade de processamento central (“CPU(s)” e/ou “processador(es)” (esses termos são usados de modo intercambiável ao longo da revelação exceto onde notado em contrário)) 603, uma memória 629 (por exemplo, uma memória somente para leitura (ROM) 606, uma memória de acesso aleatório (RAM) 605, etc.), e/ou um barramento de interface 607, e mais frequentemente, embora não necessariamente, são todos interconectados e/ou comunicam-se através de um barramento de sistema 604 em uma ou mais placas-mãe 602 tendo caminhos de circuito condutores e/ou de outro modo transportadores através dos quais as instruções (por exemplo, sinais codifica-dosbinários) podem se deslocar para efetuar comunicações, operações, armaze-namento, etc. A sistemização computacional pode ser conectada a uma fonte de ali-mentação 686; por exemplo, opcionalmente, a fonte de alimentação pode ser interna. Opcionalmente, um processador criptográfico 626 e/ou transceptores (por exemplo, ICs) 674 pode ser conectado ao barramento de sistema. Em outra modalidade, o processador criptográfico e/ou transceptores podem ser conectados como dispositi-vosperiféricos interno e/ou externo 612 através do barramento de interface I/O. Su-cessivamente, os transceptores podem ser conectados a antenas 675, efetuando, assim, transmissão e recepção sem fio de vários protocolos de comunicação e/ou sensor; por exemplo, a(s) antena(s) pode(m) ser conectada(s) a: um chip transceptor Texas Instruments WiLink WL1283 (por exemplo, fornecendo 802.1 In, Bluetooth 3.0, FM, sistema de posicionamento global (GPS) (permitindo, assim, que um controlador de DSFM determine sua localização)); um chip transceptor Broadcom BCM4329FKUBG (por exemplo, fornecendo 802.1 In, Bluetooth 2.1 + EDR, FM, etc.), BCM28150 (HSPA+) e BCM2076 (Bluetooth 4.0, GPS, etc.); um chip receptor Broadcom BCM4750IUB8 (por exemplo, GPS); Infineon Technologies X-Gold 618- PMB9800 (por exemplo, fornecendo comunicações 2G/3G HSDPA/HSUPA); Intel's XMM 7160 (LTE & DC- HSPA), Qualcom's CDMA(2000), Mobile Data/Station Modem, Snapdragon; e/ou similares. O relógio do sistema pode ter um oscilador de cristal e gera um sinal de base através de caminhos de circuito da sistemização computacional. O relógio pode ser acoplado ao barramento de sistema e vários multiplicadores de relógio que aumentarão ou diminuirão a frequência operacional de base para outros componentes interconectados na sistemização computacional. O relógio e vários componentes em uma sistemização computacional acionam os sinais que incorporam informações ao longo do sistema. Essa transmissão e recepção de instruções que incorporam informações ao longo de uma sistemização computacional podem ser referidas como comunicações. Essas instruções comunicativas podem, ainda, ser transmitidas, recebidas, e a causa de comunicações de retorno e/ou resposta além da sistemização computacional instante a: redes de comunicação, dispositivos de entrada, outras sistemizações computacionais, dispositivos periféricos, e/ou similares. Deve-se compreender que em modalidades alternativas, qualquer um dos componentes anteriores pode ser conectado diretamente entre si, conectados a CPU, e/ou organizados em diversas variações empregadas conforme exemplificado por vários sistemas computacionais.
[059] A CPU pode incluir pelo menos um processador de dados de alta velo-cidade adequado para executar componentes de programa para executar solicitações geradas por usuário e/ou sistema. Geralmente, os próprios processadores incorporarão várias unidades de processamento especializadas, como, sem limitação: unidades de ponto flutuante, unidades de processamento de números inteiros, con- troladores (barramento) de sistema integrado, unidades operacionais lógicas, unidades de controle de gerenciamento de memória, etc. e até mesmo subunidades de processamento especializadas como unidades de processamento de gráficos, uni-dades de processamento de sinal digital, e/ou similares. Adicionalmente, os proces-sadores podem incluir memória endereçável de acesso rápido interna, e serem ca-pazes de mapear e endereçar memória 629 além do próprio processador; a memória interna pode incluir, sem limitação, vários níveis de memória de cache (por exemplo, nível 1, 2, 3, etc.), RAM, etc. O processador pode acessar essa memória através do uso de um espaço de endereço de memória que seja acessível através de um endereço de instrução, que o processor pode construir e decodificar permitindo-o acessar um caminho de circuito a um espaço de endereço de memória específica tendo um estado/valor de memória. A CPU pode ser um microprocessador, como: processadores AMD's Athlon, Duron e/ou Opteron; ARM’s classic (por exemplo, ARM7/9/11), embutido (Coretx-M/R), aplicativo (Cortex-A), e processadores seguros; IBM e/ou Motorola's DragonBall e PowerPC; processador IBM's Sony's Cell; Intel's Atom, Celeron (Mobile), Core (2/Duo/i3/i5/i7), Itanium, Pentium, Xeon, e/ou XScale; e/ou processadores similares. A CPU interage com uma memória através da instrução que passa através dos condutos condutores e/ou transportadores (por exemplo, (circuitoseletrônicos e/ou ópticos (impressos)) para executar instruções armazenadas (isto é, código de programa). Essa instrução que passa facilita a comunicação no controlador de DSFM e através de várias interfaces. Se os requerimentos de processamento ditarem um grau maior de velocidade e/ou capacidade, processadores distribuídos (por exemplo, sistema/controlador de DSFM Distribuído), mainframe, multi- núcleo, paralelo, e/ou arquiteturas super-computacionais podem ser similarmente empregadas. Alternativamente, se os requerimentos de implantação ditarem uma probabilidade maior, dispositivos móveis menores (por exemplo, smartphones, Assistentes Pessoais Digitais (PDAs), etc.) podem ser empregados.
[060] Dependendo da implementação particular, recursos do sistema de DSFM podem ser alcançados implementando-se um microcontrolador, como o mi- crocontrolador CAST'S R8051XC2; Intel's MCS 51 (isto é, o microcontrolador 8051); e/ou similares. Da mesma forma, para implementar determinados recursos do sistema de DSFM, algumas implementações de recurso podem depender de componentes embutidos, como: Circuito Integrado de Aplicação Específica (“ASIC”), Processamento de Sinal Digital (“DSP”), Arranjo de Porta Programável em Campo (“FPGA”), e/ou alguma tecnologia embutida similar. Por exemplo, qualquer dentre a coleção de componentes de DSFM (distribuída ou, de outro modo, por exemplo, IMAS 341, etc.) e/ou recursos podem ser implementados através do microprocessador e/ou através de componentes embutidos; por exemplo, através de ASIC, copro- cessador, DSP, FPGA, e/ou similares. Alternadamente, algumas implementações do sistema de DSFM podem ser implementadas com componentes embutidos que são configurados e usados para alcançar uma variedade de recursos ou processamento de sinal.
[061] Dependendo da implementação particular, os componentes embutidos podem incluir soluções de software, soluções de hardware, e/ou alguma combinação de ambas soluções de hardware/software. Por exemplo, recursos de sistema de DSFM discutidos no presente documento podem ser alcançados através da implementação de FPGAs, que são dispositivos semicondutores contendo componentes de lógica programável denominados como “blocos lógicos”, e interconexões programáveis,como a série FPGA Virtex de alto desempenho e/ou a série Spartan de baixo custo fabricada junto a Xilinx. Os blocos lógicos e interconexões podem ser programáveispelo consumidor ou designer, após o FPGA ser fabricado, para implementar qualquer um dos recursos de sistema de DSFM. Uma hierarquia de intercone- xões programáveis permite que blocos lógicos sejam interconectados conforme a necessidade pelo designer/administrador do sistema de DSFM, de alguma forma como uma placa de ensaio programável de chip único. Blocos lógicos de FPGA podem ser programados para realizar a operação de portas lógicas básicas, como AND, e XOR, ou operadores combinacionais mais complexos, como decodificadores ou operações matemáticas simples. Na maioria dos FPGAs, os blocos lógicos também incluem elementos de memória, que podem ser flip-flops de circuito ou blocos mais completos de memória. Em algumas circunstâncias, o sistema de DSFM pode ser desenvolvido em FPGAs regulares e, então, migrados para uma versão fixa que se pareça mais com implementações de ASIC. Implementações de coordenação ou alternadas podem migrar um ou mais recursos de controlador de DSFM a um ASIC final ao invés, ou além, dos FPGAs. Dependendo da implementação, todos os componentes e microprocessadores embutidos supramencionados podem ser considerados como “CPU” e/ou “processador” para o sistema de DSFM.
[062] A fonte de alimentação 686 pode ser de qualquer forma padrão para alimentar pequenos dispositivos de placa de circuito eletrônico, como as células de energia a seguir: alcalina, hidreto de lítio, íon de lítio, polímero de lítio, níquel cad- mio, células solares, e/ou similares. Outros tipos de fontes de energia de CA ou CC também podem ser usados. No caso de células solares, em uma modalidade, o invólucro proporciona uma abertura através da qual a célula solar pode capturar energia fotônica. A célula de energia 686 é conectada a pelo menos um dos componentes subsequentes interconectados do sistema de DSFM proporcionando, assim, uma corrente elétrica a todos seus componentes interconectados. Em um exemplo, a fonte de alimentação 686 é conectada ao componente do barramento de sistema 604. Em uma modalidade alternativa, uma fonte de alimentação externa 686 é proporcio-nadaatravés de uma conexão ao longo da interface de I/O 608. Por exemplo, uma conexão USB e/ou IEEE 1394 transmite dados e energia ao longo da conexão e, portanto, é uma fonte de energia adequada.
[063] Os barramentos de interface 607 podem aceitar, conectar e/ou se co municar a uma série de adaptadores de interface, frequentemente, embora não necessariamente sob a forma de cartões de adaptador, como, sem limitação: interfaces de entrada/saída (I/Os) 608, interfaces de armazenamento 609, interfaces de rede 610, e/ou similares. Opcionalmente, as interfaces de processador criptográficas 627 similarmente podem ser conectadas ao barramento de interface. O barramento de interface proporciona as comunicações dos adaptadores de interface entre si, bem como com outros componentes da sistemização computacional. Os adaptadores de interface são adaptados para um barramento de interface compatível. Os adaptadores de interface podem se conectar ao barramento de interface através de uma ar-quitetura de expansão e/ou slot. Várias arquiteturas de expansão e/ou slot devem ser empregadas, como, sem limitação: Accelerated Graphics Port (AGP), Card Bus, ExpressCard, (Extended) Industry Standard Architecture ((E)ISA), Micro Channel Architecture (MCA), NuBus, Peripheral Component Interconnect (Extended) (PCI(X)), PCI Express, Personal Computer Memory Card International Association (PCMCIA), Thunderbolt, e/ou similares.
[064] Interfaces de armazenamento 609 podem aceitar, comunicar, e/ou se conectar a uma série de dispositivos de armazenamento como, sem limitação: dis-positivos de armazenamento 614, dispositivos de disco removível, e/ou similares. As interfaces de armazenamento podem empregar protocolos de conexão como, sem limitação: (Ultra) (Serial) Advanced Technology Attachment (Packet Interface) ((Ultra) (Serial) ATA(PI)), (Enhanced) Integrated Drive Electronics ((E)IDE), Institute of Elec-trical and Electronics Engineers (IEEE) 1394, Ethernet, canal de fibra, Small Computer Systems Interface (SCSI), Thunderbolt, Barramento Serial Universal (USB), e/ou similares.
[065] As interfaces de rede 610 podem aceitar, comunicar, e/ou se conectar a uma rede de comunicação 613. Através de uma rede de comunicação 613, o con-trolador de DSFM é acessível através de clientes remotos 633b (por exemplo, com- putadores com navegadores da web) por usuários 633a. As interfaces de rede podem empregar protocolos de conexão como, sem limitação: conexão direta, Ethernet (par espesso, delgado, torcido 10/100/1000 Base T, e/ou similares), Token Ring, conexão sem fio, como IEEE 802.1 la-x, e/ou similares. Se os requerimentos de processamento ditarem um grau maior de velocidade e/ou capacidade, os controladores de rede distribuída (por exemplo, sistema de DSFM Distribuído), arquiteturas podem similarmente ser empregadas para agrupar, equilibrar por carga, e/ou de outro modo aumentar a largura de banda de comunicação requerida pelo controlador de DSFM. Uma rede de comunicação pode ser qualquer uma e/ou a combinação dos seguintes: uma interconexão direta; a Internet; uma Rede de Área Local (LAN); uma Rede de Área Metropolitana (MAN); Operating Missions as Nodes on the Internet (OMNI); uma conexão padrão segura; uma Rede de Área Ampliada (WAN); uma rede sem fio (por exemplo, empregando protocolos como, sem limitação, Wireless Application Protocol (WAP), I-mode, e/ou similares); e/ou similares. Uma interface de rede pode ser considerada como uma forma especializada de uma interface de entrada/saída (I/O). Ademais, múltiplas interfaces de rede 610 podem ser usadas para engajar a vários tipos de rede de comunicação 613. Por exemplo, múltiplas interfaces de rede podem ser empregadas para permitir uma comunicação por redes de radiodifusão, difusão múltipla, e/ou difusão única.
[066] Interfaces de Entrada/Saída (I/Os) 608 podem aceitar, comunicar, e/ou se conectar a dispositivos de entrada de usuário 611, dispositivos periféricos 612, dispositivos processadores criptográficos 628, e/ou similares. I/Os podem empregar protocolos de conexão como, sem limitação: dados de áudio: analógicos, digitais, monaurais, RCA, estéreos, e/ou similares: Apple Desktop Bus (ADB), Bluetooth, IEEE 1394a-b, serial, barramento serial universal (USB); infravermelho; joystick; teclado; midi; óptico; PC AT; PS/2; paralelo; rádio; interface de vídeo: Apple Desktop Connector (ADC), BNC, coaxial, componente, compósito digital, DisplayPort, Interfa ce Visual Digital (DVI), multimídia de alta definição (HDMI), RCA, antenas RF, S- Video, VGA, e/ou similares; transceptores sem fio: 802.11a/b/g/n/x; Bluetooth; celular (por exemplo, acesso múltiplo por divisão de código (CDMA), acesso de pacote de alta velocidade (HSPA(+)), acesso de pacote em enlace descendente de alta velocidade (HSDPA), sistema global para comunicações móveis (GSM), evolução a longo prazo (LTE), WiMax, etc.); e/ou similares. Um dispositivo de saída pode ser uma tela de vídeo, que pode assumir a forma de um monitor à base de Tubo de Raios Catódicos (CRT), Tela de Cristal Líquido (LCD), Diodo Emissor de Luz (LED), Diodo Emissor de Luz Orgânica (OLED), Plasma, e/ou similares com uma interface (por exemplo, VGA, conjunto de circuitos DVI e cabo) que aceite sinais a partir de uma interface de vídeo. A interface de vídeo compõe informações geradas por uma sistemiza- ção computacional e gera sinais de vídeo com base nas informações compósitas em uma estrutura de memória de vídeo. Outro dispositivo de saída é um aparelho de televisão, que aceita sinais a partir de uma interface de vídeo. Geralmente, a interface de vídeo proporciona as informações de vídeo compósitas através de uma interface de conexão de vídeo que aceita uma interface de exibição de vídeo (por exemplo, um conector de vídeo compósito RCA que aceite um cabo de vídeo compósito RCA; um conector DVI que aceite um cabo de exibição DVI, HDMI, etc.).
[067] Os dispositivos de entrada de usuário 611 geralmente são um tipo de dispositivo periférico 612 (vide abaixo) e pode incluir: leitores de cartão, dongles, leitores de impressão digital, luvas, tablets gráficos, joysticks, teclados, microfones, mouse, controles remotos, leitores de retina, telas sensíveis ao toque (por exemplo, capacitiva, resistiva, etc.), trackballs, trackpads, sensores (por exemplo, acelerôme- tros, luz ambiente, GPS, giroscópios, proximidade, etc.), canetas stylus, e/ou similares.
[068] Os dispositivos periféricos 612 podem ser conectados e/ou se comunicar com I/Os e/ou outras instalações de similares como interfaces de rede, interfaces de armazenamento, diretamente ao barramento de interface, barramento de sistema, a CPU, e/ou similares. Os dispositivos periféricos podem ser externos, internos e/ou parte do controlador de DSFM. Os dispositivos periféricos podem incluir: antenas, dispositivos de áudio (por exemplo, line-in, line-out, entrada para microfone, auto- falantes, etc.), câmeras (por exemplo, imóveis, vídeo, webcam, etc.), dongles (por exemplo, para proteção contra cópias, garantindo transações seguras com uma as-sinatura digital, e/ou similares), processadores externos (para capacidades adicionais; por exemplo, dispositivos de criptografia 628), dispositivos de retroalimentação forçada (por exemplo, motores vibratórios), dispositivos de comunicação de campo próximo (NFC), interfaces de rede, impressoras, identificadores de radiofrequência (RFIDs), digitalizadores, dispositivos de armazenamento, transceptores (por exemplo, celular, GPS, etc.), dispositivos de vídeo (por exemplo, óculos protetores, monitores, etc.), fontes de vídeo, visores, e/ou similares. Geralmente, os dispositivos periféricos incluem tipos de dispositivos de entrada (por exemplo, microfones, câmeras, etc.).
[069] Deve-se notar que embora dispositivos de entrada de usuário e dispo-sitivosperiféricos possam ser empregados, o controlador de DSFM pode ser incor-porado como um dispositivo embutido, dedicado, e/ou desprovido de monitor (isto é, sem periféricos), que que o acesso seria proporcionado por uma conexão de interface de rede.
[070] Unidades criptográficas como, sem limitação, microcontroladores, pro-cessadores 626, interfaces 627, e/ou dispositivos 628 podem ser fixadas, e/ou se comunicarem com o controlador de DSFM. Um microcontrolador MC68HC16, fabricado pela Motorola Inc., pode ser usado para e/ou dentro de unidades criptográficas. O microcontrolador MC68HC16 utiliza uma instrução multiply-and-accumulate de 16- bit na configuração de 16 MHz e requer menos de um segundo para realizar uma operação de chave privada RSA de 512-bit. As unidades criptográficas suportam a autenticação de comunicações de agentes de interação, bem como permitem tran-sações anônimas. As unidades criptográficas também podem ser configuradas como parte da CPU. Microcontroladores equivalentes e/ou processadores também podem ser usados. Outros processadores criptográficos especializados comercialmente dis-poníveis incluem: Broadcom's CryptoNetX e outros Processadores de Segurança; nCipher's nShield (por exemplo, Solo, Connect, etc.), série SafeNet's Luna PCI (por exemplo, 7100); Semaphore Communications' 40 MHz Roadrunner 184; sMIP's (por exemplo, 208956); Aceleradores Criptográficos Sun's (por exemplo, Accelerator 6000 PCIe Board, Accelerator 500 Daughtercard); / (por exemplo, L2100, L2200, U2400), que seja capaz de realizar 500+ MB/s de instruções crptográficas; VLSI Technology's 33 MHz 6868; e/ou similares.
[071] Em geral, qualquer mecanização e/ou modalidade que permita que um processador afete o armazenamento e/ou recuperação de informações é considerada como uma memória 629. No entanto, a memória é uma tecnologia e recurso fungível, logo, qualquer número de modalidades de memória pode ser empregado ao invés ou em combinação entre si. Deve-se compreender que o controlador de DSFM e/ou uma sistemização computacional podem empregar várias formas de memória 629. Por exemplo, uma sistemização computacional pode ser configurada em que a operação de memória de CPU em chip (por exemplo, registros), RAM, ROM, e quaisquer outros dispositivos de armazenamento são proporcionados por um mecanismo de fita de perfuração de papel ou cartão de perfuração de papel; no entanto, essa modalidade resultaria em uma taxa extremamente lenta de operação. Em uma configuração, a memória 629 incluirá ROM 606, RAM 605, e um dispositivo de armazenamento 614. Um dispositivo de armazenamento 614 pode empregar qualquer número de dispositivos/sistemas de armazenamento computacional. Os dispositivos de armazenamento podem incluir um tambor; uma unidade de disco magnético (fixa e/ou removível); uma unidade magneto-óptica; uma unidade óptica (isto é, Blueray, CD ROM/RAM/Gravável (R)/ Regravável (RW), DVD R/RW, HD DVD R/RW etc.); um arranjo de dispositivos (por exemplo, Redundant Array of Independent Disks (RAID)); dispositivos de memória em estado sólido (memória USB, unidades em estado sólido (SSD), etc.); outros meios de armazenamento legíveis por processador; e/ou outros dispositivos dos mesmos. Logo, uma sistemização computacional geralmente requer e faz uso de memória.
[072] A memória 629 pode conter uma coleção de componentes de programa e/ou banco de dados e/ou dados como, sem limitação: componentes de sistema operacional 615 (sistema operacional); componentes de servidor de informações 616 (servidor de informações); componentes de interface de usuário 617 (interface de usuário); componentes de navegador da Web 618 (navegador da Web); bancos de dados 619; componentes de servidor de correio 621; componentes de cliente de correio 622; componentes de servidor criptográfico 620 (servidor criptográfico); os com-ponentes de DSFM 635; e/ou similares (isto é, coletivamente uma coleção de com-ponente). Esses componentes podem ser armazenados e acessados a partir dos dispositivos de armazenamento e/ou a partir de dispositivos de armazenamento acessíveis através de um barramento de interface. Embora componentes de pro-gramanão-convencionais, como aqueles na coleção de componentes, possam ser armazenados em um dispositivo de armazenamento local 614, os mesmos também podem ser carregados e/ou armazenados em memória como: dispositivos periféricos, RAM, instalações de armazenamento remoto através de uma rede de comunicação, ROM, várias formas de memória, e/ou similares.
[073] O componente de sistema operacional 615 é um componente de pro-gramaexecutável que facilita a operação do controlador de DSFM. O sistema opera-cional pode facilitar o acesso de I/Os, interfaces de rede, dispositivos periféricos, dispositivos de armazenamento, e/ou similares. O sistema operacional pode ser um sistema altamente tolerante a falhas, escalável, e seguro como: Apple Macintosh OS X (Servidor); AT&T Plan 9; Be OS; Unix e distribuições de sistema tipo Unix (como AT&T's UNIX; variações de Berkley Software Distribution (BSD) como FreeBSD, NetBSD, OpenBSD, e/ou similares; distribuições Linux como Red Hat, Ubuntu, e/ou similares); e/ou sistemas operacionais similares. No entanto, sistemas operacionais mais limitados e/ou menos seguros também podem ser empregados como Apple Macintosh OS, IBM OS/2, Microsoft DOS, Microsoft Windows 2000/2003/3.1/95/98/CE/Millenium/NT/Vista/XP (Servidor), Palm OS, e/ou similares. Além disso, sistemas operacionais móveis como Apple's iOS, Google's Android, Hewlett Packard's WebOS, Microsoft Windows Mobile, e/ou similares podem ser empregados. Qualquer um desses sistemas operacionais pode ser embutido no hardware do controlador de DSFM, e/ou armazenado/carregado em memó- ria/armazenamento. Um sistema operacional pode se comunicar a e/ou com outros componentes em uma coleção de componentes, incluindo o próprio, e/ou similares. Com maior frequência, o sistema operacional se comunica com outros componentes de programa, interfaces de usuário, e/ou similares. Por exemplo, o sistema operacional pode conter, comunicar, gera, obter, e/ou proporcionar componente de programa, sistema, usuário, e/ou comunicações de dados, solicitações, e/ou respostas. O sistema operacional, uma vez executado pela CPU, pode permitir a interação com redes de comunicação, dados, I/Os, dispositivos periféricos, componentes de programa,memória, dispositivos de entrada de usuário, e/ou similares. O sistema operacional pode proporcionar protocolos de comunicação que permitem que o controlador de DSFM se comunique com outras entidades através de uma rede de comunicação 613. Vários protocolos de comunicação podem ser usados pelo controlador de DSFM como um mecanismo de transporte de subportador para interação, como, sem limitação: difusão múltipla, TCP/IP, UDP, difusão única, e/ou similares.
[074] Um componente de servidor de informações 616 é um componente de programa armazenado que é executado por uma CPU. O servidor de informações pode ser um servidor de informações da Internet como, sem limitação, Apache Software Foundation's Apache, Microsoft's Internet Information Server, e/ou similares. O servidor de informações pode permitir a execução de componentes de programa através de instalações como Active Servidor Page (ASP), ActiveX, (ANSI) (Objective) C (++), C# e/ou .NET, scripts Common Gateway Interface (CGI), linguagem de marcação ode hipertexto dinâmica (D) (HTML), FLASH, Java, JavaScript, Practical Extraction Report Language (PERL), Hypertext Pre-Processor (PHP), pipes, Python, protocolo de aplicação sem fio (WAP), WebObjects, e/ou similares. O servidor de informações pode suportar protocolos de comunicação segura como, sem limitação, Protocolo de Transferência de Arquivos (FTP); Protocolo de Transferência de Hipertexto (HTTP); Protocolo de Transferência de Hipertexto Seguro (HTTPS), Secure Socket Layer (SSL), protocolos de mensagem (por exemplo, America Online (AOL) Instant Messenger (AIM), Apple's iMessage, Application Exchange (APEX), ICQ, Internet Relay Chat (IRC), Microsoft Network (MSN) Messenger Service, Presence e Instant Messaging Protocol (PRIM), Internet Engineering Task Force's (IETF's) Session Initiation Protocol (SIP), SIP for Instant Messaging and Presence Leveraging Extensions (SIMPLE), open XML-based Extensible Messaging and Presence Protocol (XMPP) (isto é, Jabber ou Open Mobile Alliance's (OMA's) Instant Messaging and Presence Service (IMPS)), Yahoo! Instant Messenger Service, e/ou similares. O servidor de informações proporciona resultados sob a forma de páginas da Web a navegadores da Web, e permite a geração manipulada das páginas da Web através da interação com outros componentes de programa. Após uma porção de resolução de Domain Name System (DNS) de uma solicitação HTTP ser solucionada a um servidor de informações particulares, o servidor de informações solicita informações em locais específicos no controlador de DSFM com base no restante da solicitação HTTP. Por exemplo, uma solicitação como as http://123.124.125.126/myInformation.html deve ter a porção de IP da solicitação “123.124.125.126” solucionada por um servidor de DNS a um servidor de informações nesse endereço de IP; esse servidor de informações pode sucessivamente analisar a solicitação http para a porção “/mylnformation.html” da solicitação e solucioná-lo a um local na memória contendo as informações “mylnformation.html.” Adicionalmente, outras informações que servem protocolos podem ser empregadas em várias portas, por exemplo, comunicações FTP através da porta 21, e/ou similares. Um servidor de informações pode se comunicar a e/ou com outros componentes em uma coleção de componente, incluído o próprio, e/ou facilita os mesmos. Com maior frequência, o servidor de informações se comunica com o banco de dados de DSFM 619, sistemas operacionais, outros componentes de programa, interfaces de usuário, navegadores da Web, e/ou similares.
[075] O acesso ao banco de dados de DSFM pode ser alcançado através de uma série de mecanismos de ponte de banco de dados como através de linguagens de scripting conforme enumerado abaixo (por exemplo, CGI) e através de canais de comunicação inter-aplicativos conforme enumerado abaixo (por exemplo, CORBA, WebObjects, etc.). Quaisquer solicitações de dados através de um navegador da Web são analisadas através do mecanismo de ponte em gramáticas apropriadas conforme requerido pelo DSFM. Em uma modalidade, o servidor de informações proporcionaria uma forma de Web acessível por um navegador da Web. As entradas feitas em campos fornecidos na forma da Web são marcadas como tendo sido digitados em campos particulares, e analisadas como tais. Os termos digitados são, então, analisados junto aos tags de campo, que atuam para instruir o analisador para gerar consultas direcionadas às tabelas e/ou campos apropriados. Em uma modalidade, o analisador pode gerar consultas em SQL padrão instanciando-se uma cadeia de busca com os comandos de união/seleção apropriados com base nas entradas de texto marcadas, em que o comando resultante é proporcionado pelo mecanismo de ponte ao DSFM como uma consulta. Mediante a geração de resultados de consulta a partir da consulta, os resultados são passados pelo mecanismo de ponte, e podem ser analisados para formatação e geração de uma página da Web com novos resultados pelo mecanismo de ponte. Essa página da Web com novos resultadosé, então, proporcionada ao servidor de informações, que pode fornecê-la ao navegador da Web solicitante.
[076] Da mesma forma, um servidor de informações pode conter, comunicar, gerar, obter, e/ou proporcionar componente de programa, sistema, usuário, e/ou co-municações de dados, solicitações, e/ou respostas.
[077] As interfaces computacionais em alguns aspectos são similares a inter-faces de operação de automóveis. Os elementos de interface de operação de auto-móveis como volantes, câmbios de marcha, e velocímetros facilitam o acesso, ope-ração, e exibição de recursos de automóveis, e status. Elementos de interface de interação computacional como caixas de verificação, cursores, menus, rolamentos, e janelas (coletiva e comumente referidos como widgets) similarmente facilitam o acesso, capacidades, operação, e exibição de dados e hardware de computador e recursos de sistema operacional, e status. As interfaces de operação são comumen- te denominadas como interfaces de usuário. As interfaces gráficas de usuário (GUIs) como Apple Macintosh Operating System's Aqua e iOS's Cocoa Touch, IBM's OS/2, Google's Android Mobile UI, Microsoft's Windows 2000/2003/3.l/95/98/CE/Millenium/Mobile/NT/XP/Vista/7/8 (isto é, Aero, Metro), Unix's X- Windows (por exemplo, que pode incluir bibliotecas e camadas de interface gráfica Unix adicional como K Desktop Environment (KDE), mytfiTV e GNU Network Object Model Environment (GNOME)), bibliotecas de interface da web (por exemplo, ActiveX, AJAX, (D)HTML, FLASH, Java, JavaScript, etc. bibliotecas de interface como, sem limitação, Dojo, jQuery(UI), MooTools, Prototype, script.aculo.us, SWFOb- ject, Yahoo! User Interface, qualquer uma dessas pode ser usada e) proporciona uma base de referência e meios para acessar e exibir informações graficamente aos usuários.
[078] Um componente de interface de usuário 617 é um componente de pro-grama armazenado que é executado por uma CPU. A interface de usuário pode ser uma interface gráfica de usuário conforme proporcionado por, com, e/ou sobre sis-temas operacionais e/ou ambientes operacionais conforme discutido anteriormente. A interface de usuário pode permitir a exibição, execução, interação, manipulação, e/ou operação de componentes de programa e/ou instalações de sistema através de instalações textuais e/ou gráficas. A interface de usuário proporciona uma instalação através da qual os usuários podem afetar, interagir, e/ou operar um sistema compu-tacional. Uma interface de usuário pode se comunicar a e/ou com outros componentes em uma coleção de componentes, incluindo os próprios, e/ou instalações dos mesmos. Com mais preferência, a interface de usuário se comunica com sistemas operacionais, outros componentes de programa, e/ou similares. A interface de usuário pode conter, comunicar, gerar, obter, e/ou proporcionar componente de programa, sistema, usuário, e/ou comunicações de dados, solicitações, e/ou respostas.
[079] Um componente de navegador da web 618 é um componente de pro-grama armazenado que é executado por uma CPU. O navegador da Web pode ser um aplicativo de visualização de hipertexto como Google's (Mobile) Chrome, Microsoft Internet Explorer, Netscape Navigator, Apple's (Mobile) Safari, objetos de navegador da web embutido como através da classe de objeto Apple's Cocoa (Touch), e/ou similares. O navegador da Web seguro pode ser dotado de uma criptografia de 128bit (ou maior) por meio de HTTPS, SSL, e/ou similares. Os navegadores da Web que permitem a execução de componentes de programa através de instalações como ActiveX, AJAX, (D)HTML, FLASH, Java, JavaScript, APIs de plug-in de navegador da web (por exemplo, Chrome, FireFox, Internet Explorer, Safari Plug-in, e/ou APIs similares), e/ou similares. Os navegadores da Web e ferramentas de acesso a informações similares podem ser integrados a PDAs, telefones celulares, smartpho nes, e/ou outros dispositivos móveis. Um navegador da Web pode se comunicar a e/ou com outros componentes em uma coleção de componentes, incluído o próprio, e/ou instalações dos mesmos. Com maior frequência, o navegador da Web se comunica com servidores de informações, sistemas operacionais, componentes de programa integrado (por exemplo, plug-ins), e/ou similares; por exemplo, pode conter, comunicar, gerar, obter, e/ou proporcionar um componente de programa, sistema,usuário, e/ou comunicações de dados, solicitações, e/ou respostas. Da mesma forma, no lugar de um navegador da Web e servidor de informações, um aplicativo combinado pode ser desenvolvido para realizar operações similares de ambos. O aplicativo combinado efetuaria similarmente a obtenção e a provisão de informações a usuários, agentes usuários, e/ou similares a partir dos nós equipados com DSFM. O aplicativo combinado pode ser inválido e sistemas que empregam navegadores da Web padrão.
[080] Um componente de servidor de correio 621 é um componente de pro-grama armazenado que é executado por uma CPU 603. O servidor de correio pode ser um servidor de correio da Internet como, sem limitação Apple's Mail Server (3), dovecot, sendmail, Microsoft Exchange, e/ou similares. O servidor de correio pode permitir a execução de componentes de programa através de instalações como ASP, ActiveX, (ANSI) (Objective-) C (++), C# e/ou .NET, CGI scripts, Java, JavaScript, PERL, PHP, pipes, Python, WebObjects, e/ou similares. O servidor de correio pode suportar protocolos de comunicações como, sem limitação: Internet message access protocol (IMAP), Messaging Application Programming Interface (MAPI)/Microsoft Exchange, post office protocol (POP3), simple mail transfer protocol (SMTP), e/ou similares. O servidor de correio pode rotear, encaminhar, e processar mensagens de correio de entrada e saída que foram enviados, retransmitidos e/ou estão de outro modo atravessando através e/ou ao sistema de DSFM.
[081] O acesso ao correio de sistema de DSFM pode ser alcançado através de uma série de APIs oferecidos pelos componentes de servidor da Web individuais e/ou pelo sistema operacional.
[082] Da mesma forma, um servidor de correio pode conter, comunicar, gerar, obter, e/ou proporcionar um componente de programa, sistema, usuário, e/ou comunicações de dados, solicitações, informações, e/ou respostas.
[083] Um componente de cliente de correio 622 é um componente de programa armazenado que é executado por uma CPU 603. O cliente de correio pode ser um aplicativo de visualização de correio como Apple (Mobile) Mail, Microsoft Entourage, Microsoft Outlook, Microsoft Outlook Express, Mozilla, Thunderbird, e/ou similares. Os clientes de correio podem suportar uma série de protocolos de transferência, como: IMAP, Microsoft Exchange, POP3, SMTP, e/ou similares. Um cliente de correio pode se comunicar a e/ou com outros componentes em uma coleção de componentes, incluindo o próprio, e/ou instalações dos mesmos. Com maior frequência, o cliente de correio se comunica com servidores de correio, sistemas operacionais, outros clientes de correio, e/ou similares; por exemplo, o mesmo pode conter, comunicar, gerar, obter, e/ou proporcionar um componente de programa, sistema,usuário, e/ou comunicações de dados, solicitações, informações, e/ou respostas. Em geral, o cliente de correio proporciona uma instalação para compor e transmitir mensagens de correio eletrônicos.
[084] Um componente de servidor criptográfico 620 é um componente de programa armazenado que é executado por uma CPU 603, processador criptográfico 626, interface de processador criptográfico 627, dispositivo de processador criptográfico 628, e/ou similares. As interfaces de processador criptográfico permitirão a expedição de solicitações de criptografia e/ou descriptografia pelo componente criptográfico; no entanto, o componente criptográfico, alternativamente, pode rodar em uma CPU. O componente criptográfico permite a criptografia e/ou descriptografia de dados fornecidos. O componente criptográfico permite criptografia e/ou descriptogra- fia simétrica e assimétrica (por exemplo, criptografia e/ou descriptografia Pretty Good Protection (PGP)). O componente criptográfico pode empregar técnicas criptográficas como, sem limitação: certificados digitais (por exemplo, framework de autenticação X.509), assinaturas digitais, assinaturas duplas, envelopagem, proteção de acesso por senha, gerenciamento de chave pública, e/ou similares. O componente criptográfico facilitará vários protocolos de segurança (criptografia e/ou descriptogra- fia) como, sem limitação: checksum, Data Encryption Standard (DES), Elliptical Curve Encryption (ECC), International Data Encryption Algorithm (IDEA), Message Digest 5 (MD5, que é uma operação hash unidirecional), senhas, Rivest Cipher (RC5), Rijndael, RSA (que é um sistema de criptografia e autenticação da Internet que usa um algoritmo desenvolvido em 1977 por Ron Rivest, Adi Shamir, e Leonard Adle- man), Secure Hash Algorithm (SHA), Secure Socket Layer (SSL), Secure Hypertext Transfer Protocol (HTTPS), e/ou similares. Empregando-se esses protocolos de segurança de criptografia, o sistema de DSFM pode criptografar todas as comunicações de entrada e/ou saída e pode servir como um nó dentro de uma rede privada virtual (VPN) com uma rede de comunicação mais ampliada. O componente criptográfico facilita o processo de “autorização de segurança” por meio do qual o acesso a um recurso é inibido por um protocolo de segurança em que o componente criptográfico efetua um acesso autorizado ao recurso seguro. Além disso, o componente criptográfico pode proporcionar identificadores exclusivos de conteúdo, por exemplo, empregando um hash MD5 para obter uma assinatura exclusiva para um arquivo de áudio digital. Um componente criptográfico pode se comunicar a e/ou com outros componentes em uma coleção de componentes, incluindo o próprio, e/ou instalações dos mesmos. O componente criptográfico suporta esquemas de criptografia que permitem uma transmissão segura de informações ao longo de uma rede de comunicação para permitir que um ou mais componentes de DSFM para engajar em transações seguras caso seja desejado. O componente criptográfico facilita o acesso seguro de recursos no sistema de DSFM e facilita ao cesso de recursos seguros em sistemas remotos; isto é, pode agir como um cliente e/ou servidor de recursos seguros. Com maior frequência, o componente criptográfico se comunica com servidores de informações, sistemas operacionais, outros componentes de programa, e/ou similares. O componente criptográfico pode conter, comunicar, gerar, obter, e/ou proporcionar um componente de programa, sistema, usuário, e/ou comunicações de dados, solicitações, e/ou respostas.
[085] O componente de banco de dados de DSFM 619 pode ser incorporado em um banco de dados e seus dados armazenados. O banco de dados é um com-ponente de programa armazenado, que é executado pela CPU; a porção de compo-nente de programa armazenado que configura a CPU para processar os dados ar-mazenados. O banco de dados pode ser qualquer dentre uma série de bancos de dados tolerantes a falhas, relacionais, escalonáveis, seguros como DB2, MySQL, Oracle, Sybase, e/ou similares. Os bancos de dados relacionais são uma extensão de um arquivo liso. Os bancos de dados relacionais consistem em uma série de tabelas relacionadas. As tabelas são interconectadas através de um campo de chave. O uso do campo de chave permite uma combinação das tabelas indexando-se contra o campo de chave; isto é, os campos de chave atuam como pontos de pivô dimensionais para combinar informações de várias tabelas. As relações geralmente identificam links mantidos entre as tabelas correspondendo-se as chaves primárias. As chaves primárias representam campos que identificam exclusivamente as fileiras de uma tabela em um banco de dados relacional. Com maior precisão, elas identificam exclusivamente fileiras de uma tabela no lado “um” de uma relação “um para muitos”.
[086] Alternativamente, o banco de dados de DSFM pode ser implementado usando várias estruturas de dados padrão, como um arranjo, hash, lista (ligada), es-trutura, arquivo de texto estruturado (por exemplo, XML), tabela, e/ou similares. Es- sas estruturas de dados podem ser armazenadas em uma memória e/ou em arquivos (estruturados). Em outra alternativa, um banco de dados orientado por objeto pode ser usado, como Frontier, ObjectStore, Poet, Zope, e/ou similares. Bancos de dados de objeto podem incluir uma série de coleções de objetos que são agrupados e/ou ligados entre si por atributos comuns; podem ser relacionados a outras coleções de objetos por alguns atributos comuns. Bancos de dados orientados por objeto funcionam similarmente a bancos de dados relacionais com a exceção que objetosnão são somente partes de dados, as podem ter outros tipos de capacidades encapsuladas em um dado objeto. Se o banco de dados de DSFM for implementado como uma estrutura de dados, o uso do banco de dados de DSFM 619 pode ser integrado em outro componente como o componente de DSFM 635. Da mesma forma, o banco de dados pode ser implementado como uma mistura de estruturas de dados, objetos, e estruturas relacionais. Os bancos de dados podem ser consolidados e/ou distribuídos em variações incontáveis através de técnicas de processamento de dados padrão. Porções de bancos de dados, por exemplo, tabelas, podem ser exportadas e/ou importadas e, logo, descentralizadas e/ou integradas.
[087] Em uma modalidade, o componente de banco de dados 619 inclui várias tabelas 619a-f. Uma tabela de usuários 619a pode incluir campos como, sem limitação: user_id, ssn, dob, first_name, last_name, age, state, address_firstline, address_secondline, zipcode, devices_list, contact_info, contact_type, alt_contact_info, alt_contact_type, e/ou similares. A tabela de usuários pode suportar e/ou rastrear múltiplas contas de entidade em um sistema de DSFM. Uma tabela de clientes 619b pode incluir campos como, sem limitação: device_lD, device_name, device_lP, device_MAC, device_type, device_model, device_version, device_OS, device_apps_list, device_securekey, e/ou similares. Uma tabela de Apps 619c pode incluir campos como, sem limitação: application_ID, application_name, applica- tion_type, application_backup_list, application_sync, e/ou similares. Uma tabela de mensagens 619d pode incluir campos como, sem limitação: msg_id, msg_application, timestamp, msg_details_list, message_size, message_origin, mes- sage_synchronization, e/ou similares. Uma tabela de failover 619e pode incluir campos como, sem limitação: failover_lD, failover_timestamp, primary_application, secondary_application, failover_check_time, e/ou similares. Uma tabela de caminhos de código 619f pode incluir campos como, sem limitação: codepath_ID, code- path_itrtions, optmz_thrshld_min, optmz_thrshld_max, codepath_length, code- path_priorty, e/ou similares.
[088] Em uma modalidade, o banco de ados de DSFM pode interagir cm outros sistemas de banco de dados. Por exemplo, empregando-se um sistema de banco de dados distribuído, consultas e acesso de dados por componente de DSFM de busca pode tratar a combinação do banco de dados de DSFM, um banco de dados de camada de segurança de dados integrados como uma entidade de banco de dados única.
[089] Em uma modalidade, os programas de usuário podem conter vários primitivos de interface, que podem servir para atualizar o sistema de DSFM. Da mesma forma, várias contas podem requerer tabelas de banco de dados padrão dependendo dos ambientes e dos tipos de clientes que o sistema de DSFM pode precisar servir. Deve-se notar que quaisquer campos exclusivos podem ser designa- dos/rotulados como um campo de chave. Em uma modalidade alternativa, essas tabelas foram descentralizadas em seus próprios bancos de dados e seus respectivos controladores de banco de dados (isto é, controladores de banco de dados individuais para cada uma das tabelas acima). Empregando-se técnicas de processamento de dados padrão, pode-se distribuir, ainda, os bancos de dados por várias sistemizações computacionais e/ou dispositivos de armazenamento. De modo similar, as configurações dos controladores de banco de dados descentralizados podem ser variadas consolidando-se e/ou distribuindo-se os vários componentes de banco de dados 619a-f. O sistema de DSFM pode ser configurado para acompanhar vários ajustes, entradas, e parâmetros através de controladores de banco de dados.
[090] O banco de dados de DSFM pode se comunicar a e/ou com outros componentes em uma coleção de componentes, incluindo o próprio, e/ou instalações dos mesmos. Com maior frequência, o banco de dados de DSFM se comunica com um ou mais componentes de DSFM, outros componentes de programa, e/ou similares. O banco de dados pode conter, reter, e proporcionar informações referentes a outros nós e dados.
[091] O componente de DSFM 635 é um componente de programa armaze-nado que é executado por uma CPU. Em uma modalidade, o componente de DSFM incorpora quaisquer e/ou todas as combinações dos aspectos das várias modalidades de um sistema de DSFM discutido nas figuras anteriores. Como tal, as modalidades do sistema de DSFM podem afetar o acesso, obtenção e provisão de informações, serviços, transações, e/ou similares ao longo de várias redes de comunicação.
[092] O um ou mais componentes de DSFM podem remediar uma execução falha em uma instância primária de um aplicativo de software em uma execução de instância secundária do aplicativo de software que esteja em sincronia com a execu-ção da instância primária antes da falha. Em uma modalidade, o componente DSFM 635 toma as entradas (por exemplo, endereços virtuais fragmentados 204; e/ou simi-lares) etc., e transforma as entradas através de vários componentes (por exemplo, IMAS 641; e/ou similares), em saídas (por exemplo, espaço de endereço de memória virtual contínua e infinita 206; e/ou similares).
[093] Os componentes de DSFM que permitem acesso de informações entre os nós podem ser desenvolvidos empregando-se ferramentas e linguagens de de-senvolvimentopadrão como, sem limitação: componentes Apache, Assembly, ActiveX, executáveis binários, (ANSI) (Objective-) C (++), C# e/ou .NET, adaptadores de banco de dados, CGI scripts, Java, JavaScript, ferramentas de mapeamento, ferra-mentas de desenvolvimento orientado procedural e de objeto, PERL, PHP, Python, scripts shell, comandos SQL, extensões de servidor de aplicativo da web, ambientes e bibliotecas de desenvolvimento da web (por exemplo, Microsoft's ActiveX; Adobe AIR, FLEX & FLASH; AJAX; (D)HTML; Dojo, Java; JavaScript; jQuery(UI); MooTools; Prototype; script.aculo.us; Simple Object Access Protocol (SOAP); SWFObject; Yahoo! User Interface; e/ou similares), WebObjects, e/ou similares. Em uma modalidade, um servidor de DSFM emprega um servidor criptográfico para criptografar e descriptografar comunicações. Os componentes de DSFM podem se comunicar a e/ou com outros componentes em uma coleção de componentes, incluindo o próprio, e/ou instalações dos mesmos. Com maior frequência, os componentes de DSFM se comunicam com o banco de dados de DSFM, sistemas operacionais, outros componentes de programa, e/ou similares. As modalidades do sistema de DSFM podem conter, comunicar, gerar, obter, e/ou proporcionar um componente de programa, sistema,usuário, e/ou comunicações de dados, solicitações, e/ou respostas.
[094] A estrutura e/ou operação de qualquer um dos componentes de contro-lador de nó de DSFM podem ser combinadas, consolidadas, e/ou distribuídas em qualquer número de formas para facilitar o desenvolvimento e/ou a implantação. De modo similar, a coleção de componentes pode ser combinada em qualquer número de vezes para facilitar a implantação e/ou desenvolvimento. Para realizar isso, pode- se integrar os componentes em uma base de código comum ou em uma instalação que possa carregar dinamicamente os componentes sob demanda de uma forma integrada.
[095] A coleção de componentes pode ser consolidada e/ou distribuída em variações incontáveis através de técnicas de processamento e/ou desenvolvimento de dados padrão. Várias instâncias de qualquer um dos componentes de programa na coleção de componentes de programa podem ser instanciadas em um nó único, e/ou ao longo de vários nós para aprimorar o desempenho através de técnicas de equilíbrio de carga e/ou processamento de dados. Adicionalmente, instâncias únicas também podem ser distribuídas ao longo de múltiplos controladores e/ou dispositivos de armazenamento; por exemplo, bancos de dados. Todas as instâncias de compo-nente de programa e controladores que funcionam em conjunto podem o fazer através de técnicas de comunicação de processamento de dados padrão.
[096] A configuração das modalidades de um controlador de DSFM pode de-pender do contexto de implantação do sistema. Fatores como, sem limitação, o or-çamento, capacidade, local, e/ou uso dos recursos de hardware subjacentes podem afetar os requerimentos de implantação e configuração. Independentemente se a configuração resulta em componentes de programa mais consolidados e/ou integra-dos, resulta em uma série mais distribuída de componentes de programa, e/ou resulta em alguma combinação entre uma configuração consolidada e distribuída, os dados podem ser comunicados, obtidos, e/ou proporcionados. As instâncias de componentes consolidados em uma base de código comum partir da coleção de componentes de programa podem comunicar, obter, e/ou proporcionar dados. Isso pode ser realizado através de técnicas de comunicação de processamento de dados intra- aplicativo como, sem limitação: referenciamento de dados (por exemplo, apontadores), mensagens internas, comunicação variável de instância de objeto, espaço de memória compartilhada, passagem variável, e/ou similares.
[097] Se componentes de coleção de componentes forem discretos, separados, e/ou externos entre si, então, a comunicação, obtenção, e/ou fornecimento de dados com e/ou a outros componentes podem ser realizados através de técnicas de comunicação de processamento de dados inter-aplicativo como, sem limitação: pas-sagem de informações de Application Program Interfaces (API); (Distributed) Com-ponent Object Model ((D)COM), (Distributed) Object Linking and Embedding ((D)OLE), e/ou similares), Common Object Request Broker Architecture (CORBA), interfaces de programa de aplicativo local e remoto Jini, JavaScript Object Notation (JSON), Remote Method Invocation (RMI), SOAP, pipes de processo, arquivos com-partilhados, e/ou similares. As mensagens enviadas entre componentes discretos para comunicação inter-aplicativo ou dentro de espaços de memória de um componente singular para comunicação intra-aplicativo podem ser facilitadas através da criação e análise de uma gramática. Pode-se desenvolver uma gramática utilizando- se ferramentas de desenvolvimento como lex, yacc, XML, e/ou similares, que permitem capacidades de geração e análise de gramática, que, sucessivamente, podem formar a base de mensagens de comunicação dentro e entre componentes.
[098] Por exemplo, uma gramática pode ser disposta para reconhecer os tokens de um pós-comando HTTP, por exemplo:
[099] onde Value 1 é considerado como sendo um parâmetro porque “http://”é parte da sintaxe de gramática, e o que segue é considerado como parte do pós- valor. De modo similar, com essa gramática, uma variável “Value1” pode ser inserida em um pós-comando “http://” e, então, enviada. A própria sintaxe de gramática pode ser apresentada como dados estruturados que são interpretados e/ou de outro modo usados para gerar o mecanismo de análise (por exemplo, um arquivo de texto de descrição de sintaxe conforme processado por lex, yacc, etc.). Da mesma forma, uma vez que o mecanismo de análise é gerado e/ou instanciado, o mesmo pode processar e/ou analisar dados estruturados como, sem limitação: caractere (por exemplo, tab) texto delineado, HTML, fluxos de texto estruturados, XML, e/ou dados estruturados similares. Em outra modalidade, os próprios protocolos de processamento de dados inter-aplicativo podem ter analisadores integrados e/ou prontamente disponíveis (por exemplo, JSON, SOAP, e/ou analisadores similares) que podem ser empregados para analisar dados (por exemplo, comunicações). Ademais, a gramáti- ca de análise pode ser usada além da análise de mensagem, mas também pode ser usada para analisar: bancos de dados, coleções de dados, armazenamentos de dados, dados estruturados, e/ou similares. Novamente, a configuração desejada dependerá do contexto, ambiente, e requerimentos de implantação do sistema.
[0100] Por exemplo, em algumas implementações, o controlador de DSFM pode estar executando um script PHP que implementa um servidor socket Secure Sockets Layer (“SSL”) através do servidor de informações, que escuta a comunicações de entrada em uma porta de servidor à qual um cliente pode enviar dados, por exemplo, dados codificados em formato JSON. Mediante a identificação de uma comunicação de entrada, o script PHP pode ler a mensagem de entrada a partir do dispositivo de cliente, analisar os dados de texto codificados por JSON para extrair informações dos dados de texto codificados por JSON em variáveis de script PHP, e armazenar os dados (por exemplo, informações de identificação de cliente, etc.) e/ou informações extraídas em um banco de dados relacional acessível usando a Structured Query Language (“SQL”). Proporciona-se abaixo uma listagem exemplificadora, gravada substancialmente sob a forma de comandos PHP/SQL, para aceitar dados de entrada codificados por JSON a partir de um dispositivo de cliente através de uma conexão SSL, analisar os dados para extrair variáveis, e armazenar os dados a um banco de dados:
[0101] Da mesma forma, os recursos a seguir podem ser usados para proporcionar modalidades exemplificadoras referentes à implementação de analisador SOAP:
[0102] e outas implementações de analisador:
[0103] em que todos se encontram aqui expressamente incorporados a título de referência.
[0104] Deve-se compreender que, dependendo das necessidades e/ou ca-racterísticas particulares de um usuário DSFM individual e/ou empresarial, configuração de banco de dados e/ou modelo relacional, tipo de dados, transmissão de dados e/ou framework de rede, estrutura de sintaxe, e/ou similares, várias modalidades do sistema de DSFM podem ser implementadas permitindo um alto grau de flexibilidade e customização. Embora várias modalidades de um sistema de DSFM e discussão do mesmo tenha sido direcionada à otimização e eficácia de execução de aplicativo, deve-se compreender que as modalidades descritas no presente documento podem ser prontamente configuradas e/ou customizadas para uma ampla variedade de outros aplicativos e/ou implementações.
[0105] Muito embora o relatório descritivo contenha muitos detalhes de im-plementação específicos, os mesmos não devem ser construídos como limitações ao escopo de quaisquer invenções ou ao que se reivindica, mas, de preferência, como descrições de recursos específicos a modalidades particulares de invenções particulares. Determinados recursos que são descritos neste relatório descritivo no contexto de modalidades separadas também podem ser implementados em combinação em uma modalidade única. De modo contrário, vários recursos que são descritos no contexto de uma modalidade única também podem ser implementados em múltiplas modalidades separadamente ou em qualquer subcombinação adequada. Ademais, embora recursos possam ser descritos anteriormente como atuando em determinadas combinações e mesmo incialmente reivindicados como tais, um ou mais recursos de uma combinação reivindicada podem, em alguns casos, ser remo-vido da combinação, e a combinação reivindicada pode ser direcionada a uma sub- combinação ou variação de uma subcombinação.
[0106] De modo similar, embora as operações sejam descritas nos desenhos em uma ordem particular, isso não deve ser entendido como exigindo que essas operações sejam realizadas na ordem particular mostrada ou em ordem sequencial, ou que todas as operações ilustradas sejam realizadas, para alcançar resultados desejáveis. Em determinadas circunstâncias, processamento de multitarefa e paralelo pode ser vantajoso. Ademais, a separação de vários componentes de sistema nas modalidades descritas anteriormente não deve ser entendida como exigindo essa separação em todas as modalidades, e deve-se compreender que os componentes e sistemas de programa descritos podem geralmente ser integrados juntos em um único produto de software ou em pacote com múltiplos produtos de software.
[0107] Logo, descreveram-se modalidades particulares da matéria. Outras modalidades se encontram no escopo das reivindicações a seguir. Em alguns casos, as ações citadas nas reivindicações podem ser realizadas em uma ordem diferente e ainda alcançar resultados desejáveis. Além disso, os processos descritos nas figuras anexas não exigem necessariamente que a ordem particular mostrada, ou ordem sequencial, alcance resultados desejáveis. Em determinadas implementações, um processamento de multitarefa e paralelo pode ser vantajoso.

Claims (17)

1. Método para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, compreendendo: executar simultaneamente uma pluralidade de instâncias do aplicativo no pelo menos um processador computacional, em que cada instância é compilada de acordo com uma respectiva opção de compilador que é diferente de respectivas opções de compilador usadas para compilar todas as outras instâncias da pluralidade de instâncias, em que uma primeira instância na pluralidade de instâncias é compilada para produzir uma sequência de resultados desejada, e cada outra instância na pluralidade de instâncias é também compilada para produzir a mesma sequência de resultados; e para cada um dentre uma primeira pluralidade de resultados a serem produzidos pelo aplicativo: monitorar, correspondente ao resultado, uma respectiva saída gerada por cada instância; e rotular, a partir das saídas monitoradas, a saída que ocorre mais precocemente como a saída do aplicativo correspondente ao resultado, e rotular todas as outras saídas como duplicatas, acelerando, assim, um desempenho computacional do pelo menos um processador computacional, o método sendo CARACTERIZADO pelo fato de que: a pluralidade de instâncias compreende uma segunda instância; a opção de compilador para a primeira instância compreende compilação ahead-of-time (AIT); e a opção de compilador para a segunda instância compreende compilação just-in-time (JIT), em que a compilação JIT se baseia, pelo menos em parte, em informações de tempo de execução obtidas a partir de pelo menos uma execução anterior da segunda instância.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que: a opção de compilador para a primeira instância é selecionada a partir de um grupo que consiste em uso de memória sem limitações, minimização de uso de memória, maximização de operações simultâneas, e simultaneidade limitada de operações.
3. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que compreende ainda: rotular uma instância da pluralidade de instâncias como uma instância primária; rotular todas as outras instâncias como instâncias secundárias; e para cada resultado a partir de uma segunda pluralidade de resultados a serem produzidos pelo aplicativo, suprimir, correspondente ao resultado, respectivas saídas a partir das instâncias secundárias.
4. Método, de acordo com a reivindicação 3, CARACTERIZADO pelo fato de que compreende ainda: identificar uma falha da instância primária após produzir k resultados a partir da segunda pluralidade de resultados, k > 1; rotular a instância primária como uma instância falha; selecionar uma instância secundária que executou lógica associada à computação de cada um dos k resultados; e re-rotular as instâncias secundárias selecionadas como a instância primária, com o que a instância primária re-rotulada produz o (k+1)-ésimo resultado.
5. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que pelo menos uma porção de código fonte do aplicativo de software é especificada usando uma linguagem de programação que é pelo menos parcialmente interpretada.
6. Método para permitir tolerância a falhas para um aplicativo de software, compreendendo: monitorar, por um controlador baseado em processador, execuções simultâneas em que: (i) uma instância primária do aplicativo de software, a instância primária sendo compilada de acordo com uma primeira opção de compilador, para produzir uma sequência de resultados desejada, e (ii) uma primeira instância secundária do aplicativo, a primeira instância secundária sendo compilada de acordo com uma opção de compilador que é diferente da primeira opção de compilador, mas para produzir a mesma sequência de resultados desejada; detectar uma falha da instância primária após a produção de k resultados do aplicativo de software, k > 1; confirmar que a primeira instância secundária computou operações requeridas para computar o k-ésimo resultado; e rotular a primeira instância secundária como a instância primária, o método sendo CARACTERIZADO pelo fato de que o controlador suprime saídas da primeira instância secundária que correspondem aos k resultados.
7. Método, de acordo com a reivindicação 6, CARACTERIZADO pelo fato de que a primeira opção de compilador compreende compilação just-in-time (JIT), e a opção de compilador usada para a primeira instância secundária compreende compilaçãoahead-of- time (AIT).
8. Método, de acordo com a reivindicação 6, CARACTERIZADO pelo fato de que compreende ainda: monitorar, pelo controlador, a execução simultânea de: (iii) uma segunda instância secundária do aplicativo, a segunda instância secundária sendo compilada de acordo com uma opção de compilador que é diferente tanto da primeira opção de compilador quanto da opção de compilador usada para compilar a primeira instância secundária; se a primeira instância secundária não for confirmada como tendo computado as operações necessárias para computar o k-ésimo resultado: confirmar que a segunda instância secundária tem as operações com-putadasnecessárias para computar o k-ésimo resultado; e rotular a segunda instância secundária como a instância primária.
9. Sistema para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, compreendendo: um primeiro processador; e uma primeira memória em comunicação elétrica com o primeiro processador, a primeira memória compreendendo instruções que, quando executadas por uma unidade de processamento que compreende pelo menos um dentre o primeiro processador e um segundo processador, fazem a unidade de processamento: executar simultaneamente uma pluralidade de instâncias do aplicativo no pelo menos um processador computacional, CARACTERIZADO pelo fato de que cada instância é compilada de acordo com uma respectiva opção de compilador que é diferente das respectivas opções de compilador usadas para compilar todas as outras instâncias da pluralidade de instâncias, em que uma primeira instância na pluralidade de instâncias é compilada para produzir uma sequência de resultados desejada, e cada outra instância na pluralidade de instâncias é também compilada para produzir a mesma sequência de resultados; e para cada um dentre uma primeira pluralidade de resultados a serem produzidos pelo aplicativo: monitorar, correspondente ao resultado, uma respectiva saída gerada por cada instância; e rotular, a partir das saídas monitoradas, a saída que ocorre mais precocemente como a saída do aplicativo correspondente ao resultado, e rotular todas as outras saídas como duplicatas, acelerando, assim, um desempenho computacional do pelo menos um processador computacional.
10. Sistema, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que: a pluralidade de instâncias compreende uma segunda instância; a opção de compilador para a primeira instância compreende compilação ahead-of-time (AIT); e a opção de compilador para a segunda instância compreende compilação just-in-time (JIT), em que a compilação JIT se baseia, pelo menos em parte, em informações de tempo de execução obtidas a partir de pelo menos uma execução anterior da segunda instância.
11. Sistema, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que: a opção de compilador para a primeira instância é selecionada a partir de um grupo que consiste em uso de memória sem limitações, minimização de uso de memória, maximização de operações simultâneas, e simultaneidade limitada de operações.
12. Sistema, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que as instruções fazem, ainda, a unidade de processamento: rotular uma instância a partir da pluralidade de instâncias como uma instân-ciaprimária; rotular todas as outras instâncias como instâncias secundárias; e para cada resultado a partir de uma segunda pluralidade de resultados a serem produzidos pelo aplicativo, suprimir, correspondente ao resultado, respectivas saídas a partir das instâncias secundárias.
13. Sistema, de acordo com a reivindicação 12, CARACTERIZADO pelo fato de que as instruções fazem, ainda, a unidade de processamento: identificar uma falha da instância primária após produzir k resultados a partir da segunda pluralidade de resultados, k > 1; rotular a instância primária como uma instância falha; selecionar uma instância secundária que executou lógica associada à computação de cada um dos k resultados; e re-rotular as instâncias secundárias selecionadas como a instância primária, com o que a instância primária re-rotulada produz (k+1)-ésimo resultado.
14. Sistema, de acordo com a reivindicação 9, CARACTERIZADO pelo fato de que pelo menos uma porção de código fonte do aplicativo de software é especificada usando uma linguagem de programação que é pelo menos parcialmente interpretada.
15. Sistema para tolerância a falhas de um aplicativo de software, compreendendo: um primeiro processador; e uma primeira memória em comunicação elétrica com o primeiro processador, a primeira memória compreendendo instruções que, quando executadas por uma unidade de processamento que compreende pelo menos um dentre um primeiro processador e um segundo processador, fazem a unidade de processamento: monitorar execuções simultâneas, em que: (i) uma instância primária do aplicativo de software, a instância primária sendo compilada de acordo com uma primeira opção de compilador, para produzir uma sequência de resultados desejada, e (ii) uma primeira instância secundária do aplicativo, a primeira instância secundária sendo compilada de acordo com uma opção de compilador que é diferente da primeira opção de compilador, mas para produzir a mesma sequência de resultados desejada; detectar uma falha da instância primária após a produção de k resultados do aplicativo de software, k > 1; confirmar que a primeira instância secundária computou operações necessárias para computar o k-ésimo resultado; e rotular a primeira instância secundária como a instância primária, o sistema sendo CARACTERIZADO pelo fato de que as instruções fazem, ainda, a unidade de processamento suprimir saídas da primeira instância secundária que correspondem aos k resultados.
16. Sistema, de acordo com a reivindicação 15, CARACTERIZADO pelo fato de que a primeira opção de compilador compreende compilação just-in-time (JIT), e a opção de compilador usada para a primeira instância secundária compreende compilação ahead-of- time (AIT).
17. Sistema, de acordo com a reivindicação 15, CARACTERIZADO pelo fato de que as instruções fazem, ainda, a unidade de processamento: monitorar execução simultânea de: (iii) uma segunda instância secundária do aplicativo, a segunda instância secundária sendo compilada de acordo com uma opção de compilador que é diferente tanto da primeira opção de compilador quanto da opção de compilador usada para compilar a primeira instância secundária; se a primeira instância secundária não for confirmada como tendo computado as operações necessárias para computar o k-ésimo resultado: confirmar que a segunda instância secundária tem as operações com-putadasnecessárias para computar o k-ésimo resultado; e rotular a segunda instância secundária como a instância primária.
BR112016021037-9A 2014-03-11 2015-03-11 Método e sistema para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, método e sistema para permitir tolerância a falhas para um aplicativo de software BR112016021037B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461951374P 2014-03-11 2014-03-11
US61/951,374 2014-03-11
US14/644,674 2015-03-11
US14/644,674 US10210005B2 (en) 2014-03-11 2015-03-11 Systems and methods for data synchronization and failover management
PCT/US2015/019920 WO2015138586A1 (en) 2014-03-11 2015-03-11 Systems and methods for data synchronization and failover management

Publications (2)

Publication Number Publication Date
BR112016021037A2 BR112016021037A2 (pt) 2017-08-15
BR112016021037B1 true BR112016021037B1 (pt) 2023-10-17

Family

ID=54072362

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112016021037-9A BR112016021037B1 (pt) 2014-03-11 2015-03-11 Método e sistema para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, método e sistema para permitir tolerância a falhas para um aplicativo de software

Country Status (9)

Country Link
EP (1) EP3117308B1 (pt)
JP (1) JP6592450B2 (pt)
KR (2) KR102250617B1 (pt)
AU (1) AU2015229434B2 (pt)
BR (1) BR112016021037B1 (pt)
CA (1) CA2942359C (pt)
ES (1) ES2776366T3 (pt)
SG (2) SG11201607515XA (pt)
WO (1) WO2015138586A1 (pt)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11022950B2 (en) * 2017-03-24 2021-06-01 Siemens Aktiengesellschaft Resilient failover of industrial programmable logic controllers
US11663094B2 (en) * 2017-11-30 2023-05-30 Hewlett Packard Enterprise Development Lp Reducing recovery time of an application

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60150159A (ja) * 1984-01-17 1985-08-07 Agency Of Ind Science & Technol 多重化処理方式
JPH04153764A (ja) * 1990-10-18 1992-05-27 Nec Corp 分散cpuの処理高速化方式
JP3008521B2 (ja) * 1991-02-26 2000-02-14 日本電気株式会社 呼び出し機能実行制御方式
JP2921190B2 (ja) * 1991-07-25 1999-07-19 日本電気株式会社 並列実行方式
JPH06131312A (ja) * 1992-01-23 1994-05-13 Hitachi Ltd 並行処理方法およびシステム
US6233725B1 (en) 1998-12-03 2001-05-15 International Business Machines Corporation Method and apparatus to coordinate and control the simultaneous use of multiple just in time compilers with a java virtual machine
JP3605327B2 (ja) * 1999-11-18 2004-12-22 富士通株式会社 プログラム実行装置
US7150012B2 (en) * 2002-10-15 2006-12-12 Nokia Corporation Method and apparatus for accelerating program execution in platform-independent virtual machines
JP4783005B2 (ja) * 2004-11-25 2011-09-28 パナソニック株式会社 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US8621275B1 (en) * 2010-08-06 2013-12-31 Open Invention Network, Llc System and method for event-driven live migration of multi-process applications
JP2007334643A (ja) 2006-06-15 2007-12-27 Renesas Technology Corp プログラム実行方法、プログラム、およびプログラム実行システム
US8627300B2 (en) * 2009-10-13 2014-01-07 Empire Technology Development Llc Parallel dynamic optimization
US8495607B2 (en) * 2010-03-01 2013-07-23 International Business Machines Corporation Performing aggressive code optimization with an ability to rollback changes made by the aggressive optimizations
US9081586B2 (en) * 2011-11-29 2015-07-14 Futurewei Technologies, Inc. Systems and methods for customizing optimization/transformation/ processing strategies

Also Published As

Publication number Publication date
KR20200137045A (ko) 2020-12-08
EP3117308B1 (en) 2020-02-19
CA2942359C (en) 2020-10-06
ES2776366T3 (es) 2020-07-30
KR20160132434A (ko) 2016-11-18
KR102250613B1 (ko) 2021-05-10
CA2942359A1 (en) 2015-09-17
BR112016021037A2 (pt) 2017-08-15
SG10201802998YA (en) 2018-05-30
JP6592450B2 (ja) 2019-10-16
EP3117308A4 (en) 2018-01-17
AU2015229434A1 (en) 2016-09-29
JP2017511939A (ja) 2017-04-27
WO2015138586A1 (en) 2015-09-17
SG11201607515XA (en) 2016-10-28
KR102250617B1 (ko) 2021-05-10
AU2015229434B2 (en) 2020-02-06
EP3117308A1 (en) 2017-01-18

Similar Documents

Publication Publication Date Title
US9552249B1 (en) Systems and methods for troubleshooting errors within computing tasks using models of log files
CN109087101B (zh) 交易校验方法、装置、存储介质及电子设备
US10210005B2 (en) Systems and methods for data synchronization and failover management
US8108536B1 (en) Systems and methods for determining the trustworthiness of a server in a streaming environment
US10257274B2 (en) Tiered heterogeneous fast layer shared storage substrate apparatuses, methods, and systems
US10033718B2 (en) Pairing of base and detachable device
WO2017181591A1 (zh) 测试方法及系统
CN109508295B (zh) 区块链共识算法测试方法、装置、计算装置和存储介质
CN109995523B (zh) 激活码管理方法及装置、激活码生成方法及装置
US10866808B2 (en) Methods and systems to track kernel calls using a disassembler
US11182257B2 (en) Adaptive data backup scheduling based on reliability metric or metrics
US20210049077A1 (en) Adaptive data retention policy based on reliability metric or metrics
CN109542781B (zh) 区块链共识算法测试方法、装置、计算装置和存储介质
US9201735B1 (en) Distributed storage data repair air via partial data rebuild within an execution path
CN107918564B (zh) 数据传输异常处理方法、装置、电子设备及存储介质
US11080139B2 (en) Systems and methods for data synchronization and failover management
BR112016021037B1 (pt) Método e sistema para executar um aplicativo de modo expeditivo em pelo menos um processador computacional, método e sistema para permitir tolerância a falhas para um aplicativo de software
CN109657167B (zh) 数据采集方法、装置、服务器及存储介质
CN105760456B (zh) 一种保持数据一致性的方法和装置
CN109325002A (zh) 文本文件处理方法、装置、系统、电子设备、存储介质
US10719454B2 (en) Synchronizing requests to access computing resources
AU2015229429B2 (en) Techniques for message retransmission mechanism
Marian et al. Experimental SCADA Platform Using Digital Signatures
US20160191210A1 (en) Data processing device, data communication device, communication system, data processing method, data communication method, and program

Legal Events

Date Code Title Description
B15K Others concerning applications: alteration of classification

Ipc: G06F 9/00 (2018.01)

B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]
B350 Update of information on the portal [chapter 15.35 patent gazette]
B06A Patent application procedure suspended [chapter 6.1 patent gazette]
B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 11/03/2015, OBSERVADAS AS CONDICOES LEGAIS