[ 
https://issues.apache.org/jira/browse/SPARK-58455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

L. C. Hsieh updated SPARK-58455:
--------------------------------
    Description: 
This SPIP proposes an official gateway component for Spark Connect deployments.

Problem:

  A Spark Connect client has to know the address of one specific server and stay
  with it for the lifetime of its session, because session state lives in that
  server's driver. As soon as a deployment runs more than one Spark Connect
  server — per-team servers, capacity, redundancy — there is no built-in way to
  put a single address in front of the fleet. A generic load balancer cannot
  do this: the routing key (session_id) lives inside the request protobuf, not
  in headers. Today every team writes its own proxy glue.

Proposal: 

  The Spark Connect Gateway is a standalone, wire-compatible gRPC proxy in front
  of a pool of Spark Connect servers.

  Clients are untouched: the connection string points at the gateway and nothing
  else changes. The proposal adds nothing to and changes nothing in the Spark
  Connect protocol.

SPIP document: 
https://docs.google.com/document/d/16RNnRJjSDBSlcgeBjVz_Mv-SkqvH33F9tIsR1Ii_P3c/edit?usp=sharing


  was:
This SPIP proposes an official gateway component for Spark Connect deployments.

Problem

  A Spark Connect client has to know the address of one specific server and stay
  with it for the lifetime of its session, because session state lives in that
  server's driver. As soon as a deployment runs more than one Spark Connect
  server — per-team servers, capacity, redundancy — there is no built-in way to
  put a single address in front of the fleet. A generic load balancer cannot
  do this: the routing key (session_id) lives inside the request protobuf, not
  in headers. Today every team writes its own proxy glue.

Proposal

  The Spark Connect Gateway is a standalone, wire-compatible gRPC proxy in front
  of a pool of Spark Connect servers, providing:

  * Session-affinity routing keyed on (tenant, user, session_id), round-robin
    placement for new sessions
  * Backend discovery via static lists or Kubernetes Endpoints watching
    (composes with plain Deployments, apache/spark-kubernetes-operator, and the
    Kubeflow Spark Operator)
  * Multi-replica HA via a shared affinity store (Redis reference backend behind
    a pluggable interface; single-replica deployments need no external store)
  * Authentication (none / static tokens / JWT / OIDC), identity-based tenant
    resolution, and per-tenant backend pools
  * Per-tenant rate limiting, structured audit logging, Prometheus metrics,
    OpenTelemetry tracing
  * Helm chart for deployment

  Clients are untouched: the connection string points at the gateway and nothing
  else changes. The proposal adds nothing to and changes nothing in the Spark
  Connect protocol.

  *Non-goals*: driver lifecycle management (stays with the operator /
  provisioner), distributing one query across drivers, session-state replication
  across drivers, TLS termination (delegated to ingress / service mesh).

SPIP document: 
https://docs.google.com/document/d/16RNnRJjSDBSlcgeBjVz_Mv-SkqvH33F9tIsR1Ii_P3c/edit?usp=sharing



> SPIP: Spark Connect Gateway — Session Affinity, Auth, and Multi-Tenancy for 
> Spark Connect Servers
> -------------------------------------------------------------------------------------------------
>
>                 Key: SPARK-58455
>                 URL: https://issues.apache.org/jira/browse/SPARK-58455
>             Project: Spark
>          Issue Type: New Feature
>          Components: Connect
>    Affects Versions: 4.3.0
>            Reporter: L. C. Hsieh
>            Assignee: L. C. Hsieh
>            Priority: Major
>              Labels: SPIP
>
> This SPIP proposes an official gateway component for Spark Connect 
> deployments.
> Problem:
>   A Spark Connect client has to know the address of one specific server and 
> stay
>   with it for the lifetime of its session, because session state lives in that
>   server's driver. As soon as a deployment runs more than one Spark Connect
>   server — per-team servers, capacity, redundancy — there is no built-in way 
> to
>   put a single address in front of the fleet. A generic load balancer cannot
>   do this: the routing key (session_id) lives inside the request protobuf, not
>   in headers. Today every team writes its own proxy glue.
> Proposal: 
>   The Spark Connect Gateway is a standalone, wire-compatible gRPC proxy in 
> front
>   of a pool of Spark Connect servers.
>   Clients are untouched: the connection string points at the gateway and 
> nothing
>   else changes. The proposal adds nothing to and changes nothing in the Spark
>   Connect protocol.
> SPIP document: 
> https://docs.google.com/document/d/16RNnRJjSDBSlcgeBjVz_Mv-SkqvH33F9tIsR1Ii_P3c/edit?usp=sharing



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to