Windows 빌드 (NetCore3.1) :
Windows 빌드 (NetFramework 461) :
Linux 빌드 (NetCore3.1) :
노드 JS (netcore3.1) :
노드 JS (NetFramework 461) :
Ambrosia는 고도로 강력한 분산 응용 프로그램을 작성하고 배포하기위한 프로그래밍 언어 독립적 인 접근 방식입니다. Ambrosia는 복구 및 고 가용성을 자동으로 제공함으로써 개발 및 배포 비용 및 시장 시간을 극적으로 낮 춥니 다.
오늘날 클라우드에서 실행되는 가장 인기있는 서비스를 포함하여 오늘날의 데이터 센터 지향 애플리케이션은 매우 복잡하고 분산 소프트웨어 스택으로 구성됩니다. 예를 들어, 그들은 일반적으로 이벤트 허브 또는 kafka를 통합하여 복구 가능성을 위해 입력 및 상호 작용을 강력하게 통합하고, 디버그 가능성을 위해 Azure Blobs와 같은 상점에 중요한 정보를 기록하고, 분산 트랜잭션과 같은 매우 비싼 메커니즘 및 분산 된 지속적인 백엔드를 갖춘 무국적 기능을 사용합니다. 서비스 코드를 정확히 한 번 실행하는지 확인하십시오.
대조적으로, Ambrosia는 개발자가 복잡한 시스템을 짜거나 지나치게 비싼 메커니즘을 사용하지 않고 프로그래머에게 복구 가능성, 고 가용성, 디버그 가능성, 업그레이드 가능성 및 정확히 한 번 실행할 수있게합니다.
Ambrosia의 구현 및 성능에 대해 자세히 알아 보려면 VLDB 용지를 읽을 수 있습니다.
우리는 Ambrosia를 구축하거나 기여하고자하는 개발자를 Gitter 커뮤니티에 초대합니다.
암 브로 시아 개념
작동 방식
특징
응용 프로그램 개발자를위한 빠른 시작
Ambrosia 기고자의 빠른 시작
참조
의존성
언어 지원
용법
서비스 간의 보안 커뮤니케이션
비교
가상 탄력성 은 일반적으로 로그를 사용하는 (아마도 분산 된) 프로그래밍 및 실행 환경의 메커니즘으로, 장애를 자동으로 마스킹하기 위해 응용 프로그램의 재생 가능 결정 론적 특성과 직렬화 가능성을 이용합니다.
우리는 가상 복원력이라는 용어를 사용하여 Ambrosia의 메커니즘을 설명하여 프로그래머가 응용 프로그램을 실패한 방식으로 적용 할 수 있도록하여 응용 프로그램 작성자가 복구 또는 상태 보호를위한 논리를 작성할 필요가 없습니다. 일반적으로 SQL 변형으로 쿼리를 표현하는 데이터 처리 시스템은 수십 년 동안 쿼리 작성자에게 가상 복원력을 제공했습니다. 반드시 SQL을 사용하지 않는 MAP-Reduce Systems 도이 기능을 제공합니다. 이 모든 경우 에이 기능은 Ambrosia와 같이 결정적으로 재생하는 기능을 활용합니다.
Ambrosia를 통해 가상 복원력을 달성하기 위해서는 응용 프로그램이 다음 계약을지지해야합니다. 일부 초기 상태에서 동일한 주문에서 동일한 요청을 동일한 최종 상태 와 동일한 주문의 동일한 나가는 요청을 모두 발생시킵니다. .
Ambrosia의 기본 빌딩 블록은 RPC를 통해 통신하는 불멸 의 신뢰할 수있는 분산 물체입니다. 불멸의 상태는 해당 상태에서 작동하는 지속적인 상태와 RPC 처리기 세트를 정의합니다. 불멸의 인스턴스는 상태를 유지하고 불멸의 정의에 따라 RPC 핸들러를 실행하는 명명 된 엔티티입니다. Ambrosia 응용 프로그램은 종종 동일한 불멸의 여러 사례를 가지고 있습니다. 예를 들어, 응용 프로그램은 데이터 처리 작업을 실행하기위한 단일 "작업"불멸을 정의하고 다른 데이터 세트에서 작동하는 해당 작업의 여러 인스턴스를 실행할 수 있습니다.
아래 그림은 Ambrosia 응용 프로그램의 기본 아키텍처를 간략하게 설명하며, 불멸이라고 불리는 두 가지 의사 소통 Ambrosia 서비스를 보여줍니다. 그림의 내부 상자는 2 개의 개별 프로세스 또는 C#의 경우 하나의 통합 프로세스에서 실행될 수있는 코드를 나타냅니다. 불멸의 각 인스턴스는 응용 프로그램 프로세스 내부에서 실행되는 소프트웨어 객체 및 제어 스레드로 존재합니다. 불멸의 인스턴스는 불멸의 코디네이터를 통해 다른 불멸의 사례와 통신하는데, 이는 인스턴스의 RPC를 철저히 기록하고 RPC를 보내는 데 필요한 저수준 네트워킹을 캡슐화합니다. 로그의 요청 위치는 실행을 위해 신청 프로세스에 제출 된 순서를 결정한 다음 복구시 재영구를 결정합니다.
또한 언어 특이 적 암브로 시아 결합은 상태 시리얼 라이저를 제공합니다. 회복 중에 서비스가 시작될 때부터 재생을 피하기 위해 불멸의 코디네이터는 때때로 응용 프로그램 상태를 포함하는 불멸의 상태를 체크 포인트합니다. 이 직렬화가 제공되는 방식은 언어마다 또는 동일한 언어의 바인딩에 따라 다를 수 있습니다.
다음은 Ambrosia가 응용 프로그램 개발자 및 배포자에게 제공하는 기능 목록입니다.
Ambrosia에서 실행할 새로운 서비스를 정의하십시오
Ambrosia에 서비스를 배포합니다
디버그 서비스 인스턴스
활성 활성
업그레이드 라이브, 테스트 업그레이드
RPC
비동기 RPC (알파)
Ambrosia에서 서비스를 받고 실행하려면 샘플 중 하나부터 시작하십시오.
이 bash 스크립트를 사용하여 Ambrosia 불멸 코디네이터 및 C# 클라이언트 코드 생성기를 구축하십시오.
./build_dotnetcore_bindist.sh
.NET Core SDK가 주어지면 Windows, Mac OS 또는 Linux에서 작동합니다. 그 후, 당신은 작업 사본 내에 ./bin
디렉토리 내부에 Ambrosia 이진 분포를 구축했습니다.
또한 기고 가이드를 확인하십시오.
Ambrosia는 현재 복제 스토리지에 로그를 작성하기 위해 Azure 구독이 필요합니다. 앞으로이 구성 요소를 추상화하여 로그에 다른 스토리지 옵션을 사용할 수있을 것으로 예상됩니다.
Ambrosia는 현재 .NET Core 및 .NET Framework에서 C#을 지원합니다. 2.0.0.0 릴리스 기준으로 Ambrosia는 또한 TypeScript를 사용하여 Node.js를 지원합니다. 우리는 앞으로 다른 언어에 대한 지원을 추가하기를 희망합니다.
Usage: dotnet Ambrosia.dll RegisterInstance [OPTIONS] Options: -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -cs, --createService=VALUE [A - AutoRecovery | N - NoRecovery | Y - AlwaysRecover]. -ps, --pauseAtStart Is pause at start enabled. -npl, --noPersistLogs Is persistent logging disabled. -lts, --logTriggerSize=VALUE Log trigger size (in MBs). -aa, --activeActive Is active-active enabled. -cv, --currentVersion=VALUE The current version #. -uv, --upgradeVersion=VALUE The upgrade version #. -h, --help show this message and exit Usage: dotnet Ambrosia.dll AddReplica [OPTIONS] Options: -r, --replicaNum=VALUE The replica # [REQUIRED]. -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -cs, --createService=VALUE [A - AutoRecovery | N - NoRecovery | Y - AlwaysRecover]. -ps, --pauseAtStart Is pause at start enabled. -npl, --noPersistLogs Is persistent logging disabled. -lts, --logTriggerSize=VALUE Log trigger size (in MBs). -aa, --activeActive Is active-active enabled. -cv, --currentVersion=VALUE The current version #. -uv, --upgradeVersion=VALUE The upgrade version #. -h, --help show this message and exit Usage: dotnet Ambrosia.dll DebugInstance [OPTIONS] Options: -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -c, --checkpoint=VALUE The checkpoint # to load. -cv, --currentVersion=VALUE The version # to debug. -tu, --testingUpgrade Is testing upgrade. -h, --help show this message and exit
Ambrosia에 배포 된 분산 구성 요소간에 통신을 확보하는 방법에 대해 읽으십시오.