Skip to content

lab12: WebAssembly Moscow-time endpoint on Spin SDK + TinyGo#1340

Open
1r444444 wants to merge 4 commits into
inno-devops-labs:mainfrom
1r444444:feature/lab12
Open

lab12: WebAssembly Moscow-time endpoint on Spin SDK + TinyGo#1340
1r444444 wants to merge 4 commits into
inno-devops-labs:mainfrom
1r444444:feature/lab12

Conversation

@1r444444

@1r444444 1r444444 commented Jul 5, 2026

Copy link
Copy Markdown

Lab 12 β€” WebAssembly Containers

Task 1 β€” Spin SDK component (4 pts)

  • wasm/main.go: HTTP handler using spinhttp.Handle, returns Moscow time JSON (unix, iso, hour_minute, timezone)
  • wasm/spin.toml: HTTP trigger at /time, allowed_outbound_hosts = [], TinyGo wasip1 -buildmode=c-shared build
  • Scaffolded from spin new -t http-go, SDK github.com/spinframework/spin-go-sdk/v2
  • Uses time.FixedZone("Moscow/UTC+3", 3*60*60) β€” TinyGo has no tzdata for time.LoadLocation
  • curl http://127.0.0.1:3000/time β†’ {"unix":...,"iso":"2026-07-05T15:16:44+03:00","hour_minute":"15:16","timezone":"Europe/Moscow (UTC+3)"}
  • Design questions a–d answered in submissions/lab12.md

Task 2 β€” Perf comparison vs Lab 6 Docker (4 pts)

Dimension Lab 6 Docker Lab 12 WASM/Spin
Artifact size 21.6 MB 359 KB
Cold start p50 190 ms 80 ms
Warm latency p50 7.6 ms 5.5 ms
Warm latency p95 ~9.4 ms ~7.6 ms

Measured with hyperfine --warmup 10 --runs 100 on Apple M-series / macOS, Spin 3.4.0, TinyGo 0.41.0.
Design questions e–g answered in submissions/lab12.md.

Bonus β€” Two WASM execution models (2 pts)

  • wasm-cli/main.go: standalone WASI CLI module (no Spin SDK) β€” reads REQUEST_METHOD/PATH_INFO from env, prints Moscow-time JSON to stdout
  • Build: tinygo build -target=wasi -no-debug -o main.wasm; Run: wasmtime run --env REQUEST_METHOD=GET --env PATH_INFO=/time main.wasm
  • wasm-cli 191 KB vs Spin component 359 KB; cold start ~35 ms per invocation vs ~80 ms for Spin startup
  • Design questions h–j answered in submissions/lab12.md

Toolchain

  • Spin 3.4.0, TinyGo 0.41.0, Go 1.26.4 (GOROOT override for TinyGo 0.41 overlay compatibility), wasmtime 46.0.1, hyperfine

1r444444 added 4 commits June 9, 2026 09:25
Signed-off-by: Irina <irina.bychkova06@mail.ru>
Signed-off-by: Irina <irina.bychkova06@mail.ru>
Task 1: Spin component (wasm/) serving GET /time with Moscow time JSON,
built with TinyGo 0.41 + wasip1 + -buildmode=c-shared. Uses time.FixedZone
for UTC+3 (no tzdata in TinyGo) and fmt.Fprintf for JSON (no reflect).

Task 2: Perf table vs Lab 6 Docker β€” WASM artifact 359 KB vs 21.6 MB image;
cold start ~80 ms vs ~190 ms; warm latency p50 5.5 ms vs 7.6 ms.

Bonus: wasm-cli/ standalone WASI CLI module (no Spin SDK, bare wasmtime run),
191 KB, ~35 ms cold start per invocation. Demonstrates wasi-http vs CLI model.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant