AssemblyLift v0.2 미리보기: RPC 기반 입출력 모듈
그럼에도 불구하고 여가 시간에 나는 Assembly Lift의 다음 중대한 수정의 핵심 작업을 완성하려고 노력했다.이것은 내가 예상한 것과 계획의 거의 두 배이지만, 나는 이것이 추가적인 노력을 기울일 가치가 있다고 생각한다.
나는 플러그인 시스템을 쓰는 데 한 달이 걸렸지만, 그 결과 플러그인이 상당히 취약하고 메모리 보안에 문제가 있다는 것을 증명했다.그래서 저는 한 달 동안 Cap'n Proto RPC를 바탕으로 해결 방안을 다시 개발했습니다. 지금까지 그 해결 방안은 보답을 받은 것 같습니다.
우리 도대체 무슨 소리 하는 거야?
AssemblyLift는 제가 계속 개발하고 있는 프레임워크입니다. 이것은 AWS Lambda 등 서비스에 실행되는 서버 없는 클라우드 응용 프로그램을 구축하기 위해 코드와 도구를 제공합니다.Assembly Lift 응용 프로그램은 Rust로 작성되었습니다. (클라이언트 언어가 더 있습니다!)WebAssembly(WASM)로 컴파일됩니다.
서버 없는 기능을 WebAssembly 형식으로 실행하면 다음과 같은 이점이 있습니다.
AssemblyLift는 모듈에 하위 API(예: POSIX 소켓)를 제공하려는 대신 WASM 모듈이 액세스할 수 있는 플러그인 모듈을 등록하는 표준 인터페이스를 제공합니다.네트워크 또는 스토리지 액세스가 필요한 작업은 이러한 플러그인 모듈에서 수행되며 WASM 모듈은 실행 시 호스트를 통해 플러그인 모듈과 통신합니다.
Assembly Lift 프레임워크에서 이 플러그인 모듈은 IOMOd라고 불린다.시스템의 설계와 실현에 대한 영감 Haskell's approach to IO🙂.
Assembly Lift의 v0.1 시리즈에서 IOMod 부분은 대체적으로 존재하지만 (현재 유일한) DynamoDB 모듈은 호스트 바이너리 파일의 나머지 부분으로 정적으로 컴파일된다(기본적으로 개념으로 증명된다).내 목표는 IOMOD를 패키지로 나누어 주는 것이다. 이것은 실행할 때 모든 함수에 따라 불러올 수 있어야 한다는 것을 의미한다.
깔끔하다!그렇다면 이 모든 것은 어떻게 작동합니까?얘가 뭘 닮았어요?
비교적 높은 차원에서 그것은 보기에 약간 아래 그림과 같다.나는 최선을 다해 이해하고 견지한다C4 model.
분명히 우리는 세부 사항을 실현하는 것을 소홀히 했지만 기본 사상은 사실상 매우 간단하다.좀 더 깊이 있게 하기 위해서, 우리는 Assembly Lift 예시를 보고, 간단한 네트워크 호출을 어떻게 하는지 이해합시다🙂.
extern crate asml_awslambda;
use direct_executor;
use asml_core::GuestCore;
use asml_awslambda::{*, AwsLambdaClient, LambdaContext};
use asml_iomod_dynamodb::{structs, list_tables};
handler!(context: LambdaContext, async {
let input: structs::ListTablesInput = Default::default();
let response = list_tables(input).await; // this is our IOmod call
AwsLambdaClient::success(format!("Got response {:?}", response));
});
위의 예제에서는 DynamoDB IOMod 호출ListTables을 사용합니다.이 방법은 list_tables
에 의해 실현되고 단일input
파라미터를 받아들인다.모든 IOMod 호출은 이런 구조(즉
output_struct = call(input_struct)
가 있고 호출은 항상 비동기적이다.list_tables
IOMod "고객 섀시"– WASM과 호환되는 고객 인터페이스를 IO 모듈에 제공하는 녹슨 섀시입니다.호출
list_tables
시 게스트는 Assembly Lift ABI를 호출하여 호출을 나타냅니다.AssemblyLift가 실행될 때 IOMod 호스트 프로세스의 RPC를 통해 순서대로 위치를 정하고 이 방법을 호출합니다.패키지 및 배포
현재 구현에서 IOMOD는 Assembly Lift 응용 프로그램에서 모든 서비스에 대해 정의됩니다.AWS Lambda에 배치할 때, 모든 서비스는 Lambda 층에서 지원되며, 이 층은 서비스 기능에 필요한 모든 IOMod 바이너리 파일을 포함한다.AssemblyLift가 실행될 때 시작할 때 환경에 계층화된 모든 바이너리 파일이 생성됩니다.
언제 준비 됐어요?
나의 목표는 10월 초이다. 그때 나는 모든 것을 정리하고 더 많은 테스트를 할 것이다.IOMod의 내용도 내가 v0.2를 위해 계획한 모든 내용을 포함하지 않는다.x. 하지만 다른 모든 내용을 다음 주요 버전으로 옮길 수 있습니다.기대해 봅시다--기대해 주세요!😊
2020년 11월 8일 업데이트: IOMOD는 현재 v0.2에서 제공됩니다.승강기를 조립하는 x선
Reference
이 문제에 관하여(AssemblyLift v0.2 미리보기: RPC 기반 입출력 모듈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dotxlem/assemblylift-v0-2-preview-rpc-based-io-modules-2d38텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)