KR20160132434A - 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들 - Google Patents

데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들 Download PDF

Info

Publication number
KR20160132434A
KR20160132434A KR1020167027986A KR20167027986A KR20160132434A KR 20160132434 A KR20160132434 A KR 20160132434A KR 1020167027986 A KR1020167027986 A KR 1020167027986A KR 20167027986 A KR20167027986 A KR 20167027986A KR 20160132434 A KR20160132434 A KR 20160132434A
Authority
KR
South Korea
Prior art keywords
instance
instances
application
primary
result
Prior art date
Application number
KR1020167027986A
Other languages
English (en)
Other versions
KR102250613B1 (ko
Inventor
제임스 마이클 케이프
로버트 박
알렌 장
조란 페르코브
리에팅 유
프레락 푸크라즈 상비
보우 타테야마
콘스탄틴 소콜로프
에릭 퀸랜
Original Assignee
아이이엑스 그룹, 인크.
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 아이이엑스 그룹, 인크. filed Critical 아이이엑스 그룹, 인크.
Priority claimed from US14/644,674 external-priority patent/US10210005B2/en
Publication of KR20160132434A publication Critical patent/KR20160132434A/ko
Application granted granted Critical
Publication of KR102250613B1 publication Critical patent/KR102250613B1/ko

Links

Images

Classifications

    • 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
    • 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

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

데이터 동기화 및 페일오버 관리(DSFM) 시스템은 소프트웨어 애플리케이션의 비동일한 인스턴스들의 동시 실행을 감시하고, 소프트웨어 애플리케이션의 특정 결과로서, 인스턴스들 중 하나에 의해 생성되는 그 결과에 대응하는 가장 빠른 출력을 라벨링할 수 있다. DSFM은 인스턴스들 중 하나를 일차 인스턴스로서 라벨링할 수 있고 다른 인스턴스들을 이차 인스턴스들로서 라벨링할 수 있고, 일차 인스턴스가 실패하면, 일차 인스턴스의 실패 전에 생성된 마지막 결과와 연관된 연산들 모두를 계산한 이차 인스턴스들 중 하나를 새로운 일차 인스턴스로서 재라벨링할 수 있다.

Description

데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들{SYSTEMS AND METHODS FOR DATA SYNCHRONIZATION AND FAILOVER MANAGEMENT}
관련 출원들에 대한 상호 참조
본 출원은 발명의 명칭이 "Data Synchronization and Failover Management Apparatuses, Methods and Systems"이고, 2014년 3월 11일에 출원된 미국 가특허 출원 번호 61/951,374에 대한 우선권을 주장하고 이의 이득을 주장한다. 본 출원은 또한 동일한 명칭이고, 2015년 3월 11일에 출원된 미국 실용신안 출원 번호 14,644,674에 대한 우선권을 주장하고 이의 이득을 주장한다. 본 출원의 발명 대상은 2015년 3월 11일에 출원된 공동 계류중인 미국 실용신안 출원 번호 14/644,606과 관련되며, 이 미국 실용신안 출원은 (a) 2014년 3월 11일에 출원된 미국 가출원 번호 61/951,364; 및 (b) 2014년 3월 11일에 출원된 미국 가출원 번호 61/951,390에 대한 우선권을 주장한다. 본 출원의 발명 대상은 또한 2013년 9월 12일에 출원된 PCT 국제 출원 번호 PCT/US2013/059558과 관련된다. 상기 참조된 관련 출원들 각각은 본원에 전체적으로 참조로 포함된다.
본 개시내용은 일반적으로 소프트웨어 애플리케이션들의 실행을 위한 런타임 환경들에 관한 것이고, 특히 소프트웨어 애플리케이션의 성능 및 신뢰성을 강화하는 기술들에 관한 것이다.
일반적으로 소프트웨어 애플리케이션들 또는 애플리케이션들로서 언급되는 소프트웨어 프로그램들 및 시스템들은 의료 시스템들, 금융 트랜잭션들의 감시 및 제어, 산업 제조의 감시 및 제어 등과 같은 다양한 분야들에서 임무 수행에 필수적인 작업들을 종종 수행한다. 중요 작업을 수행하는 애플리케이션은 때때로, 예를 들어 소프트웨어 에러로 인해 실패한다. 코드에 대한 코드 분석, 테스팅, 및 복구들을 통해, 소프트웨어 에러들은 회피되거나 적어도 최소화될 수 있다. 그러나, 때때로, 소프트웨어 애플리케이션의 실행은 소프트웨어 에러로 인한 것이 아니라 애플리케이션이 실행되는 환경 내의 이벤트로 인해 실패한다. 예를 들어, 애플리케이션이 데이터에 액세스하는 디스크 또는 다른 메모리가 실패할 수 있고, 애플리케이션의 하나 이상의 구성요소들 및/또는 요구된 데이터에 액세스하는 네트워크 링크가 실패할 수 있는 등등이다. 그러한 환경 장애들은 소프트웨어 애플리케이션이 실패하게 할 수 있다.
상기 설명된 것들과 같은 다양한 분야들에서, 소프트웨어 애플리케이션은 고성능을 전달하는 것, 예를 들어 가능한 한 빨리 요구된 계산 결과들을 생성하는 것뿐만 아니라, 이러한 결과들을 신뢰 방식으로 제공하는 것으로 예상된다. 소프트웨어 에러들이 상기 설명된 바와 같이, 회피되거나 적어도 최소화될 수 있지만, 환경 인자들 및/또는 하드웨어 장애들에 의해 야기되는 에러들은 예측할 수 없는 경향이 있다. 그러므로, 소프트웨어 애플리케이션의 신뢰성을 개선하는 하나의 방식은 소프트웨어 애플리케이션의 2개의 인스턴스들을 동시에 실행하는 것이다. 하나의 인스턴스가 환경 이벤트로 인해 실패해도, 그러한 순간에 또는 순간 쯤에 이벤트가 다른 인스턴스의 환경에 발생하여, 그러한 인스턴스로 하여금 또한 실패하게 할 가능성은 매우 낮다. 그러므로, 백업 인스턴스로서 종종 칭해지는 다른 인스턴스는 요구된 계산 작업들을 계속 수행할 수 있다.
그러나, 이러한 리던던시 기반 접근법은 일부 과제들을 제시한다. 첫 번째로, 소프트웨어 애플리케이션의 2개의 인스턴스들을 실행하는 것은 일반적으로 프로세서들, 서버들, 메모리, 네트워킹 인터페이스들 등과 같은 요구된 자원들의 점에서 소프트웨어 애플리케이션을 실행하는 비용을 증가시킨다. 두 번째로, 이러한 접근법은 백업 인스턴스의 실패를 야기하는 다른 환경 이벤트가 발생할 수 있기 때문에 크게 확장가능하지 않다. 2개 이상의 백업 인스턴스들이 리던던시 및 따라서 신뢰성을 더 증가시키기 위해, 동시에 실행될 수 있지만, 이것은 또한 소프트웨어 애플리케이션을 실행하는 비용을 심지어 더 증가시킬 수 있다.
소프트웨어 애플리케이션의 효율적인 실행을 위해, 해석된 컴퓨터 언어들은 그들의 컴파일된 대응물들에 비해 수개의 이득들, 예컨대 상이한 컴퓨터 아키텍처들에 걸친 더 큰 이식성을 제공한다. 그러나, 해석기에서 코드를 실행하는 것은, 프로세서의 네이티브 머신 언어로 컴파일된 동일 코드를 실행하는 것보다 극적으로 더 느릴 수 있다. 이러한 단점을 극복하기 위해, 많은 해석기들은 저스트-인-타임(just-in-time)(JIT) 컴파일화를 포함함으로써 성능을 개선할 수 있으며, 해석기의 바이트코드의 적어도 일부는 프로세서의 네이티브 코드로 컴파일된다. 그 다음, 해석기는 프로그램의 그러한 일부에 대한 바이트코드를 해석하는 대신에 네이티브 코드를 실행할 수 있다. 이러한 특징은 자바 가상 머신(Java Virtual Machine)(JVM)의 표준 핫스팟 구현 및 마이크로소프트의 공통 언어 런타임(.NET로 통상 공지됨)을 포함하는 수개의 해석기 런타임들에 제공되고, 종래의 어헤드-오브-타임(ahead-of-time)(AIT) 컴파일 언어들에 필적하는 성능을 제공할 수 있다.
다른 성능 개선은 JIT 컴파일된 언어들로 가능하며, 이 경우 해석기가 특정 바이트코드(또는 다른 중간 표현, 또는 소스 코드)를 실행함에 따라, 해석기는 실행된 코드 또는 그것의 적어도 일부에 관한 프로파일링 정보를 수집할 수 있으며, 그것은 코드 또는 그것의 일부가 컴파일될 때 더 높은 정도의 최적화를 가능하게 한다. 이러한 적응 최적화는 핫스팟 JVM에 제공되고 어헤드-오브-타임 컴파일 코드보다 더 좋은 성능을 때때로 제공할 수 있다. 이러한 기술의 하나의 주요 단점은 컴파일화를 최적화하기 위해 충분한 프로파일링 정보를 수집하기 위해 해석기를 사용하여 코드 또는 그것의 일부가 여러 번(예를 들어, 수십, 수백, 수천 번, 또는 훨씬 더 많은 횟수로) 실행되어야 한다는 것이다. 프로파일링 페이즈 동안에, 소프트웨어 애플리케이션은 전형적으로 AIT 컴파일화와 같은 종래의 컴파일화 기술을 사용하여 컴파일되는 컴파일 버전보다 더 느리게 실행된다. 코드의 프로파일링이 완료된 후에만, 적응 JIT는 강화된 성능을 제공할 수 있다.
본원에 설명되는 시스템들 및 방법들의 실시예들은 데이터 동기화 및 페일오버 관리(Data Synchronization and Failover Management)(DSFM)를 특징으로 하며, 그것을 통해 소프트웨어 애플리케이션의 신뢰성은 소프트웨어 애플리케이션의 수개의 비동일한 인스턴스들의 동시 실행을 용이하게 함으로써 증가될 수 있다. 이것은 소프트웨어 애플리케이션의 실행의 비용을 증가시킬 수 있지만, 리던던시에만 기초한 기술들과 달리, 비동일한 인스턴스들은 성능 강화를 제공할 수 있다. 구체적으로, 각각의 인스턴스는 지정된 제한에 따라 하나 이상의 자원들 예컨대 메모리, 네트워크 인터페이스들, 처리 용량, 이용가능 프로세서들의 수 등을 최대화하는 것, 최소화하는 것, 또는 이용하는 것과 같은 상이한 각각의 목적을 최적화하기 위해 생성될 수 있다. 일부 인스턴스들은 이전 런들로부터 이용가능한 런타임 정보를 사용하여 그리고/또는 저스트-인-타임(JIT) 컴파일화를 사용하여 실행에 최적화될 수 있다. 그러한 인스턴스들은 상이한 컴파일러들을 사용하여 소프트웨어 애플리케이션의 소스 코드를 컴파일함으로써 그리고/또는 상기 설명된 것들과 같은 하나 이상의 지정된 목적들을 최적화할 수 있는 상이한 컴파일러 옵션들을 사용함으로써 생성될 수 있다.
각각의 인스턴스가 실질적으로 동일한 소스 코드로부터 유도됨에 따라, 각각의 인스턴스는 실질적으로, 임의의 다른 인스턴스와 동일한 결과들을 생성하며, 즉 각각의 인스턴스는 소프트웨어 애플리케이션이 생성할 것으로 예상되는 것과 동일한 결과들을 생성할 가능성이 높다. 그러나, 상이한 인스턴스들은 상이하게 최적화될 수 있고, 따라서, 소프트웨어 애플리케이션의 다양한 인스턴스들의 실행이 동일한 시간에 또는 동일한 시간 무렵에 개시되더라도, 그들의 각각의 실행 동안 상이한 시간들에 하나 이상의 결과들을 일련의 결과들로 출력할 수 있다. 소프트웨어 애플리케이션이 일련의 결과들을 생성하는 것으로 예상되면, 각각의 결과에 대해, DSFM 시스템의 일 구현은 모든 다른 인스턴스들 전에 출력을 생성한 인스턴스로부터의 대응 출력을 요구된 결과로서 지정/라벨링할 수 있고 다른 인스턴스들로부터의 출력들을 사본들로서 폐기할 수 있다. 일반적으로, 상이한 인스턴스들은 상이한 결과들을 우선 출력할 수 있다. 가장 빠르게 생성된 각각의 출력들을 소프트웨어 애플리케이션의 연속 결과들로서 지정/라벨링함으로써, DSFM 시스템의 일 구현은 소프트웨어 애플리케이션의 전체 성능을 개선할 수 있다.
DSFM 시스템의 일 구현이 특정 인스턴스의 특정 출력을 소프트웨어 애플리케이션의 특정 결과로서 지정/라벨링하거나 선택하는지에 상관없이, 각각의 인스턴스는 그러한 결과를 생성하기 위해 요구되는 계산들 모두를 수행한다. 이러한 인스턴스들은 일부 인스턴스들이 그것의 상이한 각각의 최적화들로 인해, 특정 결과를 생성하기 위해 요구되지 않은 부가 계산들을 수행했을 수 있기 때문에 상이한 상태들에 있을 수 있다. 그럼에도 불구하고, 모든 인스턴스들이 특정 결과를 생성하기 위해 요구되는 계산들을 완료했을 때, DSFM 시스템의 일 구현은 이러한 인스턴스들이 동기화되거나 싱크되는 것을 고려한다.
DSFM 시스템의 일 구현은 이러한 인스턴스들 중 하나를 일차 인스턴스로서 지정/라벨링할 수 있다. 임의로, DSFM 시스템의 일 구현은 일차 인스턴스의 출력들을 소프트웨어 애플리케이션의 결과들로서 지정/라벨링할 수 있고, 이차 인스턴스(들)로서 지정/라벨링되는 하나 이상의 다른 인스턴스들의 출력들을 폐기할 수 있다. 상기 설명된 바와 같이, 인스턴스들 모두에 의해 집합적으로, 또는 일차 인스턴스에 의해 단독으로 k개의 결과들이 생성된 후에 일차 인스턴스가 실패하면, DSFM 시스템의 일 구현은 상기 설명된 바와 같이, k개의 결과들이 생성된 후에, 이러한 인스턴스들 모두가 동일한 상태에 있지 않더라도 동기화되기 때문에, 이차 인스턴스들 중 하나를 새로운 일차 인스턴스로서 지정/라벨링할 수 있다. (k+1)번째 및 하나 이상의 후속 결과들은 새로운 일차 인스턴스로서 재지정/재라벨링되는 이차 인스턴스에 의해 생성될 수 있다.
새롭게 지정된/라벨링된 일차 인스턴스가 예를 들어 n개의 결과들의 계산 후에 실패하면, 또 다른 이차 인스턴스가 동기화될 것이고, DSFM 시스템의 일 구현은 그러한 다른 이차 인스턴스를 새로운 일차 인스턴스로서 재지정/재라벨링할 수 있다. 소프트웨어 애플리케이션을 실행하는 비용은 일반적으로 인스턴스들의 수에 따라 증가하지만, 상이한 인스턴스들은 그것의 상이한 각각의 최적화들로 인해, 상이한 결과들의 생성과 연관되는 상이한 성능들을 가질 수 있고, 가장 빠른 출력의 선택은 소프트웨어 애플리케이션의 전체 성능을 증가시킬 수 있다. 다양한 인스턴스들은 동일하지 않지만, DSFM 시스템의 수개의 구현들은 다양한 인스턴스들이 동기화되는 순간들을 결정할 수 있고, 따라서 생성되는 결과들에 영향을 미치는 것 없이, 실패된 인스턴스의 것과는 상이한 상태에 있을 가능성이 높은, 하나의 인스턴스로부터 다른 상이한 인스턴스로의 페일오버를 가능하게 할 수 있고, 따라서 소프트웨어 애플리케이션의 신뢰성을 증가시킬 수 있다.
따라서, 일 양태에서, 적어도 하나의 컴퓨터 프로세서 상에 신속하게 소프트웨어 애플리케이션을 실행하는 방법이 제공된다. 방법은 하나 이상의 컴퓨터 프로세서들 상에 소프트웨어 애플리케이션의 수개의 인스턴스들을 동시에 실행하는 단계를 포함하며, 각각의 인스턴스는 수개의 인스턴스들 중 모든 다른 인스턴스들을 컴파일하기 위해 사용되는 각각의 컴파일러 옵션들과 상이한 각각의 컴파일러 옵션에 따라 컴파일된다. 소프트웨어 애플리케이션에 의해 생성되는 제1 세트의 결과들의 각각의 결과에 대해, 방법은 결과에 대응하여, 각각의 인스턴스에 의해 생성되는 각각의 출력을 감시하는 단계를 포함한다. 애플리케이션에 의해 생성되는 제1 세트의 결과들의 각각의 결과에 대해, 방법은 또한 감시된 출력들로부터 결과에 대응하는 애플리케이션의 출력으로서 가장 빠르게 생성하는 출력을 라벨링하는 단계, 및 모든 다른 출력들을 사본들로서 라벨링하는 단계를 포함한다. 이러한 방식으로, 제1 세트의 결과들의 각각의 결과는 모든 다른 인스턴스들 전에 그러한 특정 결과를 생성한 인스턴스로부터 획득되는 것에 의해, 소프트웨어 애플리케이션을 실행할 시에 하나 이상의 컴퓨터 프로세서들의 컴퓨팅 성능을 가속시킨다.
일부 실시예들에서, 수개의 인스턴스들은 제1 인스턴스 및 제2 인스턴스를 포함하고, 제1 인스턴스에 대한 컴파일러 옵션은 어헤드-오브-타임(AIT) 컴파일화를 포함한다. 예를 들어, 제1 인스턴스는 AIT 컴파일화를 사용하여 컴파일될 수 있다. 제2 인스턴스에 대한 컴파일러 옵션은 저스트-인-타임(JIT) 컴파일화를 포함할 수 있다. 제2 인스턴스의 JIT 컴파일화는 제2 인스턴스의 하나 이상의 사전 실행들로부터 획득되는 런타임 정보에 적어도 부분적으로 기초할 수 있다. 소프트웨어 애플리케이션의 소스 코드의 적어도 일부는 적어도 부분적으로 해석되는 프로그래밍 언어를 사용하여 지정될 수 있다.
일부 실시예들에서, 수개의 인스턴스들은 제1 인스턴스를 포함하고, 제1 인스턴스에 대한 컴파일러 옵션은 비제약된 메모리 사용, 메모리 사용의 최소화, 병행 연산들의 최대화, 및 연산들의 제약된 병행성 중 하나 이상일 수 있다. 따라서, 일 예에서, 제1 인스턴스는 비제약된 메모리 사용을 이용하는 병렬 계산을 최대화할 수 있다. 다른 예에서, 제1 인스턴스는 메모리 사용 등을 최소화할 수 있다.
일부 실시예들에서, 방법은 수개의 인스턴스들 중 하나의 인스턴스를 일차 인스턴스로서 라벨링하는 단계, 및 모든 다른 인스턴스들을 이차 인스턴스들로서 라벨링하는 단계를 더 포함한다. 방법은 또한 애플리케이션에 의해 생성되는 제2 복수의 결과들 중 각각의 결과에 대해, 결과에 대응하여, 이차 인스턴스들로부터 각각의 출력들을 억제하는 단계를 포함할 수 있다. 방법은 또한 제2 복수의 결과들 중 k개의 결과들을 생성한 후에 일차 인스턴스의 실패를 식별하는 단계를 포함할 수 있으며, k ≥ 1이다. 그 다음, 일차 인스턴스는 실패된 인스턴스로서 라벨링될 수 있다. 방법은 k개의 결과들 각각에 대한 계산과 연관된 로직을 실행한 이차 인스턴스를 선택하는 단계, 및 선택된 이차 인스턴스들을 일차 인스턴스로서 재라벨링하는 단계 - 그것에 의해 재라벨링된 일차 인스턴스는 (k+1)번째 결과를 생성함 - 를 더 포함할 수 있다. 선택된 이차 인스턴스는 k개의 결과들 각각에 대한 계산과 연관된 로직을 실행하기 때문에, 선택된 이차 인스턴스는 그것의 실패 전에 일차 인스턴스와 동기화될 가능성이 있다. 그러므로, 2개 이상의 인스턴스들을 통한 애플리케이션의 실행은 일반적으로 실질적인 지연들(예컨대 애플리케이션을 재시작하는 것과 연관되는 것들) 및/또는 에러들을 도입하는 것 없이 하나의 인스턴스로부터 다른 인스턴스로 페일오버일 수 있다.
다른 양태에서, 소프트웨어 애플리케이션에 대한 페일오버를 가능하게 하는 방법이 제공된다. 방법은 프로세서 기반 컨트롤러에 의해 소프트웨어 애플리케이션의 일차 인스턴스 및 애플리케이션의 제1 이차 인스턴스의 동시 실행들을 감시하는 단계를 포함한다. 일차 인스턴스는 제1 컴파일러 옵션에 따라 컴파일되고, 제1 이차 인스턴스는 제1 컴파일러 옵션과 상이한 컴파일러 옵션에 따라 컴파일된다. 방법은 또한 소프트웨어 애플리케이션의 k개의 결과들의 생성 후에 일차 인스턴스의 실패를 검출하는 단계를 포함하며, k ≥ 1이다. 게다가, 방법은 제1 이차 인스턴스가 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하는 단계, 및 제1 이차 인스턴스를 일차 인스턴스로서 라벨링하는 단계를 포함한다. 제1 이차 인스턴스는 k개의 결과들 각각을 계산하기 위해 요구되는 연산들을 계산했기 때문에, 제1 이차 인스턴스는 그것의 실패 전에 일차 인스턴스와 동기화될 가능성이 있다. 그러므로, 2개 이상의 인스턴스들을 통한 애플리케이션의 실행은 일반적으로 실질적인 지연들(예컨대 애플리케이션을 재시작하는 것과 연관되는 것들) 및/또는 에러들을 도입하는 것 없이 하나의 인스턴스로부터 다른 인스턴스로 페일오버할 수 있다.
컨트롤러는 k개의 결과들에 대응하는 제1 이차 인스턴스의 출력들을, 즉 일차 인스턴스로서 라벨링되는 인스턴스의 실패 전에 억제할 수 있다. 제1 컴파일러 옵션은 저스트-인-타임(JIT) 컴파일화를 포함할 수 있고, 제1 이차 인스턴스를 위해 사용되는 컴파일러 옵션은 어헤드-오브-타임(AIT) 컴파일화를 포함할 수 있다. 일부 실시예들에서, 방법은 컨트롤러에 의해 애플리케이션의 제2 이차 인스턴스의 동시 실행을 감시하는 단계를 더 포함한다. 제2 이차 인스턴스는 제1 컴파일러 옵션 및 제1 이차 인스턴스를 컴파일하기 위해 사용되는 컴파일러 옵션 둘 다와 상이한 컴파일러 옵션에 따라 컴파일된다. 제1 이차 인스턴스는 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다고 방법에 의해 확인되지 않으면, 방법은 제2 이차 인스턴스가 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하는 단계를 포함할 수 있다. 그 다음, 제2 이차 인스턴스는 일차 인스턴스로서 라벨링되어, 일차 인스턴스로 이전에 라벨링된 인스턴스로부터 일차 인스턴스로서 재라벨링되는 제2 이차 인스턴스로 효율적이고 에러 없는 페일오버를 허용할 수 있다.
다른 양태에서, 적어도 하나의 컴퓨터 프로세서 상에 신속하게 소프트웨어 애플리케이션을 실행하는 시스템은 제1 프로세서 및 제1 프로세서와 전기 통신하는 제1 메모리를 포함한다. 제1 메모리는 제1 프로세서 및/또는 제2 프로세서를 포함할 수 있는 처리 유닛에 의해 실행될 때, 하나 이상의 컴퓨터 프로세서들 상에 소프트웨어 애플리케이션의 수개의 인스턴스들을 동시에 실행하기 위해 처리 유닛을 프로그래밍하는 명령들을 포함한다. 각각의 인스턴스는 수개의 인스턴스들 중 모든 다른 인스턴스들을 컴파일하기 위해 사용되는 각각의 컴파일러 옵션들과 상이한 각각의 컴파일러 옵션에 따라 컴파일된다. 애플리케이션에 의해 생성되는 제1 세트의 결과들의 각각의 결과에 대해, 명령들은 결과에 대응하여, 각각의 인스턴스에 의해 발생되는 각각의 출력을 감시하기 위해 처리 유닛을 프로그래밍한다. 애플리케이션에 의해 생성되는 제1 세트의 결과들의 각각의 결과에 대해, 명령들은 또한 감시된 출력들로부터 결과에 대응하는 애플리케이션의 출력으로서 가장 빠르게 발생하는 출력을 라벨링하고, 모든 다른 출력들을 사본들로서 라벨링하기 위해 처리 유닛을 프로그래밍한다. 이러한 방식으로, 제1 세트의 결과들의 각각의 결과는 모든 다른 인스턴스들 전에 그러한 특정 결과를 생성한 인스턴스로부터 획득되는 것에 의해, 소프트웨어 애플리케이션을 실행할 시에 하나 이상의 컴퓨터 프로세서들의 컴퓨팅 성능을 가속시킨다. 다양한 실시예들에서, 명령들은 상기 설명된 방법 단계들 중 하나 이상을 수행하기 위해 처리 유닛을 프로그래밍할 수 있다.
다른 양태에서, 소프트웨어 애플리케이션에 대한 페일오버를 가능하게 하는 시스템은 제1 프로세서 및 제1 프로세서와 전기 통신하는 제1 메모리를 포함한다. 제1 메모리는 제1 프로세서 및/또는 제2 프로세서를 포함할 수 있는 처리 유닛에 의해 실행될 때, 소프트웨어 애플리케이션의 일차 인스턴스 및 애플리케이션의 제1 이차 인스턴스의 동시 실행들을 감시하기 위해 처리 유닛을 프로그래밍하는 명령들을 포함한다. 일차 인스턴스는 제1 컴파일러 옵션에 따라 컴파일되고, 제1 이차 인스턴스는 제1 컴파일러 옵션과 상이한 컴파일러 옵션에 따라 컴파일된다. 명령들은 또한 소프트웨어 애플리케이션의 k개의 결과들의 생성 후에 일차 인스턴스의 실패를 검출하기 위해 처리 유닛을 프로그래밍하며, k ≥ 1이다. 게다가, 명령들은 제1 이차 인스턴스가 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하고, 제1 이차 인스턴스를 일차 인스턴스로서 라벨링하기 위해 처리 유닛을 프로그래밍한다. 그와 같이, 2개 이상의 인스턴스들을 통한 애플리케이션의 실행은 일반적으로 실질적인 지연들(예컨대 애플리케이션을 재시작하는 것과 연관되는 것들) 및/또는 에러들을 도입하는 것이 하나의 인스턴스로부터 다른 인스턴스로 페일오버할 수 있다. 다양한 실시예들에서, 명령들은 상기 설명된 방법 단계들 중 하나 이상을 수행하기 위해 처리 유닛을 프로그래밍할 수 있다.
다른 양태에서, 비일시적 저장 매체를 포함하는 제조 물품은 처리 유닛에 의해 실행될 때, 하나 이상의 컴퓨터 프로세서들 상에 소프트웨어 애플리케이션의 수개의 인스턴스들을 동시에 실행하기 위해 메모리와 전자 통신하는 처리 유닛을 프로그래밍하는 명령들을 저장한다. 각각의 인스턴스는 수개의 인스턴스들 중 모든 다른 인스턴스들을 컴파일하기 위해 사용되는 각각의 컴파일러 옵션들과 상이한 각각의 컴파일러 옵션에 따라 컴파일된다. 애플리케이션에 의해 생성되는 제1 세트의 결과들의 각각의 결과에 대해, 명령들은 결과에 대응하여, 각각의 인스턴스에 의해 발생되는 각각의 출력을 감시하기 위해 처리 유닛을 프로그래밍한다. 애플리케이션에 의해 생성되는 제1 세트의 결과들의 각각의 결과에 대해, 명령들은 또한 감시된 출력들로부터 결과에 대응하는 애플리케이션의 출력으로서 가장 빠르게 발생하는 출력을 라벨링하고, 모든 다른 출력들을 사본들로서 라벨링하기 위해 처리 유닛을 프로그래밍한다. 다양한 실시예들에서, 명령들은 상기 설명된 방법 단계들 중 하나 이상을 수행하기 위해 처리 유닛을 프로그래밍할 수 있다.
다른 양태에서, 비일시적 저장 매체를 포함하는 제조 물품은 처리 유닛에 의해 실행될 때, 소프트웨어 애플리케이션의 일차 인스턴스 및 애플리케이션의 제1 이차 인스턴스의 동시 실행들을 감시하기 위해 메모리와 전자 통신하는 처리 유닛을 프로그래밍하는 명령들을 저장한다. 일차 인스턴스는 제1 컴파일러 옵션에 따라 컴파일되고, 제1 이차 인스턴스는 제1 컴파일러 옵션과 상이한 컴파일러 옵션에 따라 컴파일된다. 명령들은 또한 소프트웨어 애플리케이션의 k개의 결과들의 생성 후에 일차 인스턴스의 실패를 검출하기 위해 처리 유닛을 프로그래밍하며, k ≥ 1이다. 게다가, 명령들은 제1 이차 인스턴스가 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하고, 제1 이차 인스턴스를 일차 인스턴스로서 라벨링하기 위해 처리 유닛을 프로그래밍한다. 다양한 실시예들에서, 명령들은 상기 설명된 방법 단계들 중 하나 이상을 수행하기 위해 처리 유닛을 프로그래밍할 수 있다.
본 발명의 다양한 실시예들의 하나의 기술적 효과는 일련의 결과들을 생성하는 것으로 예상되는 소프트웨어 애플리케이션의 전체 성능이 각각의 결과에 대해 그러한 결과에 대응하는 출력들을 동시에 생성하는 수개의 인스턴스들로부터 가장 빠른 출력을 선택함으로써 증가될 수 있다는 것이다. 상이한 인스턴스들이 특정 결과에 대응하는 출력들을 생성할 수 있는 시간들은 상이한 인스턴스들이 컴파일되는 방식의 차이들로 인해 상이할 수 있다. 일부 인스턴스들은 일부 다른 인스턴스들보다 더 느린 출력들을 초기에 생성할 수 있지만, 그러한 인스턴스들보다 더 빠른 출력들을 나중에 생성할 수 있다. 각각의 결과에 대해, 효과적으로, 가장 빠른 출력을 선택함으로써, 소프트웨어 애플리케이션은 상이한 결과들에 각각 대응하는 출력들을 생성할 시에 가장 빠른 인스턴스들을 통해 실행되는 것에 의해, 전체 소프트웨어 애플리케이션의 실행을 가속시킨다.
본 발명의 다양한 실시예들의 다른 기술적 효과는 상기 설명된 바와 같이 성능을 증가시키지만, 상이한 인스턴스들이 소프트웨어 애플리케이션에 의해 생성되는 일련의 결과들의 각각의 결과의 계산 시에, 정확히 동일한 상태에 있지 않을 수 있지만 동기화로 유지될 수 있다는 것이다. 그러므로, 하나의 인스턴스가 하나 이상의 결과들의 생성 후에 실패하면, 실패하지 않았던 것들 중에서 다음 결과를 생성할 시에 가장 빠를 가능성이 높은, 다른 인스턴스가 다음 결과를 생성하기 위해 사용될 수 있다. 따라서, 안전한, 즉 일반적으로 에러 없는 페일오버가 소프트웨어 애플리케이션의 전체 성능을 강화하면서, 애플리케이션을 재시작하는 것과 연관되는 것들과 같은 과도한 지연들을 초래해야 하는 것 없이 달성될 수 있다.
본원에 개시되는 실시예들의 장점들 및 특징들과 함께, 이러한 및 다른 목적들은 이하의 설명, 첨부 도면들, 및 청구항들에 대한 참조를 통해 더 분명할 것이다. 더욱이, 본원에 설명되는 다양한 실시예들의 특징들은 상호 배타적이지 않고 다양한 조합들 및 순열들로 존재할 수 있다는 점이 이해되어야 한다.
도면들에서, 동일한 참조 부호들은 일반적으로 상이한 도면들 도처에서 동일한 부분들을 언급한다. 또한, 도면들은 반드시 축척에 따라 도시되는 것은 아니며, 그 대신에 일반적으로 본 발명의 원리들을 예시하는 것이 강조된다. 이하의 설명에서, 본 발명의 다양한 실시예들은 이하의 도면들을 참조하여 설명된다.
도 1은 DSFM 시스템의 다양한 실시예들의 사용들을 예시한다.
도 2는 DSFM 시스템의 일 실시예를 사용하여, 소프트웨어 애플리케이션의 일차 인스턴스로부터 이차 인스턴스로의 페일오버를 예시하는 데이터그래프 도해를 도시한다.
도 3은 DSFM 시스템의 일 실시예를 사용하여, 소프트웨어 애플리케이션의 하나의 인스턴스로부터 다른 인스턴스로의 전이를 예시하는 로직 흐름도를 도시한다.
도 4 및 도 5는 DSFM 시스템의 일 실시예를 사용하여 소프트웨어 애플리케이션의 성능 강화를 개략적으로 예시한다.
도 6은 일 실시예에 따른 DSFM 컨트롤러를 개략적으로 도시한다.
도 1을 참조하여, 사용자(101)는 특정 소프트웨어 애플리케이션을 실행하기를 원할 수 있다. 데이터 동기화 및 페일오버 관리(DSFM) 시스템(102)은 소프트웨어 애플리케이션의 2개의 인스턴스들을 실행할 수 있으며, 하나는 일차 인스턴스로서 지정/라벨링되고 다른 하나는 이차 인스턴스로서 지정/라벨링된다. 일차 인스턴스는 예를 들어 하드웨어 장애, 네트워킹 에러 등으로 인해 실패할 수 있고, 실행은 이차 인스턴스(또한 백업 인스턴스로서 칭해짐)로 전달될 수 있다. 일부 실시예들에서, 이차 인스턴스는 예를 들어 일차 및 이차 인스턴스들이 동일한 소스 코드로부터 유도되지만, 2개의 인스턴스들이 상이하게 컴파일될 수 있기 때문에 일차 인스턴스와 동일한 정확한 상태에 있지 않을 수 있다. 그러므로, 이차 인스턴스는 일차 인스턴스의 것과 동일한 코드 경로를 따르지 않을 수 있다. 그와 같이, 이차 인스턴스의 실행은 일차 인스턴스의 것과 비교하여 상이할 수 있어, 예를 들어 상이한 그리고/또는 잠재적으로 수준 이하의 결과들을 예를 들어 실행 속도의 점에서 야기한다.
예를 들어, 일차 및 이차 인스턴스들은 그들이 처음에 동일한 상태들에 있었지만, 실행 동안에 사이가 멀어질 수 있고, 그들이 동기화될 때에도, 즉 일반적으로 동일한 전체 로직을 구현할 때에도, 2개의 인스턴스들은 동일한 상태에 정확히 있지 않을 수 있다. 예를 들어, 자바와 같지만, 이에 제한되지 않는 해석되거나 부분적으로 해석된 언어들로 코딩되는 일부 소프트웨어 시스템들에서, 저스트-인-타임(JIT) 컴파일화는 실행 동안에 따라가는 최적 코드 경로를 검색하면서, 바이트코드 코드를 머신 코드로 변환할 수 있다. JIT 컴파일화가 일차 또는 이차 인스턴스를 발생시키지만, 둘 다를 발생시키지 않도록 사용되면, 특정 시간에 일차 및 이차 인스턴스들은 동일한 명령들을 정확히 실행하지 않을 수 있다. 일 예로서, 코드 세그먼트를 고려한다:
Figure pct00001
하나의 컴파일러를 사용하여 컴파일되는 이러한 코드 세그먼트의 하나의 인스턴스(인스턴스 A로서 표시됨)는 조건을 우선 평가한 다음, 조건이 참인지를 판단할 수 있고, 그 다음에 f1 또는 f2를 적절히 계산하여, 결과(x)를 생성할 수 있다.
동일한 컴파일러 또는 다른 컴파일러는 조건의 평가가 통상 긴 시간(예를 들어, 수 밀리초)이 걸리고, f1 및 f2의 평가가 또한 약간의 시간(예를 들어, 수 밀리초)이 걸리지만, 모든 3개의 계산들이 서로에 의존하지 않는 지식을 가질 수 있다. 그러므로, 다른 컴파일러 또는 동일한 컴파일러의 상이한 옵션을 사용하여, 실행 시간들에 관한 지식을 사용하여 컴파일되는 동일한 코드 세그먼트의 다른 인스턴스(인스턴스 B로서 표시됨)는 조건의 평가가 진행 중인 동안에 f1 및 f2 둘 다를 계산할 수 있다. 평가가 완료된 후에, 인스턴스 B는 f1 및 f2의 결과들 중에서 용이하게 선택하는 것에 의해, 인스턴스 A가 선택하는 것보다 더 빠른 출력을 생성할 수 있다. 따라서, 특정 순간에, 코드 세그먼트의 인스턴스 A는 조건만을 평가하고 있을 수 있는 반면에, 인스턴스 B는 f1 및 f2를 또한 부가적으로 계산하고 있을 수 있다.
또 다른 예에서, 코드 세그먼트의 다른 인스턴스(인스턴스 C로서 표시됨)를 발생시키기 위해 사용되는 컴파일러는 대개, 조건이 거짓인 지식을 가질 수 있다. 그러므로, 인스턴스 C는 조건의 평가가 진행 중인 동안에, f2만을 계산하고 f1을 계산하지 않고, 조건이 참인 것으로 결정되면 f1만을 계산할 수 있다. 따라서, x의 계산은 모든 상황들에서는 아니지만 다수의 상황들에서, 임의의 부가 지식을 사용하는 것 없이 컴파일된 인스턴스 A에 의한 것에 비해 가속될 수 있다. 특정 순간에 인스턴스 A는 조건만을 평가하고 있을 수 있는 반면에, 인스턴스 C는 조건 및 f2 둘 다를 평가하고 있을 수 있다. 따라서, 인스턴스들 A, B, 및 C는 일반적으로 코드 세그먼트에 의해 지정되는 동일한 로직을 구현하지만, 특정 순간에, 이러한 인스턴스들 각각은 상이한 명령들을 실행할 수 있다.
상이한 컴파일화 기술들, 상이한 컴파일러들, 및/또는 상이한 컴파일러 옵션들을 사용하여 컴파일되는 2개 이상의 그러한 인스턴스들이 동시에 실행되면, 다른 인스턴스에 비해 애플리케이션의 결과들의 생성에서 일반적으로 지연되는 하나 이상의 인스턴스들은 예를 들어 결과들의 복사를 회피하기 위해 그들의 각각의 출력들을 억제하도록 구성될 수 있다. 예시하기 위해, 실행 동안에, 일차 인스턴스(예를 들어, 인스턴스 B)는 특정 출력(예를 들어, 결과(x))을 발생할 수 있고, 따라서 이차 인스턴스(예를 들어, 인스턴스들 A 또는 C)는 그러한 출력을 생성하기 위해 요구되는 계산들이 인스턴스들 A 및 C에 의해 수행될 때에도, 그러한 출력의 사본을 생성하지 않을 수 있다. 일부 실시예들에서, 그것의 출력들을 애플리케이션의 결과들로서 생성하도록 지정/라벨링되는 인스턴스는 일차 인스턴스(예를 들어, 인스턴스 B)로서 칭해질 수 있고, 하나 이상의 다른 인스턴스들(예를 들어, 인스턴스 A 및 인스턴스 C)은 이차 인스턴스(들)로서 칭해질 수 있다. 이차 인스턴스(들)가 애플리케이션에 의해 생성되는 각각의 결과와 연관된 연산들을 수행하게 하고 이차 인스턴스(들)의 출력들을 단지 억제함으로써, 이차 인스턴스(들)는 일차 인스턴스와 동기화하여 가능한 한 일차 인스턴스의 상태와 가까운 상태로 유지된다.
일부 구현들에서, 일차 및 이차 인스턴스들에 대한 JIT 컴파일화는 예시적 코드 세그먼트를 사용하여 상기 설명된 바와 같이, 일차 및 이차 인스턴스들에 대한 상이한 명령들을 갖는 상이한 코드 경로들을 발생시킬 수 있다. 일부 구현들에서, 일차 및 이차 인스턴스들은 상이한 종류들의 컴파일러들(예를 들어, JIT 및 어헤드-오브-타임(AIT))이 일차 및 이차 인스턴스들을 컴파일하기 위해 사용되기 때문에 상이한 코드 경로들을 가질 수 있다. 일부 구현들에서, 동일한 컴파일러가 일차 인스턴스 및 이차 인스턴스 둘 다를 컴파일하기 위해 사용될 수 있지만, 상이한 컴파일러 옵션들이 각각의 컴파일화들 동안에 사용될 수 있다. 컴파일러 옵션들의 예들은 메모리 사용을 최소화하는 것, 비제약된 메모리 사용, 병행 및/또는 부분적인 오버래핑 연산들을 최대화하는 것(예를 들어, 병렬 프로세서들, 수개의 스레드들 등을 사용하는 것), 지정된 한계까지로 병행 및/또는 부분적인 오버래핑 연산들의 수를 제한하는 것 등을 포함하지만, 이들에 제한되지 않는다. 일부 구현들에서, 일차 인스턴스는 실패한 것으로 검출되고 실행은 이차 인스턴스로 스위칭된다. 이차 인스턴스 실행은 상이한 코드 경로를 따를 수 있고, 따라서 이차 인스턴스의 성능 및 효율은 일차 인스턴스의 것과 매칭하지 않을 수 있다(예를 들어 104).
본원에 설명되는 DSFM 시스템의 다양한 실시예들은 전체 프로그램이 사전에 컴파일될 수 있는 지를 사용하여 일부 JIT 런타임들에서 옵션을 이용할 수 있다. 예를 들어, 핫스팟 JVM에서, -Xcomp 커맨트 라인 옵션은 런타임이 모든 실행된 메소드를 비교적 더 느린 해석 및 프로파일링 단계들에 종속시키는 것보다는 오히려 메소드를 즉시 컴파일하게 할 수 있다. .NET에서, NGen 유틸리티는 프로그램이 실행될 때마다 그렇게 행하는 것보다는 오히려 설치 시에 바이트코드 프로그램들을 네이티브 코드로 컴파일할 수 있다. 이러한 옵션들이 그들의 동작에서 다를 수 있지만, 그들 둘 다는 일반적으로 JIT를 어헤드-오브-타임 컴파일화로 변환하는 동일한 효과를 갖는다.
일부 실시예들에서, 단일 바이트코드 프로그램의 2개의 인스턴스들이 동시에 실행된다. 동시에는 일반적으로 각각의 실행 시간들에서 적어도 부분적인 오버랩을 의미한다. 제1 인스턴스는 임의적 어헤드-오브-타임 컴파일화를 사용하는 반면에 제2 인스턴스는 표준 적응 JIT 런타임에 의해 실행된다. 인스턴스들 둘 다는 동일한 입력들을 공급받고 그들은 동일한 출력들을 단지 상이한 속도들로 생성할 수 있다. 일반적으로, 초기에 제1 인스턴스는 그것이 컴파일 코드를 사용하는 만큼 상당히 더 빠른 반면에 제2 인스턴스는 해석기에서 코드를 계속 프로파일링한다. 제2 인스턴스가 프로그램을 점점 컴파일함에 따라, 그것의 성능은 전형적으로 증가하고 결국 적응 JIT 컴파일러로 이용가능한 더 큰 최적화로 인해 부분적으로, 제1 인스턴스의 성능을 능가할 수 있다.
2개의 인스턴스들의 상이한 실행들은 소프트웨어 애플리케이션의 단일 실행으로 표현될 수 있다. 이 때문에, 2개의 인스턴스들의 각각의 출력들은 필터 프로세스를 통해 병합될 수 있다. 일부 실시예들에서, 필터 프로세스는 2개의 인스턴스들로부터 출력 메시지들을 수집하지만, 병합된 메시지들의 제1 또는 더 일찍 생성된 것, 즉 더 빠른 인스턴스에 의해 생성되는 메시지에 응답하여 출력 메시지만을 발행하며, 다른 비교적 더 느린 인스턴스에 의해 생성되는 사본 메시지들은 폐기된다. 각각의 인스턴스가 동일한 출력 메시지들을 동일한 순서로 생성하는 것으로 예상됨에 따라, 필터는 2개의 인스턴스들 중 더 빠른 것으로부터 메시지들을 효과적으로 발행할 수 있다. 실제로, 2개의 인스턴스들 및 필터의 조합은 어헤드-오브-타임 컴파일화의 더 빠른 초기 성능 및 적응 JIT의 더 빠른 장기 성능 둘 다를 갖는 단일 인스턴스로서 동작한다. 이러한 기술은 2개의 인스턴스들, 예를 들어 도 4 및 도 5를 참조하여 아래에 설명되는 바와 같이, 2개 초과의 인스턴스들로 확장될 수 있다.
도 2를 참조하여, 일부 구현들에서, 사용자들/클라이언트들(201)은 예를 들어 주어진 시스템 상에 하나의 코드를 실행함으로써 애플리케이션을 실행하는 것을 요청할 수 있다(예를 들어 205). 일부 구현들에서, 애플리케이션의 하나의 인스턴스를 일차(203)로서 지정/라벨링하고, 나머지를 이차들(204)로서 지정/라벨링하는 구성이 있을 수 있다(예를 들어 202). 일부 실시예들에서, 코드 실행들의 상이한 인스턴스들(예를 들어, 일차 및 이차) 사이에 정확히 동일한 레코드를 유지하기 위해, 백업 애플리케이션은 일차 인스턴스와 동일한 코드 경로를 사용한다. 그러나, 일부 실시예들에서, 실행들 내의 일부 단계들은 약간 상이할 수 있다. 예를 들어, 일차 인스턴스 및 이차 인스턴스는 일차 인스턴스가 실행 후에 출력을 발생시킬 수 있는 반면에(예를 들어 207), 이차 인스턴스가 출력을 발생시키지 않는(예를 들어 208) 것을 제외하고 정확히 동일한 코드 경로를 따를 수 있다. 일부 실시예들에서, 백업 애플리케이션에 의한 출력 발생 처리는 일차 인스턴스의 전체 실행 경로를 통해 실행하지만 출력을 발행하는 지점을 포함하지 않는 것까지 실행하여, 가능한 한 서로 동등하게 가깝게 유지되는 일차 및 이차 인스턴스들을 야기할 수 있다. 그러나, 일부 실시예들에서, 일차 및 이차 인스턴스들은 정확히 동일한 상태로 끝나지 않을 수 있다. 예를 들어, 자바로 코팅되는 시스템들에서, 일차 및 이차 인스턴스들은 정확히 동일한 코드 실행 경로들을 따르되, 코드들의 메시지 출력들의 발행을 포함하지 않는 것까지 따르면, 그들은 완전한 메시지 스트림을 공동으로 가질 수 있고 서로 동기화될 수 있지만, 정확히 동일한 상태에 있지 않을 것이다. 예를 들어, 일차 인스턴스에 대한 실행 요청들(206a)은 최종 출력이 생성될 필요가 있는 것을 지정할 수 있다. 예를 들어, 실행 요청들(206a 및 206b)은 XML에 따라 포맷되는 데이터의 형태로 "출력 기록" 명령을 포함하는 (보안) 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol)("HTTP(들)") 포스트 메시지들일 수 있다. 애플리케이션 실행 요청(206a 및 206b)의 예시적 리스팅은 실질적으로 XML 포맷 데이터를 포함하는 HTTP(들) 포스트 메시지의 형태로, 아래에 제공된다:
Figure pct00002
Figure pct00003
일부 구현들에서, 코드들의 런타임 성능을 개선하기 위해, 시스템의 저스트-인-타임(JIT) 컴파일화 능력들을 이용하고, 코드들을 머신 코드들로 변환할 수 있다. 일부 구현들에서, JIT 컴파일러는 그것이 일차인지(예를 들어 207), 또는 이차인지(예를 들어 208), 코드들의 최적화를 컴파일화의 일부로서 개시할 수 있다. 예를 들어, JIT 컴파일화는 사본 코드 라인들을 간결한 것들로 통합할 수 있고/있거나, 외부 코드 경로들을 제거하여 대부분 사용되고 있는 경로들을 더 효율적으로 최적화할 수 있다. 예를 들어, 코드 경로가 미리 결정된 그리고/또는 동적으로 결정된 임계 횟수보다 더 많이 사용되었다면, 일부 실시예들에서, 그것은 더 높은 우선순위가 주어질 수 있고, 더 적은 사용을 갖는 다른 코드 경로들에 비해 선호될 수 있다. 일부 실시예들에서, 일차 인스턴스의 전체 실행 경로를 통해 출력을 발행하는 지점까지 실행할 수 있는 이차 인스턴스는 발행 지점까지 이르는 이차 인스턴스의 코드가 일차 인스턴스의 대응 코드와 유사하게 최적화되지 않을 수 있기 때문에, 일차 인스턴스의 것과 동일하지 않은 코드 경로를 가질 수 있다.
일부 실시예들에서, 이차 및/또는 스탠바이 애플리케이션은 최초 일차 및/또는 액티브 애플리케이션이 실패한 것으로 결정될 때 일차 인스턴스가 될 수 있다. 예를 들어, 서버(204)는 일차 인스턴스의 성능을 감시하고 그것이 최초 일차 인스턴스의 일부 상에서 시스템 및/또는 애플리케이션 실패를 검출할 때, 애플리케이션 페일오버를 개시할 수 있다(예를 들어 209). 일단 최초 일차 인스턴스가 실패한 것으로 결정되면, 일부 실시예들에서, 서버는 애플리케이션의 이차 인스턴스를 새로운 일차 인스턴스로서 지정/라벨링하고 실행을 위한 코드들을 새로운 일차 인스턴스로 보낼 수 있다(예를 들어 210). 예를 들어, 이차 서버(204)는 XML에 따라 포맷되는 데이터의 형태로 스위치 명령을 포함하는 (보안) 하이퍼텍스트 전송 프로토콜("HTTP(들)") 포스트 메시지를 발생시킬 수 있다. 페일오버 명령(210)의 예시적 리스팅은 실질적으로 XML 포맷 데이터를 포함하는 HTTP(들) 포스트 메시지의 형태로, 아래에 제공된다:
Figure pct00004
Figure pct00005
일부 실시예들에서, 명령 후에, 코드 실행은 이때 애플리케이션의 "발행" 또는 "기록" 코드가 콜드, 즉 최적화되지 않은 최적 코드 경로를 갖는 애플리케이션에 보낼 수 있다(예를 들어 211). 예를 들어, 코드 실행 요청(211)은 도 2를 참조하여 상기 설명된 바와 같이 XML에 따라 포맷되는 데이터의 형태로 "출력 기록" 명령을 포함하는 (보안) 하이퍼텍스트 전송 프로토콜("HTTP(들)") 포스트 메시지일 수 있다. 일부 실시예들에서, 코드 실행의 성능은 코드 경로의 일부 부분들이 최적화되지 않음에 따라, 이전에 일차의 것과 비교하여 열등할 수 있다. 예를 들어, 자바로 코딩되는 시스템들에서, 그리고 일단 스위치가 콜드 "기록" 코드를 갖는 코드 경로를 가진 이차 인스턴스로 행해지면, 자바는 코드 경로를 최적화, 즉 "워밍 업"하기 위해 코드 경로의 "기록" 코드의 반복들의 미리 결정된 그리고/또는 동적으로 결정된 임계 수를 통해, 그리고 웜 업 기간의 지속 시간 동안 애플리케이션을 늦추는 프로세스에서 실행하여, 스위치 전에 일차 인스턴스와 비교하여 성능의 저하를 야기할 수 있다(예를 들어 212).
일부 구현들에서, DSFM 시스템은 이차 및/또는 스탠바이 애플리케이션들이 코드들의 메시지 출력들의 발행을 포함하는 전체 코드 경로의 끝에 실행되는 것을 허용할 수 있다. 일부 구현들에서, 이것은 일차 및 이차 인스턴스들이 동일한 상태들을 유지하는 것을 허용하고, 일차 인스턴스에서의 실패의 경우에, 이차 인스턴스는 이전 일차 인스턴스가 취했을 것과 동일한 최적화 코드 경로를 따라 코드 실행에 개입하고 코드 실행을 진행할 수 있으므로, 성능의 저하가 없다(예를 들어 213). 예를 들어, 이차 인스턴스는 메시지 처리 경로가 자바 세그먼트의 끝에 실행되는 것을 허용하고 자바가 메시지 출력을 다음 단계에 기록하게 하지만, 이때 다음 단계가 시작하기 전에 경로를 정지시킬 수 있다. 이러한 실시예들에서, 전체 자바 경로는 일차 및 백업 애플리케이션들 둘 다에 의해 실행될 수 있고, 애플리케이션들 둘 다는 동일한 상태를 유지할 수 있다. 일부 실시예들에서, 일차 인스턴스가 이차 인스턴스로 페일오버될 필요가 있으면, 이차 인스턴스는 이차 인스턴스가 자바에 의해 최적화되고 일차 인스턴스와 같이 "워밍 업"되므로 성능의 저하 없이, 일차 인스턴스가 중단되는 경우를 즉시 픽업할 수 있다.
도 3은 DSFM 구성요소의 일 실시예를 통한 애플리케이션 실행에 대한 요청을 애플리케이션의 최적화되고 효율적인 실행으로 변환하는 예들을 예시하는 로직 흐름도를 도시한다. 일부 실시예들에서, 사용자는 애플리케이션을 실행하고(예를 들어 301), 애플리케이션의 하나의 코드를 실행함으로써 실행을 개시하기를 원할 수 있다. 일부 구현들에서, 이것은 코드의 실행의 제1 인스턴스일 수 있고, 코드의 컴파일링은 보증될 수 있다(예를 들어 302). 예를 들어, 바이트코드로 변환되는 자바 소스 코드는 JIT 컴파일러에 의해 머신 코드로 컴파일될 수 있다(예를 들어 303). 일부 실시예들에서, 컴파일화는 동적으로 수행될 수 있고/있거나 그것은 단지 하나의 전체 코드에(예를 들어, 호출된 코드의 메소드 등에) 수행될 수 있다. 애플리케이션이 실행을 시작하면(예를 들어 304), 일부 실시예들에서, 자바는 실행을 최적화하기 위해 코드의 실행을 감시하는 것을 시작할 수 있다(예를 들어 305). 예를 들어, 자바는 "핫스팟들"로 자주 칭해지며 그리고/또는 사용되는 메소드들, 함수들 등을 식별하기 전에 소수의 반복들을 기다릴 수 있다(예를 들어 306). 일부 구현들에서, 애플리케이션이 이러한 핫스팟들을 결정하기 위해 충분한 횟수로 실행되었다면, 핫스팟들은 추가 최적화를 위해 선발될 수 있다(예를 들어 309). 예를 들어, 이러한 메소드들, 함수들 등은 애플리케이션을 실행할 시에 효율 및 속도를 개선하기 위해, 커맨드들을 통합하고, 코드 요소들을 폐기하는 등 함으로써 더 효율적일 수 있다. 일부 구현들에서, 자바는 또한 자주 사용되는 코드 경로들을 식별하기 전에 다수의 반복들을 기다리고(예를 들어 307), 드물게 사용되는 외부 코드 경로들을 제거함으로써 개선된 효율을 위해 애플리케이션을 최적화/"준비"시킬 수 있다(예를 들어 310). 예를 들어, 경로가 10,000회 실행된 후에, 그것은 더 높은 우선순위를 수신할 수 있는 반면에, 드물게 사용되는 다른 경로들은 더 높은 우선순위 경로를 위해 폐기될 수 있다. 일부 구현들에서, 핫스팟들이 최적화되고, 높은 우선순위 코드 경로들이 식별되면, 애플리케이션의 실행은 더 효율적일 수 있다(예를 들어 311).
도 4는 애플리케이션 프로세스들의 리던던시에 의해 애플리케이션 최적화, 동기화 및 페일오버를 제공하는 예시적 DSFM 시스템을 예시하는 블록도들을 도시한다. 일부 구현들에서, 애플리케이션을 실행하기 위한 요청에 따라, DSFM 시스템은 애플리케이션, 예를 들어 401a-n(등가적으로 2개 이상의 동일한 애플리케이션들)의 적어도 2개의 인스턴스들의 실행을 개시할 수 있다. 일부 실시예들에서, 일차 및 이차/백업들로서 애플리케이션들의 이러한 인스턴스들의 임의의 상태 지정/라벨링이 있지 않을 수 있고, 각각의 애플리케이션 인스턴스는 메시징 버스/와이어에 의해 기록되는 동일한 또는 거의 동일한 메시지 출력들을 생성하기 위해 독립적으로 실행될 수 있다(406). 일부 실시예들에서, 시스템 처리(예를 들어, 소프트웨어, 하드웨어 등)에서의 작은 변화들은 동일한 애플리케이션(즉, 동등한 애플리케이션들)의 2개 이상의 인스턴스들에 의해 생성되는 이러한 메시지 출력들(402)이 비동시적으로 와이어에 기록되게 할 수 있다. 일부 구현들에서, 시퀀서는 도착 메시지들을 처리하고 하나의 출력을 애플리케이션의 메시지 출력으로 분류하고 나머지를 사본들로 분류할 수 있다. 예를 들어, 시퀀서(403)는 애플리케이션의 2개 이상의 인스턴스들 중 하나에 의해 와이어에 기록되는 하나의 메시지 출력을 유지되는 애플리케이션의 메시지 출력으로서 지정/라벨링하고, 애플리케이션들의 더 느린 인스턴스들에서 비롯되는 메시지 출력들의 나머지를 사본들로서 라벨(및 따라서, 예를 들어 폐기)할 수 있다. 일부 실시예들에서, 시퀀서는 어느 메시지들을 유지하는지 및 어느 메시지들이 사본들로서 라벨링하는지를 선택하는 기준들로 메시지들의 도착 시간을 이용할 수 있다. 예를 들어, 시퀀서는 애플리케이션의 메시지 출력으로 와이어 기록되는 제1 메시지를 선택하고 나머지를 폐기할 수 있다(예를 들어 404). 일부 구현들에서, 시퀀서는 애플리케이션의 메시지 출력으로서 유지되어야 하는 메시지를 결정하기 위해 도착 시간 대신에 또는 도착 시간과 조합하여 다른 기준들을 이용할 수 있다. 예를 들어, 일부 실시예들에서, 기준들은 메시지의 도착 시간, 메시지의 크기 등을 포함할 수 있다. 예를 들어, 시퀀서는 애플리케이션의 출력으로 유지되는 메시지가, 크기가 일부 임계 바이트 수 크기 미만인(그리고/또는 크기가 가장 작은 등인) 도착하는 제1 메시지인 기준을 이용할 수 있다.
일부 실시예들에서, 2개 이상의 동일한 또는 거의 동일한 애플리케이션들이 실행됨과 동시에, 시퀀서에 의해 유지되는 메시지들은, 어느 애플리케이션이 메시지 작성으로 "성취"할지가 메시지마다 변화됨에 따라, 상이한 애플리케이션들에서 비롯될 수 있다. 예를 들어, 도 5를 참조하여, 애플리케이션들을 실행하는 최종 메시지 출력은 시퀀서에 의해 다수의 동일한 또는 거의 동일한 애플리케이션들의 메시지 출력들로부터 결합될 수 있다. 예를 들어, N개의 애플리케이션들이 실행될 때, 애플리케이션 D의 메시지는 N개의 메시지들의 제1 배치로부터 도착할 첫 번째 것일 수 있다(예를 들어 501). N개의 메시지들의 제2 배치에서, 다른 애플리케이션(애플리케이션 K를 나타냄)의 메시지가 시퀀서에 도착할 첫 번째 것일 수 있다(예를 들어 502). 그러한 실시예들에서, 시퀀서(504)는 애플리케이션의 최종 메시지 출력에 도착하기 위해, 제1 배치 내의 애플리케이션 D로부터 메시지를 결합한 후에, 제2 배치 내의 애플리케이션 K로부터 메시지를 결합하는 등을 할 수 있다(예를 들어 505).
다수의 동일한 또는 거의 동일한 애플리케이션들이 실행되는 그러한 구현들에서, 리던던시는 메시징 버스/와이어 상에 메시지 트래픽을 야기할 수 있다. 예를 들어, N개의 동일한 또는 거의 동일한 애플리케이션들이 실행될 때, N개의 동일한 또는 거의 동일한 메시지 출력들이 있어서, 와이어에 대한 증가된 메시지 트래픽을 야기한다. 역으로, 리던던시는 시스템이 상기 설명된 바와 같이 가장 빠른 애플리케이션들로부터 메시지 출력들을 획득하는 이득을 얻음에 따라 성능 최적화를 위해 이용될 수 있다. 일부 구현들에서, 리던던시는 하나 이상의 애플리케이션들이 실패하는 경우들에서 장애 안전 메커니즘을 제공할 수 있다(예를 들어 405). 그러한 구현들에서, 실행 중인 하나 이상의 다른 애플리케이션들이 있음에 따라, 수동으로 그리고/또는 자동으로 중재하는 요구가 있지 않을 수 있고, 메시지 출력들은 이러한 하나 이상의 애플리케이션들로부터 획득될 수 있다(예를 들어 406).
따라서, 본원에 설명되는 다양한 실시예들은 코드의 성능을 해석된 그리고/또는 다른 언어들로, 예를 들어 임의적 저스트-인-타임(JIT) 컴파일 런타임들에 의해 증가시킬 수 있다. 적응 JIT 컴파일러들은 코드가 나중의 컴파일화 단계를 강화하기 위해 해석되고 프로파일링되는 동안에 더 느린 초기 성능의 기간의 대가로, 어헤드-오브-타임 및/또는 간단한 JIT 컴파일러들과 비교하여 장기 성능을 증가시킬 수 있다. 동일한 코드를 병렬로 2개 이상의 런타임들 상에 2개 이상의 비동일한 인스턴스들로 실행함으로써, 해석 단계 동안에 초기 성능을 희생시키는 것 없이 최적화 JIT 컴파일화의 이득들이 달성될 수 있다.
DSFM 컨트롤러
도 6은 DSFM 컨트롤러(601)의 예들을 예시하는 블록도를 도시한다. 이러한 실시예에서, DSFM 컨트롤러(601)는 다양한 기술들, 및/또는 다른 관련 데이터를 통해 컴퓨터와의 상호작용들을 집합, 처리, 저장, 검색, 서빙, 식별, 명령, 발생, 매칭, 및/또는 용이하게 하는 역할을 할 수 있다.
사람들 및/또는 다른 시스템들일 수 있는 사용자들, 예를 들어 633a는 정보 처리를 용이하게 하기 위해 정보 기술 시스템들(예를 들어, 컴퓨터들)을 결합할 수 있다. 결과적으로, 컴퓨터들은 정보를 처리하기 위해 프로세서들을 이용하며; 그러한 프로세서들(603)은 중앙 처리 유닛들(central processing units)(CPU)로서 언급될 수 있다. 하나의 형태의 프로세서는 마이크로프로세서로서 언급된다. CPU들은 다양한 동작들을 가능하게 하기 위해 명령들의 역할을 하는 이진 인코딩 신호들을 전달하기 위해 통신 회로들을 사용한다. 이러한 명령들은 메모리(629)(예를 들어, 레지스터들, 캐시 메모리, 랜덤 액세스 메모리 등)의 다양한 프로세서 액세스가능 및 동작가능 영역들 내의 다른 명령들 및 데이터를 포함하고/하거나 참조하는 동작 및/또는 데이터 명령들일 수 있다. 그러한 통신 명령들은 원하는 동작들을 용이하게 하기 위해 프로그램들 및/또는 데이터 구성요소들로 배치들(예를 들어, 명령들의 배치들)에 저장 및/또는 송신될 수 있다. 이러한 저장된 명령 코드들, 예를 들어 프로그램들은 원하는 동작들을 수행하기 위해 CPU 회로 구성요소들 및 다른 (머더)보드(들) 및/또는 시스템 구성요소들을 결합할 수 있다. 하나의 타입의 프로그램은 컴퓨터 상의 CPU에 의해 실행될 수 있는 컴퓨터 운영 체제이며; 운영 체제는 사용자들이 컴퓨터 정보 기술 및 자원들을 액세스하고 동작시키는 것을 가능하게 하고 용이하게 한다. 정보 기술 시스템들에 이용될 수 있는 일부 자원들은 데이터가 컴퓨터 내로 및 외로 전달될 수 있는 입력 및 출력(input and output)(I/O) 메커니즘들; 데이터가 저장될 수 있는 메모리 스토리지; 및 정보가 처리될 수 있는 프로세서들을 포함한다. 이러한 정보 기술 시스템들은 데이터베이스 프로그램을 통해 용이하게 될 수 있는 나중의 검색, 분석, 및 조작을 위한 데이터를 수집하기 위해 사용될 수 있다. 이러한 정보 기술 시스템들은 사용자들이 다양한 시스템 구성요소들을 액세스하고 동작시키는 것을 허용하는 인터페이스들을 제공한다.
일 실시예에서, DSFM 컨트롤러(601)는 사용자 입력 디바이스들(611)로부터의 하나 이상의 사용자들; 주변 디바이스들(612); 임의적 암호 프로세서 디바이스(628); 및/또는 통신 네트워크(613)와 같지만, 이들에 제한되지 않는 엔티티들에 연결될 수 있고/있거나 엔티티들과 통신할 수 있다. 예를 들어, DSFM 컨트롤러(601)는 사용자들, 예를 들어 633a, 개인용 컴퓨터(들), 서버(들)를 포함하지만, 이들에 제한되지 않는 운영 클라이언트 디바이스(들), 예를 들어 633b 및/또는 휴대 전화(들), 스마트폰(들)(예를 들어, iPhone®, Blackberry®, 안드로이드 OS 기반 전화들 등), 태블릿 컴퓨터(들)(예를 들어, 애플 iPad™, HP Slate™, 모토롤라 Xoom™ 등), 전자책 리더(들)(예를 들어, 아마존 Kindle™, 반드 앤 노블의 Nook™ eReader 등), 랩톱 컴퓨터(들), 노트북(들), 넷북(들), 게임 콘솔(들)(예를 들어, XBOX Live™, Nintendo® DS, 소니 PlayStation® 포터블 등), 휴대용 스캐너(들), 및/또는 유사한 것을 포함하지만, 이들에 제한되지 않는 다양한 모바일 디바이스(들)에 연결될 수 있고/있거나 이들과 통신할 수 있다.
네트워크들은 그래프 토폴로지에 클라이언트들, 서버들, 및 중개 노드들의 상호연결 및 상호작용을 포함하는 것으로 통상 생각된다. 본 명세서 도처에서 사용되는 바와 같은 용어 "서버"는 일반적으로 통신 네트워크에 걸친 원격 사용자들의 요청들을 처리하고 요청들에 응답하는 컴퓨터, 다른 디바이스, 프로그램, 또는 그것의 조합을 언급한다는 점이 주목되어야 한다. 서버들은 그들의 정보를 요청 "클라이언트들"에 서빙한다. 본원에 사용되는 바와 같은 용어 "클라이언트"는 일반적으로 요청들을 처리하고 요청들을 하며 통신 네트워크에 걸친 서버들로부터 임의의 응답들을 획득하고 처리할 수 있는 컴퓨터, 프로그램, 다른 디바이스, 사용자 및/또는 그것의 조합을 언급한다. 정보 및 요청들을 용이하게 하고, 처리하고/하거나, 소스 사용자로부터 목적지 사용자로 정보의 전달을 촉진하는 컴퓨터, 다른 디바이스, 프로그램, 또는 그것의 조합은 "노드"로 통상 언급된다. 네트워크들은 일반적으로 소스 지점들로부터 목적지들로 정보의 전달을 용이하게 하는 것으로 생각된다. 소스로부터 목적지로 정보의 전달을 촉진하는 작업이 구체적으로 주어지는 노드는 "라우터"로 통상 칭해진다. 많은 형태들의 네트워크들 예컨대 근거리 네트워크들(Local Area Networks)(LANs), 피코 네트워크들, 광역 네트워크들(Wide Area Networks)(WANs), 무선 네트워크들(Wireless Networks)(WLANs) 등이 있다. 예를 들어, 인터넷은 일반적으로 원격 클라이언트들 및 서버들이 서로 액세스하고 상호동작하는 다수의 네트워크들의 상호연결인 것으로서 허용된다.
DSFM 컨트롤러(601)는 메모리(629)에 연결되는 컴퓨터 시스템(602)과 같은 구성요소들을 포함하지만, 이들에 제한되지 않은 컴퓨터 시스템들에 기초할 수 있다.
컴퓨터 시스템(602)은 전형적으로 클록(630), 중앙 처리 유닛("CPU(들)" 및/또는 "프로세서(들)"(이러한 용어들은 반대로 언급되지 않는 한 본 개시내용 도처에서 교환가능하게 사용됨))(603), 메모리(629)(예를 들어, 판독 전용 메모리(read only memory)(ROM)(606), 랜덤 액세스 메모리(random access memory)(RAM)(605) 등), 및/또는 인터페이스 버스(607)를 포함하고, 가장 빈번하게, 반드시 그런 것은 아니지만, 명령들(예를 들어, 이진 인코딩 신호들)이 통신들, 동작들, 저장 등을 달성하기 위해 이동할 수 있는 전도 및/또는 다른 수송 회로 경로들을 갖는 하나 이상의 (머더)보드(들)(602) 상의 시스템 버스(604)을 통해 모두 상호연결되고/되거나 통신하고 있다. 컴퓨터 시스템은 전력 소스(686)에 연결될 수 있고; 예를 들어, 임의로 전력 소스는 내부에 있을 수 있다. 임의로, 암호 프로세서(626) 및/또는 송수신기들(예를 들어, IC들)(674)은 시스템 버스에 연결될 수 있다. 다른 실시예에서, 암호 프로세서 및/또는 송수신기들은 인터페이스 버스 I/O를 통해 내부 및/또는 외부 주변 디바이스들(612)로 연결될 수 있다. 결과적으로, 송수신기들은 안테나(들)(675)에 연결되는 것에 의해, 다양한 통신 및/또는 센서 프로토콜들의 무선 송신 및 수신을 달성할 수 있으며; 예를 들어, 안테나(들)는 텍사스 인스트루먼츠 와이링크 WL1283 송수신기 칩(예를 들어, 802.11n, 블루투스 3.0, FM, 위성 위치 확인 시스템(global positioning system)(GPS)(그것에 의해 DSFM 컨트롤러가 그것의 위치를 결정하는 것을 허용함)를 제공함); 브로드컴 BCM4329FKUBG 송수신기 칩(예를 들어, 802.11n, 블루투스 2.1 + EDR, FM 등을 제공함), BCM28150(HSPA+) 및 BCM2076(블루투스 4.0, GPS 등); 브로드컴 BCM4750IUB8 수신기 칩(예를 들어, GPS); 인피니온 기술들 X-골드 618-PMB9800(예를 들어, 2G/3G HSDPA/HSUPA 통신들을 제공함); 인텔의 XMM 7160(LTE & DC-HSPA), 퀄컴의 CDMA(2000), 모바일 데이터/스테이션 모뎀, 스냅드래곤; 및/또는 유사한 것에 연결될 수 있다. 시스템 클록은 수정 발진기를 가질 수 있고 컴퓨터 시스템의 회로 경로들을 통해 베이스 신호를 발생시킨다. 클록은 컴퓨터 시스템에 상호연결되는 다른 구성요소들에 대한 기초 동작 주파수를 감소시키거나 증가시키는 시스템 버스 및 다양한 클록 멀티플라이어들에 결합될 수 있다. 컴퓨터 시스템 내의 클록 및 다양한 구성요소들은 시스템 도처에서 정보를 구체화하는 신호들을 구동한다. 컴퓨터 시스템 도처에서 정보를 구체화하는 명령들의 그러한 송신 및 수신은 통신들로서 언급될 수 있다. 이러한 통신 명령들은 통신 네트워크들, 입력 디바이스들, 다른 컴퓨터 시스템들, 주변 디바이스들, 및/또는 유사한 것에 추가로 송신되고, 수신되고, 인스턴트 컴퓨터 시스템을 지난 복귀 및/또는 응답 통신들의 원인일 수 있다. 대안 실시예들에서, 상기 구성요소들 중 어느 것은 서로에 직접 연결되고, CPU에 연결되고/되거나, 다양한 컴퓨터 시스템들에 의해 예시되는 바와 같이 이용되는 다수의 변형들로 조직될 수 있다는 점이 이해되어야 한다.
CPU는 사용자 및/또는 시스템 발생 요청들을 실행하는 프로그램 구성요소들을 실행하는데 적절한 적어도 하나의 고속 데이터 프로세서를 포함할 수 있다. 종종, 프로세서들 자체는 부동 소수점 유닛들, 정수 처리 유닛들, 통합 시스템(버스) 컨트롤러들, 로직 연산 유닛들, 메모리 관리 제어 유닛들 등과 같지만, 이들에 제한되지 않는 다양한 특수 처리 유닛들 및 그래픽 처리 유닛들, 디지털 신호 처리 유닛들, 및/또는 유사한 것과 같은 대등한 특수 처리 서브유닛들을 포함할 것이다. 부가적으로, 프로세서들은 내부 고속 액세스 어드레스가능 메모리를 포함하고, 프로세서 자체를 지나 메모리(629)를 매핑하고 어드레싱가능할 수 있으며; 내부 메모리는 고속 레지스터들, 캐시 메모리의 다양한 레벨들(예를 들어, 레벨 1, 2, 3 등), RAM 등을 포함할 수 있지만, 이들에 제한되지 않는다. 프로세서는 프로세서가 구성하고 디코딩할 수 있는 명령 어드레스를 통해 액세스가능한 메모리 어드레스 공간의 사용을 통해 이러한 메모리에 액세스하여 그것이 메모리 상태/값을 갖는 특정 메모리 어드레스 공간에 대한 회로 경로에 액세스하는 것을 허용할 수 있다. CPU는 마이크로프로세서 예컨대 AMD의 애슬론, 듀론 및/또는 옵테론; ARM의 클래식 (예를 들어, ARM7/9/11), 내장 (Coretx-M/R), 애플리케이션 (Cortex-A), 및 보안 프로세서들; IBM 및/또는 모토롤라의 드래곤볼 및 파워PC; IBM의 및 소니의 셀 프로세서; 인텔의 아톰, 셀러론 (모바일), 코어(2/Duo/i3/i5/i7), 아이타니엄, 펜티엄, 제온, 및/또는 엑스스케일; 및/또는 유사한 프로세서(들)일 수 있다. CPU는 저장된 명령들(즉, 프로그램 코드)을 실행하기 위해 전도 및/또는 수송 도관들(예를 들어, (인쇄) 전자 및/또는 광 회로들)을 통과하는 명령을 통해 메모리와 상호작용한다. 그러한 명령 통과는 DSFM 컨트롤러 내에서 및 다양한 인터페이스들을 지나 통신을 용이하게 한다. 처리 요건들이 더 많은 속도 및/또는 용량을 지시하면, 분산 프로세서들(예를 들어, 분산 DSFM 시스템/컨트롤러), 메인프레임, 멀티코어, 병렬, 및/또는 슈퍼 컴퓨터 아키텍처들은 유사하게 이용될 수 있다. 대안으로, 전개 요건들이 더 큰 이식성을 지시하면, 더 작은 모바일 디바이스들(예를 들어, 스마트폰들, 개인 휴대 정보 단말기들(Personal Digital Assistants)(PDAs) 등)이 이용될 수 있다.
특정 구현에 따라, DSFM 시스템의 특징들은 마이크로컨트롤러 예컨대 캐스트의 R8051XC2 마이크로컨트롤러; 인텔의 MCS 51(즉, 8051 마이크로컨트롤러); 및/또는 유사한 것을 구현함으로써 달성될 수 있다. 또한, DSFM 시스템의 특정 특징들을 구현하기 위해, 일부 특징 구현들은 내장 구성요소들, 예컨대 주문형 집적 회로(Application-Specific Integrated Circuit)("ASIC"), 디지털 신호 처리(Digital Signal Processing)("DSP"), 필드 프로그램가능 게이트 어레이(Field Programmable Gate Array)("FPGA"), 및/또는 유사한 내장 기술에 의존할 수 있다. 예를 들어, DSFM 구성요소 집합(분산 또는 다른, 예를 들어 IMAS 341 등) 및/또는 특징들 중 어느 것은 마이크로프로세서를 통해 그리고/또는 내장 구성요소들을 통해; 예를 들어 ASIC, 코프로세서, DSP, FPGA, 및/또는 유사한 것을 통해 구현될 수 있다. 대안으로, DSFM 시스템의 일부 구현들은 다양한 특징들 또는 신호 처리를 달성하도록 구성되고 사용되는 내장 구성요소들에 의해 구현될 수 있다.
특정 구현에 따라, 내장 구성요소들은 소프트웨어 솔루션들, 하드웨어 솔루션들, 및/또는 하드웨어/소프트웨어 솔루션들 둘 다의 일부 조합을 포함할 수 있다. 예를 들어, 본원에서 논의되는 DSFM 시스템 특징들은 FPGA들을 구현하는 것을 통해 달성될 수 있으며, FPGA들은 "로직 블록들"로 칭해지는 프로그램가능 로직 구성요소들, 및 프로그램가능 인터커넥트들을 포함하는 반도체 디바이스들, 예컨대 자이링스에 의해 제조되는 고성능 FPGA 버텍스 시리즈 및/또는 저비용 스파르탄 시리즈이다. 로직 블록들 및 인터커넥트들은 DSFM 시스템 특징들 중 어느 것을 구현하도록, FPGA가 제조된 후에, 고객 또는 설계자에 의해 프로그래밍될 수 있다. 프로그램가능 인터커넥트들의 계층은 원칩 프로그램가능 브레드보드와 다소 비슷하게, 로직 블록들이 DSFM 시스템 설계자/관리자에 의해 요구되는 바와 같이 상호연결되는 것을 허용한다. FPGA의 로직 블록들은 기본 로직 게이트들의 연산 예컨대 AND, 및 XOR, 또는 더 복잡한 조합 연산자들 예컨대 디코더들 또는 간단한 수학 연산들을 수행하기 위해 프로그래밍될 수 있다. 대부분의 FPGA들에서, 로직 블록들은 또한 메모리 소자들을 포함하며, 메모리 소자들은 메모리의 회로 플립 플롭들 또는 더 완전한 블록들일 수 있다. 일부 상황들에서, DSFM 시스템은 정규 FPGA들 상에 전개되고 그 다음에 ASIC 구현들과 더 비슷한 고정 버전으로 이동될 수 있다. 대체 또는 조정 구현들은 FPGA들 대신에 또는 FPGA들에 더하여 하나 이상의 DSFM 컨트롤러 특징들을 최종 ASIC으로 이동시킬 수 있다. 구현에 따라, 상술된 내장 구성요소들 및 마이크로프로세서들의 모두는 DSFM 시스템을 위한 "CPU" 및/또는 "프로세서"로서 간주될 수 있다.
전력 소스(686)는 작은 전자 회로 보드 디바이스들에 전력을 공급하는 임의의 표준 형태 예컨대 이하의 전력 셀들: 알카라인, 수소화 리튬, 리튬 이온, 리튬 폴리머, 니켈 카드뮴, 태양 전지들, 및/또는 유사한 것일 수 있다. 다른 타입들의 AC 또는 DC 전력 소스들이 또한 사용될 수 있다. 태양 전지들의 경우에, 일 실시예에서, 그 경우는 태양 전지가 광자 에너지를 캡처할 수 있는 애퍼처를 제공한다. 전력 셀(686)은 DSFM 시스템의 상호연결 후속 구성요소들 중 적어도 하나에 연결되는 것에 의해 전기 전류를 모든 그들의 상호연결 구성요소들에 제공한다. 일 예에서, 전력 소스(686)는 시스템 버스 구성요소(604)에 연결된다. 대안 실시예에서, 외부 전력 소스(686)는 I/O 608 인터페이스에 걸친 연결을 통해 제공된다. 예를 들어, USB 및/또는 IEEE 1394 연결은 연결에 걸쳐 데이터 및 전력 둘 다를 운반하고 따라서 적절한 전력 소스이다.
인터페이스 버스(들)(607)는 자주, 반드시 어댑터 카드들의 형태는 아니지만, 입력 출력 인터페이스들(I/O들)(608), 저장 인터페이스들(609), 네트워크 인터페이스들(610), 및/또는 유사한 것과 같지만 이들에 제한되지 않는 다수의 인터페이스 어댑터들에 허용, 연결, 및/또는 통신될 수 있다. 임의로, 암호 프로세서 인터페이스들(627)은 유사하게 인터페이스 버스에 연결될 수 있다. 인터페이스 버스는 인터페이스 어댑터들의 통신들을 서로에 제공할 뿐만 아니라 컴퓨터 시스템의 다른 구성요소들에 제공한다. 인터페이스 어댑터들은 호환가능 인터페이스 버스를 위해 적응된다. 인터페이스 어댑터들은 확장 및/또는 슬롯 아키텍처를 통해 인터페이스 버스에 연결될 수 있다. 가속 그래픽 포트(Accelerated Graphics Port)(AGP), 카드 버스, 익스프레스카드, (확장) 산업 표준 아키텍처((Extended) Industry Standard Architecture)((E)ISA), 마이크로 채널 아키텍처(Micro Channel Architecture)(MCA), NuBus, 주변 구성요소 상호연결(확장)(Peripheral Component Interconnect(Extended))(PCI(X)), PCI 익스프레스, 개인용 컴퓨터 메모리 카드 국제 협회(Personal Computer Memory Card International Association)(PCMCIA), 선더볼트, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 다양한 확장 및/또는 슬롯 아키텍처들이 이용된다.
저장 인터페이스들(609)은 저장 디바이스들(614), 제거식 디스크 디바이스들, 및/또는 유사한 것과 같지만, 이들제 제한되지 않는 다수의 저장 디바이스들에 허용, 통신, 및/또는 연결될 수 있다. 저장 인터페이스들은 (울트라) (직렬) 고급 기술 결합(패킷 인터페이스)((Ultra) (Serial) Advanced Technology Attachment(Packet Interface))(ATA(PI)), (강화된) 통합 드라이브 전자((Enhanced) Integrated Drive Electronics)((E)IDE), 미국 전기 전자 학회(Institute of Electrical and Electronics Engineers)(IEEE) 1394, 이더넷, 파이버 채널, 소형 컴퓨터 시스템 인터페이스(Small Computer Systems Interface)(SCSI), 선더볼트, 범용 직렬 버스(Universal Serial Bus)(USB), 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 연결 프로토콜들을 이용할 수 있다.
네트워크 인터페이스들(610)은 통신 네트워크(613)에 허용, 통신, 및/또는 통신 네트워크에 연결될 수 있다. 통신 네트워크(613)를 통해, DSFM 컨트롤러는 원격 클라이언트들(633b)(예를 들어, 웹 브라우저들을 갖는 컴퓨터들)을 통해 사용자들(633a)에 의해 액세스가능하다. 네트워크 인터페이스들은 직접 연결, 이더넷(씩(thick), 씬(thin), 트위스트 페어 10/100/1000 베이스 T, 및/또는 유사한 것), 토큰 링, 무선 연결 예컨대 IEEE 802.11a-x, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 연결 프로토콜들을 이용할 수 있다. 처리 요건들이 더 많은 속도 및/또는 용량을 지적하면, 분산 네트워크 컨트롤러들(예를 들어, 분산 DSFM 시스템), 아키텍처들은 DSFM 컨트롤러에 의해 요구되는 통신 대역폭을 풀링, 로드 밸런싱, 및/또는 다른 방법으로 증가시키기 위해 유사하게 이용될 수 있다. 통신 네트워크는 이하 중 어느 하나 및/또는 조합일 수 있다: 직접 상호연결; 인터넷; 근거리 네트워크(LAN); 도시권 통신 네트워크(Metropolitan Area Network)(MAN); 인터넷 상의 노드들로서 운영 미션들(Operating Missions as Nodes on the Internet)(OMNI); 보안 맞춤 연결; 광역 네트워크(WAN); 무선 네트워크(예를 들어, 무선 애플리케이션 프로토콜(Wireless Application Protocol)(WAP), I 모드, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 프로토콜들을 이용함); 및/또는 유사한 것. 네트워크 인터페이스는 입력 출력(I/O) 인터페이스의 특수 형태로 간주될 수 있다. 게다가, 다수의 네트워크 인터페이스들(610)은 다양한 통신 네트워크 타입들(613)과 결합하기 위해 사용될 수 있다. 예를 들어, 다수의 네트워크 인터페이스들은 브로드캐스트, 멀티캐스트, 및/또는 유니캐스트 네트워크들을 통한 통신을 허용하기 위해 이용될 수 있다.
입력 출력 인터페이스들(I/O들)(608)은 사용자 입력 디바이스들(611), 주변 디바이스들(612), 암호 프로세서 디바이스들(628), 및/또는 유사한 것에 허용, 전달, 및/또는 연결될 수 있다. I/O들은 오디오: 아날로그, 디지털, 노모럴, RCA, 스테레오, 및/또는 유사한 것; 데이터: 애플 데스크톱 버스(Apple Desktop Bus)(ADB), 블루투스, IEEE 1394a-b, 직렬, 범용 직렬 버스(USB); 적외선; 조이스틱; 키보드; 미디; 광; PC AT; PS/2; 병렬; 무선; 비디오 인터페이스: 애플 데스크톱 커넥터(Apple Desktop Connector)(ADC), BNC, 동축, 컴포넌트, 복합, 디지털, 디스플레이포트, 디지털 비주얼 인터페이스(Digital Visual Interface)(DVI), 고선명 멀티미디어 인터페이스(high-definition multimedia interface)(HDMI), RCA, RF 안테나들, S-비디오, VGA, 및/또는 유사한 것; 무선 송수신기들: 802.11a/b/g/n/x; 블루투스; 셀룰러(예를 들어, 코드 분할 다중 액세스(code division multiple access)(CDMA), 고속 패킷 액세스(high speed packet access)(HSPA(+)), 고속 다운링크 패킷 액세스(high-speed downlink packet access)(HSDPA), 이동 통신 시스템(global system for mobile communications)(GSM), 롱 텀 에볼루션(long term evolution)(LTE), WiMax 등); 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 연결 프로토콜들을 이용할 수 있다. 하나의 출력 디바이스는 비디오 디스플레이일 수 있으며, 비디오 디스플레이는 음극선관(Cathode Ray Tube)(CRT), 액정 디스플레이(Liquid Crystal Display)(LCD), 발광 다이오드(Light Emitting Diode)(LED), 유기 발광 다이오드(Organic Light Emitting Diode)(OLED), 플라즈마, 및/또는 비디오 인터페이스로부터 신호들을 허용하는 인터페이스(예를 들어, VGA, DVI 회로 및 케이블)를 갖는 유사한 베이스 모니터의 형태를 취할 수 있다. 비디오 인터페이스는 컴퓨터 시스템에 의해 발생되는 정보를 합성하고 비디오 메모리 프레임 내의 합성된 정보에 기초하여 비디오 신호들을 발생시킨다. 다른 출력 디바이스는 텔레비전 세트이며, 텔레비전 세트는 비디오 인터페이스로부터 신호들을 허용한다. 종종, 비디오 인터페이스는 비디오 디스플레이 인터페이스(예를 들어, RCA 복합 비디오 케이블을 허용하는 RCA 복합 비디오 커넥터; DVI 디스플레이 케이블을 허용하는 DVI 커넥터, HDMI 등)를 허용하는 비디오 연결 인터페이스를 통해 복합 비디오 정보를 제공한다.
사용자 입력 디바이스들(611)은 종종 일 타입의 주변 디바이스(612)이고(아래 참조) 카드 리더들, 동글들, 핑거 프린트 리더들, 글러브들, 그래픽 태블릿들, 조이스틱들, 키보드들, 마이크로폰들, 마우스들, 리모트 컨트롤들, 망막 리더들, 터치 스크린들(예를 들어, 용량성, 저항성 등), 트랙볼들, 트랙패드들, 센서들(예를 들어, 가속도계들, 주위 광, GPS, 자이로스코프들, 근접 등), 스타일러스들, 및/또는 유사한 것을 포함할 수 있다.
주변 디바이스들(612)은 I/O들 및/또는 유사한 것의 다른 수단들 예컨대 네트워크 인터페이스들, 저장 인터페이스들에 연결되고/되거나 전달되며, 인터페이스 버스, 시스템 버스, CPU, 및/또는 유사한 것에 직접 연결될 수 있고/있거나 전달될 수 있다. 주변 디바이스들은 DSFM 컨트롤러의 외부에, 내부에 있을 수 있고/있거나 일부일 수 있다. 주변 디바이스들은 안테나들, 오디오 디바이스들(예를 들어, 라인 인, 라인 아웃, 마이크로폰 입력, 스피커들 등), 카메라들(예를 들어, 스틸, 비디오, 웹캠 등), 동글들(예를 들어, 카피 보호, 디지털 서명에 의해 보안 트랜잭션들을 보장하는 것, 및/또는 유사한 것을 위함), 외부 프로세서들(추가된 능력들을 위함; 예를 들어, 암호 디바이스들(628)), 포스 피드백 디바이스들(예를 들어, 진동 모터들), 근접장 통신(near field communication)(NFC) 디바이스들, 네트워크 인터페이스들, 프린터들, 무선 주파수 식별자들(radio frequency identifiers)(RFIDs), 스캐너들, 저장 디바이스들, 송수신기들(예를 들어, 셀룰러, GPS 등), 비디오 디바이스들(예를 들어, 고글들, 모니터들 등), 비디오 소스들, 바이저들, 및/또는 유사한 것을 포함할 수 있다. 주변 디바이스들은 종종 입력 디바이스들(예를 들어, 마이크로폰들, 카메라들 등)의 타입들을 포함한다.
사용자 입력 디바이스들 및 주변 디바이스들이 이용될 수 있지만, DSFM 컨트롤러는 내장, 전용, 및/또는 모니터 없는(즉, 헤드리스) 디바이스로 구체화될 수 있으며, 액세스는 네트워크 인터페이스 연결을 통해 제공된다는 점이 주목되어야 한다.
마이크로컨트롤러들, 프로세서들(626), 인터페이스들(627), 및/또는 디바이스들(628) 등과 같지만, 이들에 제한되지 않는 암호 유닛들은 DSFM 컨트롤러에 부착될 수 있고/있거나, 이 컨트롤러와 통신할 수 있다. 모토롤라 인크에 의해 제조되는 MC68HC16 마이크로컨트롤러는 암호 유닛들을 위해 그리고/또는 암호 유닛들 내에 사용될 수 있다. MC68HC16 마이크로컨트롤러는 16 MHz 구성에서 16비트 승산 누적 명령을 이용하고 512비트 RSA 개인 키 동작을 수행하기 위해 1초 미만을 필요로 한다. 암호 유닛들은 익명 트랜잭션들을 허용할 뿐만 아니라, 상호작용 에이전트들로부터 통신들의 인증을 지원한다. 암호 유닛들은 또한 CPU의 일부로 구성될 수 있다. 등가 마이크로컨트롤러들 및/또는 프로세서들이 또한 사용될 수 있다. 다른 상업적으로 이용가능한 특수 암호 프로세서들은 브로드컴의 CryptoNetX 및 다른 보안 프로세서들; 엔사이퍼의 엔쉴드(예를 들어, 솔로, 커넥트 등), 세이프넷의 루나 PCI(예를 들어, 7100) 시리즈; 세마포르 커뮤니케이션즈의 40 MHz 로드러너 184; sMIP의(예를 들어, 208956); 썬의 암호 가속도계들(예를 들어, 가속도계 6000 PCIe 보드, 가속도계 500 도터카드); 암호 명령들의 500+ MB/s를 수행할 수 있는 /(예를 들어, L2100, L2200, U2400) 라인; VLSI 테크놀로지의 33 MHz 6868; 및/또는 유사한 것을 포함한다.
일반적으로, 프로세서가 정보의 저장 및/또는 검색에 미치는 것을 허용하는 임의의 기계화 및/또는 실시예는 메모리(629)로 간주된다. 그러나, 메모리는 대체가능 기술 및 자원이며, 따라서 임의의 수의 메모리 실시예들은 서로 대신에 또는 서로 협력하여 이용될 수 있다. DSFM 컨트롤러 및/또는 컴퓨터 시스템은 다양한 형태들의 메모리(629)을 이용할 수 있다는 점이 주목되어야 한다. 예를 들어, 컴퓨터 시스템이 구성될 수 있으며 온칩 CPU 메모리(예를 들어, 레지스터들), RAM, ROM, 및 임의의 다른 저장 디바이스들의 동작은 페이퍼 펀치 테이프 또는 페이퍼 펀치 카드 메커니즘에 의해 제공되지만; 그러한 일 실시예는 극히 느린 동작 속도를 야기할 것이다. 일 구성에서, 메모리(629)는 ROM(606), RAM(605), 및 저장 디바이스(614)를 포함할 것이다. 저장 디바이스(614)는 임의의 수의 컴퓨터 저장 디바이스들/시스템들을 이용할 수 있다. 저장 디바이스들은 드럼; (고정 및/또는 제거식) 자기 디스크 드라이브; 광 자기 드라이브; 광 드라이브(즉, 블루레이, CD ROM/RAM/기록가능(Recordable)(R)/재기록가능(ReWritable)(RW), DVD R/RW, HD DVD R/RW 등); 디바이스들의 어레이(예를 들어, 복수 배열 독립 디스크들(Redundant Array of Independent Disks)(RAID)); 고체 상태 메모리 디바이스들(USB 메모리, 고체 상태 드라이브들(solid state drives)(SSD) 등); 다른 프로세서 판독가능 저장 매체들; 및/또는 유사한 것의 다른 디바이스들을 포함할 수 있다. 따라서, 컴퓨터 시스템은 일반적으로 메모리를 필요로 하고 이용한다.
메모리(629)는 운영 체제 구성요소(들)(615)(운영 체제); 정보 서버 구성요소(들)(616)(정보 서버); 사용자 인터페이스 구성요소(들)(617)(사용자 인터페이스); 웹 브라우저 구성요소(들)(618)(웹 브라우저); 데이터베이스(들)(619); 메일 서버 구성요소(들)(621); 메일 클라이언트 구성요소(들)(622); 암호 서버 구성요소(들)(620)(암호 서버); DSFM 구성요소(들)(635); 및/또는 유사한 것(즉, 집합적으로 구성요소 집합)과 같지만, 이들에 제한되지 않는 프로그램 집합 및/또는 데이터베이스 구성요소들 및/또는 데이터를 포함할 수 있다. 이러한 구성요소들은 저장 디바이스들로부터 그리고/또는 인터페이스 버스를 통해 액세스가능한 저장 디바이스들로부터 저장되고 액세스될 수 있다. 구성요소 집합 내의 것들과 같은 비통상적 프로그램 구성요소들은 로컬 저장 디바이스(614)에 저장될 수 있지만, 그들은 또한 메모리 예컨대: 주변 디바이스들, RAM, 통신 네트워크를 통한 원격 저장 수단들, ROM, 다양한 형태들의 메모리, 및/또는 유사한 것에 로딩될 수 있고/있거나 저장될 수 있다.
운영 체제 구성요소(615)는 DSFM 컨트롤러의 동작을 용이하게 하는 실행가능 프로그램 구성요소이다. 운영 체제는 I/O들, 네트워크 인터페이스들, 주변 디바이스들, 저장 디바이스들, 및/또는 유사한 것의 액세스를 용이하게 할 수 있다. 운영 체제는 높은 고장 허용, 스케일가능, 및 보안 시스템: 예컨대 애플 매킨토시 OS X(서버); AT&T 플랜 9; Be OS; 유닉스 및 유닉스 유사 시스템 디스트리뷰션들(예컨대 AT&T의 유닉스; 버클리 소프트웨어 디스트리뷰션(Berkley Software Distribution)(BSD) 변형들 예컨대 FreeBSD, NetBSD, OpenBSD, 및/또는 유사한 것; 리눅스 디스트리뷰션들 예컨대 레드 햇, 우분투, 및/또는 유사한 것); 및/또는 유사한 운영 체제들일 수 있다. 그러나, 더 제한된 및/또는 덜 안전한 운영 체제들 예컨대 애플 매킨토시 OS, IBM OS/2, 마이크로소프트 도스, 마이크로소프트 윈도우즈 2000/2003/3.1/95/98/CE/밀레니엄/NT/비스타/XP(서버), 팜 OS, 및/또는 유사한 것이 또한 이용될 수 있다. 게다가, 모바일 운영 체제들 예컨대 애플의 iOS, 구글의 안드로이드, 휴렛 패커드의 웹OS, 마이크로소프트 윈도우즈 모바일 등이 이용될 수 있다. 이러한 운영 체제들 중 어느 것은 DSFM 컨트롤러의 하드웨어 내에 내장되고, 및/또는 메모리/스토리지로 저장/로딩될 수 있다. 운영 체제는 그 자체, 및/또는 유사한 것을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, 운영 체제는 다른 프로그램 구성요소들, 사용자 인터페이스들, 및/또는 유사한 것과 통신한다. 예를 들어, 운영 체제는 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 및/또는 응답들을 포함, 전달, 발생, 획득, 및/또는 제공할 수 있다. 운영 체제는 CPU에 의해 실행되면, 통신 네트워크들, 데이터, I/O들, 주변 디바이스들, 프로그램 구성요소들, 메모리, 사용자 입력 디바이스들, 및/또는 유사한 것과의 상호작용을 가능하게 할 수 있다. 운영 체제는 DSFM 컨트롤러가 통신 네트워크(613)를 통해 다른 엔티티들과 통신하는 것을 허용하는 통신 프로토콜들을 제공할 수 있다. 다양한 통신 프로토콜들은 멀티캐스트, TCP/IP, UDP, 유니캐스트, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 상호작용을 위한 서브캐리어 전송 메커니즘으로 DSFM 컨트롤러에 의해 사용될 수 있다.
정보 서버 구성요소(616)는 CPU에 의해 실행되는 저장된 프로그램 구성요소이다. 정보 서버는 아파치 소프트웨어 재단의 아파치, 마이크로소프트의 인터넷 정보 서버, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 인터넷 정보 서버일 수 있다. 정보 서버는 수단들 예컨대 액티브 서버 페이지(Active Server Page)(ASP), 액티브엑스, (ANSI) (오브젝티브-) C(++), C# 및/또는 .NET, 공통 게이트웨이 인터페이스(Common Gateway Interface)(CGI) 스크립트들, 동적(dynamic)(D) 하이퍼텍스트 마크업 언어(hypertext markup language)(HTML), 플래시, 자바, 자바스크립트, 실용적인 추출 보고용 언어(Practical Extraction Report Language)(PERL), 하이퍼텍스트 프리프로세서(Hypertext Pre-Processor)(PHP), 파이프들, 파이선, 무선 애플리케이션 프로토콜(WAP), 웹객체들, 및/또는 유사한 것을 통해 프로그램 구성요소들의 실행을 허용할 수 있다. 정보 서버는 파일 전송 프로토콜(File Transfer Protocol)(FTP); 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol)(HTTP); 보안 하이퍼텍스트 전송 프로토콜(Secure Hypertext Transfer Protocol)(HTTPS), 보안 소켓 계층(Secure Socket Layer)(SSL), 메시징 프로토콜들(예를 들어, 아메리카 온라인(America Online)(AOL) 인스턴트 메신저(Instant Messenger)(AIM), 애플의 아이메시지, 애플리케이션 익스체인지(Application Exchange)(APEX), ICQ, 인터넷 중계 채팅(Internet Relay Chat)(IRC), 마이크로소프트 네트워크(Microsoft Network)(MSN) 메신저 서비스, 프리젠스 및 인스턴스 메시징 프로토콜(Presence and Instant Messaging Protocol)(PRIM), 인터넷 엔지니어링 태스크 포스의(Internet Engineering Task Force's)(IETF's) 세션 개시 프로토콜(Session Initiation Protocol)(SIP), 인스턴스 메시징 및 프리젠스 레버리징 확장들을 위한 SIP(SIP for Instant Messaging and Presence Leveraging Extensions)(SIMPLE), 오픈 XML 기반 확장가능 메시징 및 프리젠스 프로토콜(XML-based Extensible Messaging and Presence Protocol)(XMPP)(즉, 재버 또는 오픈 모바일 연합의(Open Mobile Alliance's)(OMA's) 인스턴스 메시징 및 프리젠스 서비스(Instant Messaging and Presence Service)(IMPS)), 야후! 인스턴트 메신저 서비스, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 보안 통신 프로토콜들을 지원할 수 있다. 정보 서버는 웹 페이지들의 형태인 결과들을 웹 브라우저들에 제공하고, 및 다른 프로그램 구성요소들과의 상호작용을 통해 웹 페이지들의 조작된 발생을 허용한다. HTTP 요청의 도메인 네임 시스템(Domain Name System)(DNS) 해결 부분이 특정 정보 서버에 대해 해결된 후에, 정보 서버는 HTTP 요청의 나머지에 기초하여 DSFM 컨트롤러 상의 지정된 위치들에서 정보에 대한 요청들을 해결한다. 예를 들어, http://123.124.125.126/myInformation.html과 같은 요청은 DNS 서버에 의해 해결되는 요청 "123.124.125.126"의 IP 일부를 그러한 IP 어드레스에서의 정보 서버에 가질 수 있고; 그러한 정보 서버는 HTTP 요청을 요청의 "/myInformation.html" 일부에 대해 차례로 더 파싱하고 그것을 정보 "myInformation.html"을 포함하는 메모리 내의 위치에서 해결할 수 있다. 부가적으로, 다른 정보 서빙 프로토콜들은 다양한 포트들, 예를 들어 FTP 통신 교차 포트 21, 및/또는 유사한 것에 걸쳐 이용될 수 있다. 정보 서버는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, 정보 서버는 DSFM 데이터베이스(619), 운영 체제들, 다른 프로그램 구성요소들, 사용자 인터페이스들, 웹 브라우저들, 및/또는 유사한 것과 통신한다.
DSFM 데이터베이스에의 액세스는 다수의 데이터베이스 브리지 메커니즘들을 통해 예컨대 아래에 열거되는 바와 같은 스크립팅 언어들(예를 들어, CGI)을 통해 및 아래에 열거되는 바와 같은 인터 애플리케이션 통신 채널들(예를 들어, CORBA, 웹객체들 등)을 통해 달성될 수 있다. 웹 브라우저를 통한 임의의 데이터 요청들은 DSFM에 의해 요구되는 바와 같이 브리지 메커니즘을 통해 적절한 그래머들로 파싱된다. 일 실시예에서, 정보 서버는 웹 브라우저에 의해 액세스가능한 웹 폼을 제공할 것이다. 웹 폼 내의 공급 필드들로 이루어지는 엔트리들은 특정 필드들로 입력된 바와 같이 태깅되고, 그와 같이 파싱된다. 그 다음, 입력된 조건들은 필드 태그들과 함께 전달되며, 필드 태그들은 파서에게 적절한 테이블들 및/또는 필드들에 보내지는 질의들을 발생시키라고 명령하는 역할을 한다. 일 실시예에서, 파서는 태깅된 텍스트 엔트리들에 기초하여 적절한 연결/선택 커맨드들을 갖는 검색 스트링을 인스턴스화함으로써 표준 SQL에서 질의들을 발생시킬 수 있으며, 최종 커맨드는 브리지 메커니즘을 통해 DSFM에 질의로서 제공된다. 질의로부터 질의 결과들을 발생시킬 시에, 결과들은 브리지 메커니즘을 통해 전달되고, 브리지 메커니즘에 의한 새로운 결과 웹 페이지의 포맷팅 및 발생을 위해 파싱될 수 있다. 그 다음, 그러한 새로운 결과 웹 페이지는 정보 서버에 제공되며, 정보 서버는 그것을 요청 웹 브라우저에 공급할 수 있다.
또한, 정보 서버는 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다.
컴퓨터 인터페이스들은 일부 점들에서 자동차 동작 인터페이스들과 유사하다. 자동차 동작 인터페이스 요소들 예컨대 스티어링 휠들, 기어시프트들, 및 속도계들은 자동차 자원들의 액세스, 동작, 및 디스플레이, 및 상태를 용이하게 한다. 컴퓨터 상호작용 인터페이스 요소들 예컨대 체크 박스들, 커서들, 메뉴들, 스크롤러들, 및 윈도우즈(위젯들로 집합적으로 및 통상적으로 언급됨)는 데이터 및 컴퓨터 하드웨어 및 운영 체제 자원들의 액세스, 능력들, 동작, 및 디스플레이, 및 상태를 유사하게 용이하게 한다. 동작 인터페이스들은 사용자 인터페이스들로 통상 칭해진다. 그래픽 사용자 인터페이스들(Graphical user interfaces)(GUIs) 예컨대 애플 매킨토시 운영 체제의 아쿠아 및 iOS의 코코아 터치, IBM의 OS/2, 구글의 안드로이드 모바일 UI, 마이크로소프트의 윈도우즈 2000/2003/3.1/95/98/CE/밀레님엄/모바일/NT/XP/비스타/7/8(즉, 에어로, 메트로), 유닉스의 X-윈도우즈(예를 들어, 부가 유닉스 그래픽 인터페이스 라이브러리들 및 계층들 예컨대 K 데스크톱 환경(K Desktop Environment)(KDE), 미스TV 및 GNU 네트워크 객체 모델 환경(GNU Network Object Model Environment)(GNOME)을 포함할 수 있음), 웹 인터페이스 라이브러리들(예를 들어, 액티브엑스, 에이잭스, (D)HTML, 플래시, 자바, 자바스크립트 등 도조, 제이쿼리(UI), 무툴스, 프로토타입, script.aculo.us, SWFObject, 야후! 사용자 인터페이스와 같지만, 이들에 제한되지 않는 인터페이스 라이브러리들, 그 중 어느 것이 사용될 수 있음)은 사용자들에게 그래픽으로 정보를 액세스하고 디스플레이하는 베이스라인 및 수단을 제공한다.
사용자 인터페이스 구성요소(617)는 CPU에 의해 실행되는 저장된 프로그램 구성요소이다. 사용자 인터페이스는 이미 논의된 것과 같은 운영 체제들 및/또는 운영 환경들에 의해, 이들로, 및/또는 이들 위에 제공되는 바와 같이 그래픽 사용자 인터페이스일 수 있다. 사용자 인터페이스는 텍스트 및/또는 그래픽 수단들을 통해 프로그램 구성요소들 및/또는 시스템 수단들의 디스플레이, 실행, 상호작용, 조작, 및/또는 동작을 허용할 수 있다. 사용자 인터페이스는 사용자들이 컴퓨터 시스템에 영향을 미치고, 컴퓨터 시스템과 상호작용하고, 및/또는 컴퓨터 시스템을 동작시킬 수 있는 수단을 제공한다. 사용자 인터페이스는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, 사용자 인터페이스는 운영 체제들, 다른 프로그램 구성요소들, 및/또는 유사한 것과 통신한다. 사용자 인터페이스는 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다.
웹 브라우저 구성요소(618)는 CPU에 의해 실행되는 저장된 프로그램 구성요소이다. 웹 브라우저는 예컨대 애플의 코코아 (터치) 객체 클래스, 및/또는 유사한 것을 통한 하이퍼텍스트 뷰잉 애플리케이션 예컨대 구글의 (모바일) 크롬, 마이크로소프트 인터넷 익스플로러, 넷스케이프 내비게이터, 애플의 (모바일) 사파리, 내장 웹 브라우저 객체들일 수 있다. 보안 웹 브라우징은 HTTPS, SSL, 및/또는 유사한 것에 의해 128비트 (또는 그 이상의) 암호화를 공급받을 수 있다. 웹 브라우저들은 수단들 예컨대 액티브엑스, 에이잭스, (D)HTML, 플래시, 자바, 자바스크립트, 웹 브라우저 플러그인 API들(예를 들어, 크롬, 파이어폭스, 인터넷 익스플로러, 사파리 플러그인, 및/또는 유사한 API들), 및/또는 유사한 것을 통해 프로그램 구성요소들의 실행을 허용한다. 웹 브라우저들 및 유사한 정보 액세스 툴스는 PDA들, 휴대 전화들, 스마트폰들, 및/또는 다른 모바일 디바이스들로 통합될 수 있다. 웹 브라우저는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, 웹 브라우저는 정보 서버들, 운영 체제들, 통합 프로그램 구성요소들(예를 들어, 플러그인들), 및/또는 유사한 것과 통신하며; 예를 들어, 그것은 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다. 또한, 웹 브라우저 및 정보 서버 대신에, 결합된 애플리케이션은 둘 다의 유사한 동작들을 수행하기 위해 개발될 수 있다. 결합된 애플리케이션은 DSFM 구비 노드들로부터 정보의 획득 및 사용자들, 사용자 에이전트들, 및/또는 유사한 것에 정보의 제공을 유사하게 성취할 것이다. 결합된 애플리케이션은 표준 웹 브라우저들을 이용하는 시스템들에 가치가 없을 수 있다.
메일 서버 구성요소(621)는 CPU(603)에 의해 실행되는 저장된 프로그램 구성요소이다. 메일 서버는 애플의 메일 서버(3), 도브콧, 센드메일, 마이크로소프트 익스체인지, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 인터넷 메일 서버일 수 있다. 메일 서버는 수단들 예컨대 ASP, 액티브엑스, (ANSI)(오브젝티브-) C(++), C# 및/또는 .NET, CGI 스크립트들, 자바, 자바스크립트, PERL, PHP, 파이프들, 파이선, 웹객체들, 및/또는 유사한 것을 통해 프로그램 구성요소들의 실행을 허용할 수 있다. 메일 서버는 인터넷 메시지 액세스 프로토콜(Internet message access protocol)(IMAP), 메시징 애플리케이션 프로그래밍 인터페이스(Messaging Application Programming Interface)(MAPI)/마이크로소프트 익스체인지, 포스트 오피스 프로토콜(post office protocol)(POP3), 간이 메일 전송 프로토콜(simple mail transfer protocol)(SMTP), 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 통신 프로토콜들을 지원할 수 있다. 메일 서버는 송신되었고, 중계되었고/되었거나, 다른 방법으로 DSFM 시스템을 통해 그리고/또는 DSFM 시스템으로 가로지르고 있는 착신 및 발신 메일 메시지들을 라우팅, 전송, 및 처리할 수 있다.
DSFM 시스템 메일에의 액세스는 개별 웹 서버 구성요소들 및/또는 운영 체제에 의해 제공되는 다수의 API들을 통해 달성될 수 있다.
또한, 메일 서버는 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 정보, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다.
메일 클라이언트 구성요소(622)는 CPU(603)에 의해 실행되는 저장된 프로그램 구성요소이다. 메일 클라이언트는 메일 뷰잉 애플리케이션 예컨대 애플 (모바일) 메일, 마이크로소프트 인투어지, 마이크로소프트 아웃룩, 마이크로소프트 아웃룩 익스프레스, 모질라, 선더버드, 및/또는 유사한 것일 수 있다. 메일 클라이언트들은 다수의 전송 프로토콜들, 예컨대: IMAP, 마이크로소프트 익스체인지, POP3, SMTP, 및/또는 유사한 것을 지원할 수 있다. 메일 클라이언트는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달되고 및/또는 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, 메일 클라이언트는 메일 서버들, 운영 체제들, 다른 메일 클라이언트들, 및/또는 유사한 것과 통신하며; 예를 들어, 그것은 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 정보, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다. 일반적으로, 메일 클라이언트는 전자 메일 메시지들을 작성하고 송신하는 수단을 제공한다.
암호 서버 구성요소(620)는 CPU(603), 암호 프로세서(626), 암호 프로세서 인터페이스(627), 암호 프로세서 디바이스(628), 및/또는 유사한 것에 의해 실행되는 저장된 프로그램 구성요소이다. 암호 프로세서 인터페이스들은 암호 구성요소에 의해 암호화 및/또는 복호화 요청들의 신속화(expedition)를 허용할 것이지만; 암호 구성요소는 대안으로, CPU 상에 실행될 수 있다. 암호 구성요소는 제공된 데이터의 암호화 및/또는 복호화를 허용한다. 암호 구성요소는 대칭 및 비대칭(예를 들어, 프리티 굿 프로텍션(Pretty Good Protection)(PGP)) 암호화 및/또는 복호화 둘 다를 허용한다. 암호 구성요소는 디지털 인증서들(예를 들어, X.509 인증 프레임워크), 디지털 서명들, 이중 서명들, 인벨로핑, 패스워드 액세스 보호, 공개 키 관리, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 암호 기술들을 이용할 수 있다. 암호 구성요소는 체크섬, 데이터 암호화 표준(Data Encryption Standard)(DES), 타원 곡선 암호화(Elliptical Curve Encryption)(ECC), 국제 데이터 암호화 알고리즘(International Data Encryption Algorithm)(IDEA), 메시지 다이제스트 5(Message Digest 5)(MD5, 단방향 해시 연산임), 패스워드들, 리베스트 암호(Rivest Cipher)(RC5), 라인달, RSA(Ron Rivest, Adi Shamir, 및 Leonard Adleman에 의해 1977년에 개발된 알고리즘을 사용하는 인터넷 암호화 및 인증 시스템임), 보안 해시 알고리즘(Secure Hash Algorithm)(SHA), 보안 소켓 계층(SSL), 보안 하이퍼텍스트 전송 프로토콜(HTTPS), 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 다수의(암호화 및/또는 복호화) 보안 프로토콜들을 용이하게 할 것이다. 그러한 암호화 보안 프로토콜들을 이용하면, DSFM 시스템은 모든 착신 및/또는 발신 통신들을 암호화할 수 있고 더 넓은 통신 네트워크를 갖는 가상 사설 네트워크(virtual private network)(VPN) 내에서 노드의 역할을 할 수 있다. 암호 구성요소는 자원에의 액세스가 보안 프로토콜에 의해 금지되는 "보안 인가"의 프로세스를 용이하게 하며 암호 구성요소는 보안 자원에의 인가된 액세스를 성취한다. 게다가, 암호 구성요소는 예를 들어 디지털 오디오 파일에 대한 고유 서명을 획득하기 위해 MD5 해시를 이용하여 콘텐츠의 고유 식별자들을 제공할 수 있다. 암호 구성요소는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 암호 구성요소는 하나 이상의 DSFM 구성요소들이 원한다면 보안 트랜잭션들에 참여할 수 있게 하기 위해 통신 네트워크에 걸쳐 정보의 보안 송신을 허용하는 암호화 방식들을 지원한다. 암호 구성요소는 DSFM 시스템 상에 자원들의 보안 액세스를 용이하게 하고 원격 시스템들 상에 보안 자원들의 액세스를 용이하게 하며; 즉, 그것은 보안 자원들의 클라이언트 및/또는 서버의 역할을 할 수 있다. 가장 빈번하게, 암호 구성요소는 정보 서버들, 운영 체제들, 다른 프로그램 구성요소들, 및/또는 유사한 것과 통신한다. 암호 구성요소는 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다.
DSFM 데이터베이스 구성요소(619)는 데이터베이스 및 그것의 저장된 데이터에 구체화될 수 있다. 데이터베이스는 CPU에 의해 실행되는 저장된 프로그램 구성요소이며; 저장된 프로그램 구성요소 부분은 저장된 데이터를 처리하기 위해 CPU를 구성한다. 데이터베이스는 다수의 고장 허용, 관계형, 스케일가능, 보안 데이터베이스 예컨대 DB2, MySQL, 오라클, 사이베이스, 및/또는 유사한 것 중 어느 것일 수 있다. 관계형 데이터베이스들은 플랫 파일의 확장이다. 관계형 데이터베이스들은 일련의 관련 테이블들로 구성된다. 테이블들은 키 필드를 통해 상호연결된다. 키 필드의 사용은 키 필드에 대해 인덱싱함으로써 테이블들의 조합을 허용하며; 즉, 키 필드들은 다양한 테이블들로부터 정보를 결합하는 차원 피벗 지점들의 역할을 한다. 관계들은 일반적으로 일차 키들을 매칭함으로써 테이블들 사이에서 유지되는 링크들을 식별한다. 일차 키들은 관계형 데이터베이스에서 테이블의 행들을 고유하게 식별하는 필드들을 표현한다. 더 정확하게, 그들은 "일 대 다" 관계의 "일" 측면 상에서 테이블의 행들을 고유하게 식별한다.
대안으로, DSFM 데이터베이스는 다양한 표준 데이터 구조들, 예컨대 어레이, 해시, (링크된) 리스트, 스트럭트, 구조화된 텍스트 파일(예를 들어, XML), 테이블, 및/또는 유사한 것을 사용하여 구현될 수 있다. 그러한 데이터 구조들은 메모리 및/또는 (구조화된) 파일들에 저장될 수 있다. 다른 대안에서, 프런티어, 객체스토어, 포엣, 조프, 및/또는 유사한 것과 같은 객체 지향 데이터베이스가 사용될 수 있다. 객체 데이터베이스들은 공통 속성들에 의해 함께 그룹화될 수 있고/있거나 링크되는 다수의 객체 집합들을 포함할 수 있으며; 그들은 일부 공통 속성들에 의해 다른 객체 집합들과 관련될 수 있다. 객체 지향 데이터베이스들은 객체들이 단지 여러 개의 데이터가 아니라 주어진 객체 내에 캡술화되는 다른 타입들의 능력들을 가질 수 있는 것을 제외하고 관계형 데이터베이스들과 유사하게 수행된다. DSFM 데이터베이스가 데이터 구조로 구현되면, DSFM 데이터베이스(619)의 사용은 DSFM 구성요소(635)와 같은 다른 구성요소로 통합될 수 있다. 또한, 데이터베이스는 데이터 구조들, 객체들, 및 관계형 구조들의 혼합으로 구현될 수 있다. 데이터베이스들은 표준 데이터 처리 기술들을 통해 무수한 변형들로 통합 및/또는 분산될 수 있다. 데이터베이스들의 일부들, 예를 들어 테이블들은 이출 및/또는 이입될 수 있고 따라서 비집중 및/또는 통합될 수 있다.
일 실시예에서, 데이터베이스 구성요소(619)는 수개의 테이블들(619a-f)을 포함한다. 사용자 테이블(619a)은 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, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 필드들을 포함할 수 있다. 사용자 테이블은 DSFM 시스템 상에서 다수의 엔티티 계정들을 지원 및/또는 추적할 수 있다. 클라이언트 테이블(619b)은 device_ID, device_name, device_IP, device_MAC, device_type, device_model, device_version, device_OS, device_apps_list, device_securekey, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 필드들을 포함할 수 있다. 앱 테이블(619c)은 application_ID, application_name, application_type, application_backup_list, application_sync, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 필드들을 포함할 수 있다. 메시지 테이블(619d)은 msg_id, msg_application, timestamp, msg_details_list, message_size, message_origin, message_synchronization, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 필드들을 포함할 수 있다. 페일오버 테이블(619e)은 failover_ID, failover_timestamp, primary_application, secondary_application, failover_check_time, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 필드들을 포함할 수 있다. 코드 경로 테이블(619f)은 codepath_ID, codepath_itrtions, optmz_thrshld_min, optmz_thrshld_max, codepath_length, codepath_priorty, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 필드들을 포함할 수 있다.
일 실시예에서, DSFM 데이터베이스는 다른 데이터베이스 시스템들과 상호작용할 수 있다. 예를 들어, 분산 데이터베이스 시스템을 이용하면, 검색 DSFM 구성요소에 의한 질의들 및 데이터 액세스는 DSFM 데이터베이스, 통합된 데이터 보안 계층 데이터베이스의 조합을 단일 데이터베이스 엔티티로 처리할 수 있다.
일 실시예에서, 사용자 프로그램들은 다양한 사용자 인터페이스 프리미티브들을 포함할 수 있으며, 이 프리미티들은 DSFM 시스템을 갱신하는 역할을 할 수 있다. 또한, 다양한 계정들은 DSFM 시스템이 서빙할 필요가 있을 수 있는 클라이언트들의 환경들 및 타입들에 따라 맞춤 데이터베이스 테이블들을 필요로 할 수 있다. 임의의 고유 필드들은 도처에서 키 필드로서 지정/라벨링될 수 있다는 점이 주목되어야 한다. 대안 실시예에서, 이러한 테이블들은 그들의 자체 데이터베이스들 및 그들의 각각의 데이터베이스 컨트롤러들(즉, 상기 테이블들 각각에 대한 개별 데이터베이스 컨트롤러들)로 비집중되었다. 표준 데이터 처리 기술들을 이용하면, 수개의 컴퓨터 시스템들 및/또는 저장 디바이스들을 통해 데이터베이스들을 더 분산시킬 수 있다. 유사하게, 비집중형 데이터베이스 컨트롤러들의 구성들은 다양한 데이터베이스 구성요소들(619a-f)을 통합 및/또는 분산함으로써 변화될 수 있다. DSFM 시스템은 데이터베이스 컨트롤러들을 통해 다양한 설정들, 입력들, 및 파라미터들을 기록하도록 구성될 수 있다.
DSFM 데이터베이스는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, DSFM 데이터베이스 하나 이상의 DSFM 구성요소들, 다른 프로그램 구성요소들, 및/또는 유사한 것과 통신한다. 데이터베이스는 다른 노드들 및 데이터에 관한 정보를 포함, 유지, 및 제공할 수 있다.
DSFM 구성요소(635)는 CPU에 의해 실행되는 저장된 프로그램 구성요소이다. 일 실시예에서, DSFM 구성요소는 이전 도면들에서 논의되는 DSFM 시스템의 다양한 실시예들의 양태들의 임의의 및/또는 모든 조합들을 포함한다. 그와 같이, DSFM 시스템의 실시예들은 다양한 통신 네트워크들에 걸쳐 정보, 서비스들, 트랜잭션들, 및/또는 유사한 것의 액세스, 획득 및 제공에 영향을 미칠 수 있다.
하나 이상의 DSFM 구성요소들은 소프트웨어 애플리케이션의 일차 인스턴스에서의 실패된 실행을 그것의 실패 전에 일차 인스턴스의 실행과 동기화되는 소프트웨어 애플리케이션의 이차 인스턴스의 실행으로 교정할 수 있다. 일 실시예에서, DSFM 구성요소(635)는 입력들(예를 들어, 분해된 가상 어드레스들(204); 및/또는 유사한 것) 등을 취하고, 입력들을 다양한 구성요소들(예를 들어, IMAS(641); 및/또는 유사한 것)을 통해 출력들(예를 들어, 연속 및 무한 가상 메모리 어드레스 공간(206); 및/또는 유사한 것)로 변환한다.
노드들 사이에서 정보의 액세스를 가능하게 하는 DSFM 구성요소(들)는 아파치 구성요소들, 어셈블리, 액티브엑스,이진 실행 파일들(binary executables), (ANSI)(오브젝티브-) C(++), C# 및/또는 .NET, 데이터베이스 어댑터들, CGI 스크립트들, 자바, 자바스크립트, 매핑 툴스, 절차 및 객체 지향 개발 툴스, PERL, PHP, 파이선, 쉘 스크립트들, SQL 커맨드들, 웹 애플리케이션 서버 확장들, 웹 개발 환경들 및 라이브러리들(예를 들어, 마이크로소프트의 액티브엑스; 어도비 에어, 플렉스 & 플래시; 에이잭스; (D)HTML; 도조, 자바; 자바스크립트; 제이쿼리(UI); 무툴스; 프로토타입; script.aculo.us; 간이 객체 액세스 프로토콜(Simple Object Access Protocol)(SOAP); SWFObject; 야후! 사용자 인터페이스; 및/또는 유사한 것), 웹객체들, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 표준 개발 툴스 및 언어들을 이용함으로써 개발될 수 있다. 일 실시예에서, DSFM 서버는 통신들을 암호화하고 복호화하기 위해 암호 서버를 이용한다. DSFM 구성요소(들)는 그 자체, 및/또는 유사한 것의 수단들을 포함하는 구성요소 집합 내의 다른 구성요소들에 전달될 수 있고/있거나 다른 구성요소들과 통신할 수 있다. 가장 빈번하게, DSFM 구성요소(들)는 DSFM 데이터베이스, 운영 체제들, 다른 프로그램 구성요소들, 및/또는 유사한 것과 통신한다. DSFM 시스템의 실시예들은 프로그램 구성요소, 시스템, 사용자, 및/또는 데이터 통신들, 요청들, 및/또는 응답들을 포함, 통신, 발생, 획득, 및/또는 제공할 수 있다.
DSFM 노드 컨트롤러 구성요소들 중 어느 것에 대한 구조 및/또는 동작은 개발 및/또는 전개를 용이하게 하기 위해 임의의 수의 방식들로 결합, 통합, 및/또는 분산될 수 있다. 유사하게, 구성요소 집합은 전개 및/또는 개발을 용이하게 하기 위해 임의의 수의 방식들로 결합될 수 있다. 이것을 달성하기 위해, 구성요소들을 요구에 따라 통합 방식으로 동적으로 로딩할 수 있는 공통 코드 베이스로 또는 수단 내에 구성요소들을 통합할 수 있다.
구성요소 집합은 표준 데이터 처리 및/또는 개발 기술들을 통해 무수한 변형들로 통합 및/또는 분산될 수 있다. 프로그램 구성요소 집합 내의 프로그램 구성요소들 중 어느 하나에 대한 다수의 인스턴스들은 로드 밸런싱 및/또는 데이터 처리 기술들을 통해 성능을 개선하기 위해 단일 노드 상에, 그리고/또는 다수의 노드들에 걸쳐 인스턴스화될 수 있다. 더욱이, 단일 인스턴스들은 또한 다수의 컨트롤러들 및/또는 저장 디바이스들; 예를 들어, 데이터베이스들에 걸쳐 분산될 수 있다. 협력하여 작동하는 모든 프로그램 구성요소 인스턴스들 및 컨트롤러들은 표준 데이터 처리 통신 기술들을 통해 그렇게 행할 수 있다.
DSFM 컨트롤러의 실시예들의 구성은 시스템 전개의 맥락에 의존할 수 있다. 기본 하드웨어 자원들의 버짓, 용량, 위치, 및/또는 사용과 같지만, 이들에 제한되지 않는 인자들은 전개 요건들 및 구성에 미칠 수 있다. 구성이 더 합병 및/또는 통합된 프로그램 구성요소들을 야기하는지, 더 분산된 시리즈의 프로그램 구성요소들을 야기하는지, 그리고/또는 합병 및 통합 구성 사이의 일부 조합을 야기하는지에 상관없이 , 데이터가 통신, 획득, 및/또는 제공될 수 있다. 프로그램 구성요소 집합으로부터 공통 코드 베이스로 통합되는 구성요소들의 인스턴스들은 데이터를 통신, 획득, 및/또는 제공할 수 있다. 이것은 데이터 레퍼렌싱(예를 들어, 포인터들), 내부 메시징, 객체 인스턴스 가변 통신, 공유 메모리 공간, 가변 패싱, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 인트라 애플리케이션 데이터 처리 통신 기술들을 통해 달성될 수 있다.
구성요소 집합 컴포넌트들이 서로 별개이고, 분리되고, 그리고/또는 외부에 있으면, 이때 데이터를 다른 구성요소들과 그리고/또는 다른 구성요소들에 통신, 획득, 및/또는 제공하는 것은 애플리케이션 프로그램 인터페이스들(Application Program Interfaces)(API) 정보 전달; (분산) 구성요소 객체 모델((distributed) Component Object Model)((D)COM), (분산) 객체 링킹 및 임베딩((Distributed) Object Linking 및 Embedding)((D)OLE), 및/또는 유사한 것), 공통 객체 요청 브로커 아키텍처(Common Object Request Broker Architecture)(CORBA), Jini 로컬 및 원격 애플리케이션 프로그램 인터페이스들, 자바스크립트 객체 표기법(JavaScript Object Notation)(JSON), 원격 메소드 호출(Remote Method Invocation)(RMI), SOAP, 프로세스 파이프들, 공유 파일들, 및/또는 유사한 것과 같지만, 이들에 제한되지 않는 인터 애플리케이션 데이터 처리 통신 기술들을 통해 달성될 수 있다. 인터 애플리케이션 통신을 위한 별개 구성요소들 사이에 또는 인트라 애플리케이션 통신을 위한 단일 구성요소의 메모리 공간들 내에 송신되는 메시지들은 그래머의 생성 및 파싱을 통해 용이하게 될 수 있다. 그래머는 개발 툴스 예컨대 렉스, 야크, XML, 및/또는 유사한 것을 사용함으로써 개발될 수 있으며, 그것은 그래머 생성 및 파싱 능력들을 허용하고, 결국 구성요소들 내에 및 구성요소들 사이에 통신 메시지들의 기초를 형성할 수 있다.
예를 들어, 그래머는 이하와 같이, HTTP 포스트 커맨드의 토큰들을 인식하도록 배열될 수 있다:
Figure pct00006
여기서, Value1은 "http ://"가 그래머 신택스의 일부이고, 뒤따르는 것이 포스트 값의 일부로 간주되기 때문에 파라미터인 것으로 구별된다. 유사하게, 그러한 그래머의 경우, 변수 "Value1"은 "http://" 포스트 커맨드로 삽입된 다음에 송신될 수 있다. 그래머 신택스 자체는 파싱 메커니즘(예를 들어, 렉스, 야크 등에 의해 처리되는 바와 같이 신택스 설명 텍스트 파일)을 발생시키기 위해 해석될 수 있고/있거나 다른 방법으로 사용되는 구조화된 데이터로 제시될 수 있다. 또한, 파싱 메커니즘이 발생되고 및/또는 인스턴스화되면, 그 자체는 문자(예를 들어, 탭) 설명 텍스트, HTML, 구조화된 텍스트 스트림들, XML, 및/또는 유사한 구조화된 데이터와 같지만, 이들에 제한되지 않는 구조화된 데이터를 처리 및/또는 파싱할 수 있다. 다른 실시예에서, 인터 애플리케이션 데이터 처리 프로토콜들 자체는 데이터(예를 들어, 통신들)를 파싱하기 위해 이용될 수 있는 해석된 및/또는 용이하게 이용가능한 파서들(예를 들어, JSON, SOAP, 및/또는 유사한 파서들)을 가질 수 있다. 게다가, 파싱 그래머는 메시지 파싱을 넘어 사용될 수 있지만, 또한 데이터베이스들, 데이터 집합들, 데이터 스토어들, 구조화된 데이터, 및/또는 유사한 것을 파싱하기 위해 사용될 수 있다. 또한, 원하는 구성은 시스템 전개의 맥락, 환경, 및 요건들에 의존할 것이다.
예를 들어, 일부 구현들에서, DSFM 컨트롤러는 정보 서버를 통해 보안 소켓 계층("SSL") 소켓 서버를 구현하는 PHP 스크립트를 실행하고 있을 수 있으며, 정보 서버는 클라이언트가 데이터, 예를 들어 JSON 포맷으로 인코딩되는 데이터를 송신할 수 있는 서버 포트 상에서 착신 통신들을 리스닝한다. 착신 통신을 식별하면, PHP 스크립트는 클라이언트 디바이스로부터 착신 메시지를 판독하고, 수신된 JSON 인코딩 덱스트 데이터를 파싱하여 정보를 JSON 인코딩 텍스트 데이터로부터 PHP 스크립트 변수들로 추출하고, 데이터(예를 들어, 클라이언트 식별 정보 등) 및/또는 추출된 정보를 구조화된 질의 언어(Structured Query Language)("SQL")를 사용하여 액세스가능한 관계형 데이터베이스에 저장할 수 있다. JSON 인코딩 입력 데이터를 클라이언트 디바이스로부터 SSL 연결을 통해 허용하고, 데이터를 파싱하여 변수들을 추출하고, 데이터를 데이터베이스에 저장하기 위해, PHP/SQL 커맨드들의 형태로 실질적으로 기록되는 예시적 리스팅은 아래에 제공된다:
Figure pct00007
Figure pct00008
또한, 이하의 자원들은 SOAP 파서 구현에 관한 예시적 실시예들을 제공하기 위해 사용될 수 있다:
Figure pct00009
및 다른 파서 구현들:
Figure pct00010
그 모두는 이로써 본원에 참조로 분명히 포함된다.
DSFM 개인 및/또는 기업 사용자의 특정 요구들 및/또는 특성들, 데이터베이스 구성 및/또는 관계형 모델, 데이터 타입, 데이터 송신 및/또는 네트워크 프레임워크, 신택스 구조, 및/또는 유사한 것에 따라, 많은 유연성 및 맞춤화를 허용하는 DSFM 시스템의 다양한 실시예들이 구현될 수 있다는 점이 이해되어야 한다. DSFM 시스템의 다양한 실시예들 및 그것의 논의는 애플리케이션 실행 최적화 및 효율에 관한 것이었지만, 본원에 설명되는 실시예들은 매우 다양한 다른 애플리케이션들 및/또는 구현들을 위해 용이하게 구성 및/또는 맞춤화될 수 있다는 점이 이해되어야 한다.
본 명세서는 많은 특정 구현 상세들을 포함하지만, 이들은 임의의 발명들 또는 청구될 수 있는 것의 범위에 관한 제한들로 해석되는 것이 아니라, 오히려 특정 발명들의 특정 실시예들에 특정한 특징들의 설명들로 해석되어야 한다. 개별 실시예들의 맥락에서 본 명세서에 설명되는 특정 특징들은 또한 단일 실시예에 조합하여 구현될 수 있다. 역으로, 단일 실시예의 맥락에서 설명되는 다양한 특징들은 또한 다수의 실시예들에서 개별적으로 또는 임의의 적절한 부조합으로 구현될 수 있다. 더욱이, 특징들이 특정 조합들로 역할을 하는 것으로 상기 설명되고 그와 같이 심지어 초기에 청구될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구된 조합은 부조합 또는 부조합의 변형에 관한 것일 수 있다.
유사하게, 동작들은 도면들에서 특정 순서로 도시되지만, 이것은 바람직한 결과들을 달성하기 위해, 그러한 동작들이 도시되는 특정 순서 또는 순차적 순서로 수행되거나, 모든 예시된 동작들이 수행되는 것을 필요로 하는 것으로 이해되지 않아야 한다. 특정 상황들에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다. 더욱이, 상기 설명된 실시예들 내의 다양한 시스템 구성요소들의 분리는 모든 실시예들에서 그러한 분리를 필요로 하는 것으로 이해되지 않아야 하고, 설명된 프로그램 구성요소들 및 시스템들은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 다수의 소프트웨어 제품들로 패키지화될 수 있다는 점이 이해되어야 한다.
따라서, 발명 대상의 특정 실시예들이 설명되었다. 다른 실시예들은 이하의 청구항들의 범위 내에 있다. 일부 경우들에서, 청구항들에 열거되는 동작들은 상이한 순서로 수행되고 바람직한 결과들을 여전히 달성할 수 있다. 게다가, 첨부 도면들에 도시되는 프로세스들은 바람직한 결과들을 달성하기 위해, 도시되는 특정 순서, 또는 순차적 순서를 반드시 필요로 하는 것은 아니다. 특정 구현들에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (20)

  1. 적어도 하나의 컴퓨터 프로세서 상에 신속하게 애플리케이션을 실행하는 방법으로서,
    적어도 하나의 컴퓨터 프로세서 상에 상기 애플리케이션의 복수의 인스턴스들을 동시에 실행하는 단계 - 각각의 인스턴스는 상기 복수의 인스턴스들 중 모든 다른 인스턴스들을 컴파일하기 위해 사용되는 각각의 컴파일러 옵션들과 상이한 각각의 컴파일러 옵션에 따라 컴파일됨 -; 및
    상기 애플리케이션에 의해 생성되는 제1 복수의 결과들의 각각의 결과에 대해,
    상기 결과에 대응하여, 각각의 인스턴스에 의해 발생되는 각각의 출력을 감시하는 단계; 및
    상기 감시된 출력들로부터 상기 결과에 대응하는 애플리케이션의 출력으로서 가장 빠르게 발생하는 출력을 라벨링하고, 모든 다른 출력들을 사본들로서 라벨링하는 것에 의해, 상기 적어도 하나의 컴퓨터 프로세서의 컴퓨팅 성능을 가속시키는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 복수의 인스턴스들은 제1 인스턴스 및 제2 인스턴스를 포함하고;
    상기 제1 인스턴스에 대한 컴파일러 옵션은 어헤드-오브-타임(AIT) 컴파일화를 포함하고;
    상기 제2 인스턴스에 대한 컴파일러 옵션은 저스트-인-타임(JIT) 컴파일화를 포함하며, JIT 컴파일화는 상기 제2 인스턴스의 적어도 하나의 사전 실행으로부터 획득되는 런타임 정보에 적어도 부분적으로 기초하는, 방법.
  3. 제1항에 있어서,
    상기 복수의 인스턴스들은 제1 인스턴스를 포함하고;
    상기 제1 인스턴스에 대한 컴파일러 옵션은 비제약된 메모리 사용, 메모리 사용의 최소화, 병행 연산들의 최대화, 및 연산들의 제약된 병행성으로 구성되는 그룹으로부터 선택되는, 방법.
  4. 제1항에 있어서,
    상기 복수의 인스턴스들 중 하나의 인스턴스를 일차 인스턴스로서 라벨링하는 단계;
    모든 다른 인스턴스들을 이차 인스턴스들로서 라벨링하는 단계; 및
    상기 애플리케이션에 의해 생성되는 제2 복수의 결과들 중 각각의 결과에 대해, 상기 결과에 대응하여, 상기 이차 인스턴스들로부터 각각의 출력들을 억제하는 단계를 더 포함하는, 방법.
  5. 제4항에 있어서,
    상기 제2 복수의 결과들 중 k개의 결과들을 생성한 후에 상기 일차 인스턴스의 실패를 식별하는 단계 - k ≥ 1임 -;
    상기 일차 인스턴스를 실패된 인스턴스로서 라벨링하는 단계;
    상기 k개의 결과들 각각에 대한 계산과 연관된 로직을 실행한 이차 인스턴스를 선택하는 단계; 및
    상기 선택된 이차 인스턴스들을 상기 일차 인스턴스로서 재라벨링하는 단계 - 상기 재라벨링된 일차 인스턴스는 (k+1)번째 결과를 생성함 - 를 더 포함하는, 방법.
  6. 제1항에 있어서, 상기 소프트웨어 애플리케이션의 소스 코드의 적어도 일부는 적어도 부분적으로 해석되는 프로그래밍 언어를 사용하여 지정되는, 방법.
  7. 소프트웨어 애플리케이션에 대한 페일오버를 가능하게 하는 방법으로서,
    프로세서 기반 컨트롤러에 의해, (i) 상기 소프트웨어 애플리케이션의 일차 인스턴스 - 상기 일차 인스턴스는 제1 컴파일러 옵션에 따라 컴파일됨 -, 및 (ii) 상기 애플리케이션의 제1 이차 인스턴스 - 상기 제1 이차 인스턴스는 상기 제1 컴파일러 옵션과 상이한 컴파일러 옵션에 따라 컴파일됨 - 의 동시 실행들을 감시하는 단계;
    상기 소프트웨어 애플리케이션의 k개의 결과들의 생성 후에 상기 일차 인스턴스의 실패를 검출하는 단계 - k ≥ 1임 -;
    상기 제1 이차 인스턴스가 상기 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하는 단계; 및
    상기 제1 이차 인스턴스를 상기 일차 인스턴스로서 라벨링하는 단계를 포함하는, 방법.
  8. 제7항에 있어서, 상기 컨트롤러는 상기 k개의 결과들에 대응하는 상기 제1 이차 인스턴스의 출력들을 억제하는, 방법.
  9. 제7항에 있어서, 상기 제1 컴파일러 옵션은 저스트-인-타임(JIT) 컴파일화를 포함하고, 상기 제1 이차 인스턴스를 위해 사용되는 컴파일러 옵션은 어헤드-오브-타임(AIT) 컴파일화를 포함하는, 방법.
  10. 제7항에 있어서,
    상기 컨트롤러에 의해, (iii) 상기 애플리케이션의 제2 이차 인스턴스의 동시 실행을 감시하는 단계 - 상기 제2 이차 인스턴스는 상기 제1 컴파일러 옵션 및 상기 제1 이차 인스턴스를 컴파일하기 위해 사용되는 컴파일러 옵션 둘 다와 상이한 컴파일러 옵션에 따라 컴파일됨 -;
    상기 제1 이차 인스턴스가 상기 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것이 확인되지 않으면:
    상기 제2 이차 인스턴스가 상기 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하는 단계; 및
    상기 제2 이차 인스턴스를 상기 일차 인스턴스로서 라벨링하는 단계를 더 포함하는, 방법.
  11. 적어도 하나의 컴퓨터 프로세서 상에 신속하게 애플리케이션을 실행하는 시스템으로서,
    제1 프로세서; 및
    상기 제1 프로세서와 전기 통신하는 제1 메모리를 포함하며, 상기 제1 메모리는 명령들을 포함하고, 상기 명령들은 상기 제1 프로세서 및 제2 프로세서 중 적어도 하나를 포함하는 처리 유닛에 의해 실행될 때,
    적어도 하나의 컴퓨터 프로세서 상에 상기 애플리케이션의 복수의 인스턴스들을 동시에 실행하고 - 각각의 인스턴스는 상기 복수의 인스턴스들 중 모든 다른 인스턴스들을 컴파일하기 위해 사용되는 각각의 컴파일러 옵션들과 상이한 각각의 컴파일러 옵션에 따라 컴파일됨 -; 및
    상기 애플리케이션에 의해 생성되는 제1 복수의 결과들의 각각의 결과에 대해,
    상기 결과에 대응하여, 각각의 인스턴스에 의해 발생되는 각각의 출력을 감시하고; 및
    상기 감시된 출력들로부터 상기 결과에 대응하는 애플리케이션의 출력으로서 가장 빠르게 발생하는 출력을 라벨링하고, 모든 다른 출력들을 사본들로서 라벨링하는 것에 의해, 상기 적어도 하나의 컴퓨터 프로세서의 컴퓨팅 성능을 가속시키기 위해 상기 처리 유닛을 프로그래밍하는, 시스템.
  12. 제11항에 있어서,
    상기 복수의 인스턴스들은 제1 인스턴스 및 제2 인스턴스를 포함하고;
    상기 제1 인스턴스에 대한 컴파일러 옵션은 어헤드-오브-타임(AIT) 컴파일화를 포함하고;
    상기 제2 인스턴스에 대한 컴파일러 옵션은 저스트-인-타임(JIT) 컴파일화를 포함하며, JIT 컴파일화는 상기 제2 인스턴스의 적어도 하나의 사전 실행으로부터 획득되는 런타임 정보에 적어도 부분적으로 기초하는, 시스템.
  13. 제11항에 있어서,
    상기 복수의 인스턴스들은 제1 인스턴스를 포함하고;
    상기 제1 인스턴스에 대한 컴파일러 옵션은 비제약된 메모리 사용, 메모리 사용의 최소화, 병행 연산들의 최대화, 및 연산들의 제약된 병행성으로 구성되는 그룹으로부터 선택되는, 시스템.
  14. 제11항에 있어서, 상기 명령들은,
    상기 복수의 인스턴스들 중 하나의 인스턴스를 일차 인스턴스로서 라벨링하고;
    모든 다른 인스턴스들을 이차 인스턴스들로서 라벨링하고;
    상기 애플리케이션에 의해 생성되는 제2 복수의 결과들 중 각각의 결과에 대해, 상기 결과에 대응하여, 상기 이차 인스턴스들로부터 각각의 출력들을 억제하기 위해 상기 처리 유닛을 더 프로그래밍하는, 시스템.
  15. 제14항에 있어서, 상기 명령들은,
    상기 제2 복수의 결과들 중 k개의 결과들을 생성한 후에 상기 일차 인스턴스의 실패를 식별하고 - k ≥ 1임 -;
    상기 일차 인스턴스를 실패된 인스턴스로서 라벨링하고;
    상기 k개의 결과들 각각에 대한 계산과 연관된 로직을 실행한 이차 인스턴스를 선택하고;
    상기 선택된 이차 인스턴스들을 상기 일차 인스턴스로서 재라벨링하기 위해 - 상기 재라벨링된 일차 인스턴스는 (k+1)번째 결과를 생성함 - 상기 처리 유닛을 더 프로그래밍하는, 시스템.
  16. 제11항에 있어서, 상기 소프트웨어 애플리케이션의 소스 코드의 적어도 일부는 적어도 부분적으로 해석되는 프로그래밍 언어를 사용하여 지정되는, 시스템.
  17. 소프트웨어 애플리케이션에 대한 페일오버를 위한 시스템으로서,
    제1 프로세서; 및
    상기 제1 프로세서와 전기 통신하는 제1 메모리를 포함하며, 상기 제1 메모리는 명령들을 포함하고, 상기 명령들은 상기 제1 프로세서 및 제2 프로세서 중 적어도 하나를 포함하는 처리 유닛에 의해 실행될 때,
    (i) 상기 소프트웨어 애플리케이션의 일차 인스턴스 - 상기 일차 인스턴스는 제1 컴파일러 옵션에 따라 컴파일됨 -, 및 (ii) 상기 애플리케이션의 제1 이차 인스턴스 - 상기 제1 이차 인스턴스는 상기 제1 컴파일러 옵션과 상이한 컴파일러 옵션에 따라 컴파일됨 - 의 동시 실행들을 감시하고;
    상기 소프트웨어 애플리케이션의 k개의 결과들의 생성 후에 상기 일차 인스턴스의 실패를 검출하고 - k ≥ 1임 -;
    상기 제1 이차 인스턴스가 상기 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하고;
    상기 제1 이차 인스턴스를 상기 일차 인스턴스로서 라벨링하기 위해 상기 처리 유닛을 프로그래밍하는, 시스템.
  18. 제17항에 있어서, 상기 명령들은 상기 k개의 결과들에 대응하는 상기 제1 이차 인스턴스의 출력들을 억제하기 위해 상기 처리 유닛을 더 프로그래밍하는, 시스템.
  19. 제17항에 있어서, 상기 제1 컴파일러 옵션은 저스트-인-타임(JIT) 컴파일화를 포함하고, 상기 제1 이차 인스턴스를 위해 사용되는 컴파일러 옵션은 어헤드-오브-타임(AIT) 컴파일화를 포함하는, 시스템.
  20. 제17항에 있어서, 상기 명령들은,
    (iii) 상기 애플리케이션의 제2 이차 인스턴스의 동시 실행을 감시하고 - 상기 제2 이차 인스턴스는 상기 제1 컴파일러 옵션 및 상기 제1 이차 인스턴스를 컴파일하기 위해 사용되는 컴파일러 옵션 둘 다와 상이한 컴파일러 옵션에 따라 컴파일됨 -;
    상기 제1 이차 인스턴스가 상기 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것이 확인되지 않으면,
    상기 제2 이차 인스턴스가 상기 k번째 결과를 계산하기 위해 요구되는 연산들을 계산했다는 것을 확인하고;
    상기 제2 이차 인스턴스를 상기 일차 인스턴스로서 라벨링하기 위해 상기 처리 유닛을 더 프로그래밍하는, 시스템.
KR1020167027986A 2014-03-11 2015-03-11 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들 KR102250613B1 (ko)

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

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020207034291A Division KR102250617B1 (ko) 2014-03-11 2015-03-11 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들

Publications (2)

Publication Number Publication Date
KR20160132434A true KR20160132434A (ko) 2016-11-18
KR102250613B1 KR102250613B1 (ko) 2021-05-10

Family

ID=54072362

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020207034291A KR102250617B1 (ko) 2014-03-11 2015-03-11 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들
KR1020167027986A KR102250613B1 (ko) 2014-03-11 2015-03-11 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020207034291A KR102250617B1 (ko) 2014-03-11 2015-03-11 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들

Country Status (9)

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

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

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
JP2007334643A (ja) * 2006-06-15 2007-12-27 Renesas Technology Corp プログラム実行方法、プログラム、およびプログラム実行システム
US20110088021A1 (en) * 2009-10-13 2011-04-14 Ezekiel John Joseph Kruglick Parallel Dynamic Optimization
US20110214016A1 (en) * 2010-03-01 2011-09-01 International Business Machines Corporation Performing Aggressive Code Optimization with an Ability to Rollback Changes Made by the Aggressive Optimizations

Family Cites Families (10)

* 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 並行処理方法およびシステム
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
US9081586B2 (en) * 2011-11-29 2015-07-14 Futurewei Technologies, Inc. Systems and methods for customizing optimization/transformation/ processing strategies

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
JP2007334643A (ja) * 2006-06-15 2007-12-27 Renesas Technology Corp プログラム実行方法、プログラム、およびプログラム実行システム
US20110088021A1 (en) * 2009-10-13 2011-04-14 Ezekiel John Joseph Kruglick Parallel Dynamic Optimization
US20110214016A1 (en) * 2010-03-01 2011-09-01 International Business Machines Corporation Performing Aggressive Code Optimization with an Ability to Rollback Changes Made by the Aggressive Optimizations

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
BR112016021037B1 (pt) 2023-10-17
KR102250613B1 (ko) 2021-05-10
CA2942359A1 (en) 2015-09-17
BR112016021037A2 (ko) 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
US11036422B2 (en) Prioritization and source-nonspecific based virtual machine recovery apparatuses, methods and systems
WO2017181591A1 (zh) 测试方法及系统
US10210005B2 (en) Systems and methods for data synchronization and failover management
US10896101B2 (en) Multiclient backup replication apparatuses, methods and systems
US9720753B2 (en) CloudSeer: using logs to detect errors in the cloud infrastructure
CN109522363B (zh) 基于区块链的云平台同步方法、系统、设备及存储介质
US11503109B2 (en) Processing an operation with a plurality of processing steps
JP7132999B2 (ja) アプリケーションの動作状態を検証する方法および装置
US9547565B2 (en) Techniques for message retransmission mechanism
US20220382637A1 (en) Snapshotting hardware security modules and disk metadata stores
US11080139B2 (en) Systems and methods for data synchronization and failover management
KR102250613B1 (ko) 데이터 동기화 및 페일오버 관리를 위한 시스템들 및 방법들
JP2015064636A (ja) 情報処理システム、分散処理方法、及び、プログラム
CN103391246A (zh) 报文处理方法及装置
US20160070564A1 (en) Dynamically schematized log messages for software applications
KR102160850B1 (ko) 메시지 재송신 메커니즘을 위한 기술들
CN111694686A (zh) 一种异常服务的处理方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant