From c456f3e29617d1cd64357f950ecaaeb87e6c2201 Mon Sep 17 00:00:00 2001 From: zetaloop Date: Tue, 5 May 2026 12:29:47 +0800 Subject: [PATCH] fix(snowflake): support per-replica WorkerId via env for multi-instance StatefulSet --- app/snowflake/rpc/etc/snowflake.yaml | 4 ++-- deploy/dev/docker-compose.yml | 3 +++ deploy/k01/02-service/snowflake.yaml | 30 +++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/app/snowflake/rpc/etc/snowflake.yaml b/app/snowflake/rpc/etc/snowflake.yaml index 5ba165e..0365e7d 100644 --- a/app/snowflake/rpc/etc/snowflake.yaml +++ b/app/snowflake/rpc/etc/snowflake.yaml @@ -2,5 +2,5 @@ Name: snowflake.rpc ListenOn: 0.0.0.0:8080 Snowflake: - DatacenterId: 1 - WorkerId: 0 + DatacenterId: ${SNOWFLAKE_DATACENTER_ID} + WorkerId: ${SNOWFLAKE_WORKER_ID} diff --git a/deploy/dev/docker-compose.yml b/deploy/dev/docker-compose.yml index 8d40101..9f15b03 100644 --- a/deploy/dev/docker-compose.yml +++ b/deploy/dev/docker-compose.yml @@ -210,6 +210,9 @@ services: image: juwan/snowflake-rpc:dev container_name: juwan-snowflake restart: unless-stopped + environment: + SNOWFLAKE_DATACENTER_ID: 1 + SNOWFLAKE_WORKER_ID: 0 authz-adapter: image: juwan/authz-adapter:dev diff --git a/deploy/k01/02-service/snowflake.yaml b/deploy/k01/02-service/snowflake.yaml index ce53e0e..8f84ee6 100644 --- a/deploy/k01/02-service/snowflake.yaml +++ b/deploy/k01/02-service/snowflake.yaml @@ -1,11 +1,12 @@ apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: name: snowflake namespace: juwan labels: app: snowflake spec: + serviceName: snowflake-headless replicas: 1 selector: matchLabels: @@ -20,6 +21,18 @@ spec: containers: - name: snowflake image: registry.juwan.xhttp.zip/juwan/snowflake-rpc:latest + command: ["/bin/sh", "-c"] + args: + - | + export SNOWFLAKE_WORKER_ID="${POD_NAME##*-}" + exec /app/main -f /app/etc/snowflake.yaml + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: SNOWFLAKE_DATACENTER_ID + value: "1" ports: - name: grpc containerPort: 8080 @@ -28,6 +41,21 @@ spec: cpu: 20m memory: 32Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: snowflake-headless + namespace: juwan +spec: + clusterIP: None + selector: + app: snowflake + ports: + - name: grpc + port: 8080 + targetPort: 8080 + --- apiVersion: v1 kind: Service