Skip to content

Operations

1. Deployment

Thuộc tínhGiá trị
Imageregistry/taxation:<tag> (build từ packages/taxation/Dockerfile)
Container Port3000 (external 31130)
Replicas1 (Snowflake worker id 13 hardcode — xem cảnh báo)
ProbesGET /healthz (live), GET /readyz (ready)
Snowflake ID13 (APP_ENV_SNOWFLAKE_WORKER_ID)
Run modesRUN_MODE=startup (app + CDC consumer) · RUN_MODE=migrate (seed)
Migration modejob bun run migrate chạy-một-lần trước/khi boot

Cảnh báo scale: worker id 13 hardcode trong env. Chạy >1 replica rủi ro collision Snowflake id. Nhiều replica cũng mỗi cái chạy một CDC consumer trong cùng group — rebalance partition áp dụng, nhưng nguy cơ id là blocker.

Traefik labels

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.taxation.rule=PathPrefix(`/v1/api/taxation`)"
  - "traefik.http.services.taxation.loadbalancer.server.port=3000"

2. Observability

SignalNguồnNơi xem
Logsstdout (key-value có cấu trúc)kubectl logs <pod> / Loki
HealthGET /healthz, GET /readyzGateway portal
Metricskhông có riêng cho package
Traceskhông có

Dòng log quan trọng

ScopeDòng đáng chú ý
ApplicationKafkaComponentConnected/Disconnected to broker, Received message | Topic | Partition | Offset, Error processing message
TaxationWorkerServiceHandling product CDC | OP | After, DONE product CDC reconcile (provisioned/deprovisioned)
TaxProvisioningServiceSTART/DONE provision, SKIP provision — already provisioned, DEACTIVATED existing TaxSet
TaxGroupServiceVALIDATED | TaxGroup ... for Merchant ...

3. Security

Mối quan tâmBiện pháp
AuthNJWT (ES256, JWKS từ identity) + HTTP Basic; strategies: ['jwt','basic'] trên mọi route
AuthZPermission resource-based seed theo từng controller; cấp baseline cho OWNER/EMPLOYEE/CASHIER
Secretsmount qua env (APP_ENV_POSTGRES_PASSWORD, Kafka SASL creds); không bao giờ trong code
KafkaSASL SCRAM-SHA-512
Soft-deletedeletedAt — không hard-delete; deprovision dùng status DEACTIVATED
Không audit trailThay đổi config thuế không được audit (khác với InvoiceAuditTracing của invoice)

4. Runbook

4.1 Lớp Alert

AlertTriggerCheckFixEscalate
taxationCDCLagsản phẩm cập nhật nhưng không có thay đổi TaxSetlog Received message, lag consumer grouprestart consumer; verify brokeron-call backend
taxationProvisionErrorslỗi TaxGroup not found / has no itemslog level=error trong provisioningverify seed đã chạy (migrate); check tính hợp lệ taxGroupIdon-call backend
taxationMissingBackfillsản phẩm tạo khi consumer down hiện không có thuếPOST /tax-provisioning/provision thủ công theo từng sản phẩmon-call backend

4.2 Thao tác thường gặp

Thao tácLệnh
Tail logkubectl logs -n <ns> -f deploy/taxation
Re-run seedbun run migrate (trong pod, RUN_MODE=migrate)
Provision thủ côngPOST /v1/api/taxation/tax-provisioning/provision { productId, taxGroupId }
Deprovision thủ côngPOST /v1/api/taxation/tax-provisioning/deprovision { productId }
Replay product CDCre-trigger một product update trong commerce (không có replay job tích hợp)

Không có CDC backfill. fallbackMode: latest nghĩa là sản phẩm thay đổi trước cửa sổ offset của consumer không bao giờ được reprocess. Phục hồi qua endpoint provisioning thủ công hoặc bằng cách lưu lại sản phẩm trong commerce.

5. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.