docs: preserve direct-node architecture alternative
This commit is contained in:
165
ALTERNATIVE.md
Normal file
165
ALTERNATIVE.md
Normal file
@@ -0,0 +1,165 @@
|
||||
# Alternative Architecture: Direct Node Data Plane
|
||||
|
||||
This document preserves the original Clouderized Memories architecture principle:
|
||||
|
||||
> The cloud should coordinate the experience, but customer media should not routinely flow through Clouderized application servers.
|
||||
|
||||
The current PoC uses a broker-mediated relay because it is simpler to prove end to end. This alternative remains important because it is the stronger long-term privacy and bandwidth architecture.
|
||||
|
||||
## Core Principle
|
||||
|
||||
Separate the control plane from the data plane.
|
||||
|
||||
```text
|
||||
Control plane:
|
||||
client <-> Clouderized cloud
|
||||
|
||||
Data plane:
|
||||
client <-> customer storage node
|
||||
```
|
||||
|
||||
Clouderized cloud should handle identity, metadata, authorization, device registration, and node discovery. It should not be the normal path for original photo/video bytes.
|
||||
|
||||
## Components
|
||||
|
||||
### Control Plane
|
||||
|
||||
Cloud service responsible for:
|
||||
|
||||
- user accounts and sessions
|
||||
- device registration
|
||||
- storage-node enrollment
|
||||
- asset manifests
|
||||
- backup state
|
||||
- signed upload and fetch authorization
|
||||
- node online/offline status
|
||||
- billing and entitlement state
|
||||
|
||||
### Storage Agent
|
||||
|
||||
Lightweight service running on customer-owned hardware.
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- maintain a secure outbound control connection
|
||||
- expose a stable reachable media endpoint
|
||||
- receive authorized uploads
|
||||
- store encrypted media blobs on local storage
|
||||
- serve authorized encrypted blobs to clients
|
||||
- report capacity, health, and transfer outcomes
|
||||
- maintain local retry/checkpoint state
|
||||
|
||||
### Clients
|
||||
|
||||
Mobile and web clients are responsible for:
|
||||
|
||||
- authenticating with the control plane
|
||||
- requesting upload/download grants
|
||||
- uploading media directly to the storage node when possible
|
||||
- fetching thumbnails/media directly from the storage node when possible
|
||||
- decrypting and rendering media locally
|
||||
|
||||
## Preferred Data Path
|
||||
|
||||
```text
|
||||
Client <-> Customer Storage Agent
|
||||
```
|
||||
|
||||
The cloud authorizes the operation, but the actual media transfer happens directly between the client and the node.
|
||||
|
||||
## Fallback Data Path
|
||||
|
||||
```text
|
||||
Client <-> Encrypted Relay <-> Customer Storage Agent
|
||||
```
|
||||
|
||||
Relay fallback may be necessary for difficult networks, but the relay should only forward encrypted bytes. It should not process or persist original media.
|
||||
|
||||
## Addressing Model
|
||||
|
||||
Every storage node needs a stable logical address, independent of the customer's residential IP.
|
||||
|
||||
Candidate model:
|
||||
|
||||
```text
|
||||
<node-id>.edge.clouderized.com
|
||||
```
|
||||
|
||||
The hostname identifies the node. It should not imply a fixed public IP or manual router configuration.
|
||||
|
||||
Possible approaches:
|
||||
|
||||
- managed reverse tunnel fabric
|
||||
- direct peer connectivity with cloud signaling
|
||||
- hybrid transport with direct path first and relay fallback
|
||||
- existing tunnel substrate for early prototypes
|
||||
|
||||
Cloudflare-style HTTP tunnels are not sufficient as the only bulk media path because request-size limits can break large photo/video uploads.
|
||||
|
||||
## Upload Flow
|
||||
|
||||
```text
|
||||
1. Client asks the control plane for an upload session.
|
||||
2. Control plane verifies user, entitlement, node status, and policy.
|
||||
3. Control plane returns:
|
||||
- target node identity
|
||||
- short-lived upload token
|
||||
- expected metadata envelope
|
||||
4. Client streams encrypted payload directly to the storage node.
|
||||
5. Node validates the token and writes the blob locally.
|
||||
6. Node returns checksum/status.
|
||||
7. Control plane marks the asset committed.
|
||||
```
|
||||
|
||||
## View Flow
|
||||
|
||||
```text
|
||||
1. Client asks control plane for timeline metadata.
|
||||
2. Control plane returns asset summaries and short-lived fetch grants.
|
||||
3. Client fetches thumbnail/media bytes from the storage node.
|
||||
4. Client decrypts and renders locally.
|
||||
```
|
||||
|
||||
## Thumbnail Strategy
|
||||
|
||||
Preferred early strategy:
|
||||
|
||||
- mobile client generates thumbnails during upload
|
||||
- storage node stores both original and thumbnail blobs
|
||||
- browser fetches thumbnails from the node and decrypts them locally
|
||||
|
||||
Later options:
|
||||
|
||||
- storage agent generates thumbnails for imports
|
||||
- encrypted relay/cache for derived thumbnails if economics justify it
|
||||
|
||||
## Why This Matters
|
||||
|
||||
Compared with the current broker-relay PoC, this alternative has stronger:
|
||||
|
||||
- privacy story
|
||||
- bandwidth economics
|
||||
- long-term scalability
|
||||
- differentiation from normal cloud photo services
|
||||
|
||||
The tradeoff is higher engineering complexity around:
|
||||
|
||||
- node reachability
|
||||
- NAT traversal
|
||||
- resumable transfers
|
||||
- offline behavior
|
||||
- large video transfer reliability
|
||||
- cross-device key management
|
||||
|
||||
## Relationship To Current PoC
|
||||
|
||||
The current PoC is still valuable. It proves:
|
||||
|
||||
- outbound node connection
|
||||
- broker-controlled routing
|
||||
- upload into customer storage
|
||||
- reverse fetch from customer storage
|
||||
- Android-to-node workflow through a managed service
|
||||
|
||||
This alternative should guide the production architecture once the PoC graduates beyond proving the basic product loop.
|
||||
|
||||
Reference in New Issue
Block a user