アセンブルリフトV 0 .2プレビュー:RPCベースのIOモジュール


私は最終的に更新を与えることができるので、それはlooooong分だったように感じるAssemblyLift . 実際の生活は忙しいです、夏の暑さは私を低迷させ、私は最終的に休暇を取った!
それでも、私の余暇では、私はアセンブルリフトの次の主要な改正のまわりで中心的な仕事を終えることができました.それは私が予想して、計画した限り、ほぼ正確に2倍かかりました、しかし、私はそれが余分の努力の価値があると思います.
私はプラグインシステムを書いていると考えて1ヶ月を費やしましたが、それはかなりもろいで、メモリの安全性に関して私に問題を与えました.だから私は別の月に基づいてソリューションを解決するにはCap'n Proto RPC , そして、今までは、それは報われたようです!

何を話しているのか、とにかく?


AssemblyLift 私が開発してきたフレームワークは、AWSラムダのようなサービスを実行しているServerlessなクラウド・アプリケーションを構築するためのコード&ツールを提供します.AssemblyFillアプリは錆(より多くのクライアントの言語に来て書かれている!)を参照してください.
webassemblyとしてのServerless関数の実行にはいくつかの利点があります.
  • webassemblyモジュールは本質的に分離されます.それらは自身のメモリ空間内で動作し、デフォルトではソケットをオープンしたり、下にあるファイルシステムにアクセスできません.
  • それらはしばしば、JavaScriptやPythonで書かれた対応するものよりも速く、ラムダの共通言語選択の両方である.
  • メモリーフットプリントと展開パッケージのサイズに関して、彼らは重さでより軽くありえます.
  • いくつかの言語がwebassemblyにコンパイルされ、共通の実行環境で開発者の選択を提供します.
  • それ自身では、その最初のポイントは問題のように見えるかもしれません--私たちはおそらく、ある時点で外側の世界と通信する必要があるでしょう.幸運にも、実装によって、システムコードに独自のシステムABIを提供することができます.AssemblyLiftはAWAラムダのような場所でモジュールを実行するのを容易にする独自のABIを提供します.
    AssemblyFutureはモジュールに対して低レベルのAPIを提供しようとするのではなく、WASMモジュールがアクセスできるプラグインのようなモジュールを登録する標準インターフェースを提供します.ネットワークまたはストレージアクセスを必要とするタスクは、これらのプラグインモジュールで実装され、WASMモジュールはランタイムホストを介して通信されます.
    AssemblyLiftフレームワークでは、これらのプラグインモジュールはIOモジュール(私はしばしばiomodに省略されます)と呼ばれます.システムの設計と実装Haskell's approach to IO , したがって、名前🙂.
    V 0で.アセンブリーリフトの1つのシリーズ、もののiomod部分は概して存在します、しかし、(現在孤立している)Dynamodbモジュールは静的にホストバイナリの残り(本質的に概念の証明として)にコンパイルされます.私の目標はIOMODSをパッケージとして分配することを許容することでした.

    NEO - O !それではどのようにすべての仕事ですか?何のようですか。


    高いレベルでは、次の図のように少し見えます私は私のベストを理解してC4 model .

    我々はいくつかの実装の詳細については明らかに我々はglossingしているが、基本的な考え方は本当に簡単です.少し深く飛び込むには、アセンブリーリフトの例を見てみましょう.簡単なネットワークコールをどのように行うかを🙂.
    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));
    });
    
    上記の例では、ListTables . このメソッドはlist_tables , シングルを取るinput 引数.
    すべてのiomod呼び出しはこの構造を持っていますoutput_struct = call(input_struct) ), 呼び出しは常に非同期です.The list_tables 機能は、iomod「ゲスト木枠」から来ます-さびモジュールは、IOモジュールにWASM互換のゲスト・インターフェースを提供します.
    呼び出すときlist_tables , ゲストはAssemblyFill ABIを呼び出して、そのメソッドを呼び出します.AssemblyFillランタイムは、IOMODホストプロセスでRPC経由でメソッドをローカライズして呼び出します.

    パッケージと展開


    現在の実装では、IOMDDSはAssemblyFillアプリケーションでサービスごとに定義されます.AWSラムダに展開されると、各サービスはラムダレイヤによってバックアップされます.AssemblyFlightランタイムが起動すると、環境に階層化されているすべてのバイナリが生成されます.

    何時にできますか。


    私は10月初旬、私はすべてをクリーンアップし、より多くのテストを行う時間までを目指しています.このiomodのものも、私がV 0のために計画したすべてを含みません.2 . x、しかし、私は他のすべてを次のメジャーリリースに押し出すかもしれません.我々は見てみましょう-滞在調整!😊
    11月8日更新:ioModsは現在v 0で利用可能です.アセンブルリフトの2 . x行