Topics/Sections
Start High Level
Introduction
- Motivation
- Objective
Background
- Technology
- Programming models
Related Work
- Containers, Kubernetes: distributed application portability (lack constraints)
- For this paper I’m inclined to argue that FaaS is a subset of this with different practice
- ZeroMQ, …: messaging abstractions for DS (lack state, not really portable and modular, tool not solution)
- Faasm, Sledge, Wasm runtimes: address performance of containers, same technological background, no significant contribution in programming model, too much freedom (sockets)
- Akka, actor framework: yes programming model, but constrained by the framework implementation, no standard specification, no real reconfigurability
Vision
- …
Two linked lines of work
Programming Model
- Programming Abstractions and Abstraction levels
- High level architecture
- Scope of the programming model
- Distributed systems implemented with low level primitives
- Applications
- Programming Model
- Separation of Concerns
- Two sets of interfaces
- Application facing set of syscalls (part of the standard)
- Component interface derived from the application one (egg or chicken first?) note: this is an implementation characteristic of the runtime
- Developer roles
- Application developers
- Middleware developers
- System developers
- Interface as (evolving) standard
- Execution model decoupling
- Monolith
- Distributed
- *asS
Systems Aspects
- Intermediate layer: WebAssembly
- Compilation and execution model
- Intrinsic performance characteristics induced by the model (rt efficient impl of critical parts)
- Functional and non Functional requirements
- Configurability of the systems
- Differences in backing systems capabilities
- Anti-vendor-lock-in
- Transparent deployment modes
- Cross-platform portability
- Mobile code
Implementation + Interface
Maybe two sections
- Concrete version of the two previous sections
- The actual API
- Programming atoms and characteristics of the interface
- Radon runtime
- Characteristics of execution flow within the runtime
- Component interfaces
- Dynamic vs. Static dispatch
- State management for atoms
- Inter-operation between the rust code and the wasm
- …
Evaluation
- Distributed first
- Niente evaluation
- Modularity
- Layered
- Comporre servizi componendo atoms
- Dimostrato da KV-store / transactional KV-store
- Flexibility
- A livello di linguaggi
- Non va nell’evaluation (low priority)
- A livello di paradigmi di programmazione
- Event-based → dataflow
- Code mobility / client-server → serverless/distributed scheduler
- Applicazione a microservizi deployata staticamente alla serverless (DeathStar?)
- Stessa applicazione eseguita con un distributed scheduler per code mobility
- Partiamo dalle nostre impl con numeri standalone, se abbiamo tempo confrontiamo con versione microservice uffciale
- Request-response / P2P → KV-store (le shard sono di fatto peers)
- A livello di linguaggi
- Performance
- Lightweight
- Microbenchmark con costo chiamate di funzioni Radon
- Confronto KV-store / Anna
- Confronto Nexmark / Flink
- Lightweight
- Configurability
- Puoi adattare runtime per incontrare i requirements
- KV-store e/o Dataflow
- Puoi adattare runtime per incontrare i requirements
- Portability
- Diverse piattaforme hardware
- ARM / x86
- Diverse piattaforme hardware
Future
- Extensibility for Accelerators
- Static code analysis and Isolation using existing approach
- Programming model with guarantees on top of the interface
Structure discussion
- Inizio con introduction, background (e anche related work subito magari), poi la vision ad alto livello che setta lo scope e la struttura del lavoro
- Poi dividere in due macro filoni la narrazione trattando da un lato la parte di programming model e dall’altro l’aspetto systems
- L’idea sarebbe di presentare i due aspetti come quasi separati, ma facendo riferimento alle conseguenze che uno ha sull’altro
- Queste due sezioni di fatto descrivono la contribution a livello teorico facendo riferimento solo tangenzialmente alla current implementation
- A questo punto la sezione implementation ricongiunge il modello teorico e le caratteristiche systems che ne derivano a un sistema concreto che è l’implementazione attuale
- Forse nella sezione programming model non farei nemmeno riferimento all’interfaccia specifica che abbiamo, ma ci rifletterei più a livello generale (discorso distributed operating systems e caratteristiche del programming model as a whole) per poi presentare l’interfaccia che abbiamo scelto nella parte di implementation. Poi a sua volta questa sezione potrebbe essere divisa in due parti, una di API e una vera e propria di impl
- Eval poi continua con quello che abbiamo giĂ discusso sulla struttura
- Chiusura forte poi sul future work presentando le possibilità che apre un modello e sistema di questo tipo (programing models costruiti sopra con guarantees, applicazione di tech wasm per rendere il tutto ancora più interessante, come static analysis varie, isolation, aspetti di security etc, possibilità di aggiungere un’estensione all’interfaccia per supportare acceleratori hardware se disponibili per supportare AI e cagate varie, chi più ne ha più ne metta) che allo stesso tempo serve a rinforzare la motivation per il lavoro perché fa vedere quante applicazioni abilita
La divisione Programming Model vs. Systems sarebbe oltre per chiarezza che spero sia più semplice raccontare le cose sezionandole perpendicolarmente così e anche per fittare allo scope della venue con una divisione che rispetta i main topics di ASPLOS