Live data from Hacker News

Session-lived Application Backends

driftingin.space

11–17 of 17 posts

Re: Session-lived Application Backends

#12
post #9

Earlier quoted context omitted.

Thanks! Convex looks neat, and you’re right, there is a lot going on at the data and data/frontend layer. Our approach is to provide a generic compute layer with the session-lived backend model, so you can do more than just store data with it.

So, I presume, instead of a shared multi-tenant architecture convex), Spawner prefers per-user business-logic container + a per-user database container (+ any other module)? If so, once a user-session is adjudged to have been over, does Spawner snapshot them all to restore it whenever a session is to be resumed?

You could run a database for each user inside Spawner, and there are use cases for that, like being able to run queries against arbitrary parquet files or materializing a sample of a larger dataset for fast queries. But in general if you just want to store program state, you would probably want to use Spawner for the compute and a multi-tenant database for persistence. We expect that Spawner will usually be part of a larger system that involves some multi-tenant components.

Spawner doesn’t manage any persistence automatically, it’s up to the application. For some use cases, sessions are meant to be ephemeral (like a whiteboard session, or read-only data exploration), so there’s no state to persist at the end.

For apps where there is state to persist, one option is desktop-style auto-save. By that I mean that the ground truth document state is in-memory, but every change to it triggers an asynchronous write to a persistent store. This is preferable to one-shot persistence at the end of the session for the same reason as it is on desktop apps: if there’s a power outage or hardware failure, you only lose a few seconds of work.

Re: Session-lived Application Backends

#13
Is there an easy way to achieve on-demand docker containers this way? As I understand this, for a private setup, I'd have to code the initialisation and run Kubernetes as well? Might be a noob question, but i have a few containers which are really resource intensive and spin them up manually when needed.

Possibly I'm not the right audience, but a guide on how to get your current docker setup incorporated into your service might be useful for people wanting to give it a spin.

Re: Session-lived Application Backends

#14

Somehow, that's the default model when working with Phoenix/Elixir.

As long as you deploy it to infrastructure that supports direct communication between servers. Few cloud providers offer that in managed application platforms (e.g. Google's App Engine doesn't offer it).

Re: Session-lived Application Backends

#16
Blazor [1] has a concept of "circuits" [2] where each connected browser has a corresponding instance on the server.

It's part of the reason why I personally don't like it being recommended for simple CRUD apps (brings back memories of webforms) as it doesn't seem very "webby", but this makes a great point that for some kinds of apps it's the best or at least a very advantageous model.

It's great to grow terminology and maturate platforms so that we can recognize and then adopt appropriately.

[1] https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blaz... [2] https://docs.microsoft.com/en-us/aspnet/core/blazor/state-ma...

Re: Session-lived Application Backends

#17

Is there an easy way to achieve on-demand docker containers this way? As I understand this, for a private setup, I'd have to code the initialisation and run Kubernetes as well? Might be a noob question, but i have a few containers which are really resource intensive and spin them up manually when needed. Possibly I'm not the right audience, but a guide on how to get your current docker setup incorporated into your se…

Just to make sure I'm understanding, you want to run docker containers on demand (and programmatically), but you want to run them on a single machine, so Kubernetes feels like overkill, right?

Your best bet might just be invoking the docker command-line tool directly from your code.

Post reply on HN