Skip to content

Operations

1. Deployment

Thuộc tínhGiá trị
Imageregistry/taxation:<tag> (build từ packages/taxation/Dockerfile)
Container Port3000 (external 31032)
Replicas1 (Snowflake worker id 13 cố định cứng - 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 khi mở rộng: worker id 13 được cố định cứng trong env. Chạy hơn 1 replica có nguy cơ trùng Snowflake id. Nhiều replica cũng đều chạy một CDC consumer trong cùng group - việc cân bằng lại partition vẫn áp dụng, nhưng rủi ro trùng id mới là yếu tố cản trở.

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ó gì 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 dựa trên resource, seed theo từng controller; cấp mức cơ bản cho OWNER/EMPLOYEE/CASHIER
Secretsmount qua env (APP_ENV_POSTGRES_PASSWORD, thông tin SASL của Kafka); không bao giờ nằm trong code
KafkaSASL SCRAM-SHA-512
Soft-deletedeletedAt - không hard-delete; deprovision dùng status DEACTIVATED
Không có audit trailThay đổi cấu hình thuế không được ghi vết (khác với InvoiceAuditTracing của invoice)

4. Runbook

4.1 Nhóm cảnh báo

AlertTriggerKiểm traKhắc phụcEscalate
taxationCDCLagsản phẩm cập nhật nhưng không có thay đổi TaxSetlog Received message, độ trễ consumer grouprestart consumer; kiểm tra brokeron-call backend
taxationProvisionErrorslỗi TaxGroup not found / has no itemslog level=error trong provisioningxác nhận seed đã chạy (migrate); kiểm tra tính hợp lệ của taxGroupIdon-call backend
taxationMissingBackfillsản phẩm tạo khi consumer down nay không có thuế-POST /tax-provisioning/provision thủ công cho từng sản phẩmon-call backend

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

Thao tácLệnh
Theo dõi logkubectl logs -n <ns> -f deploy/taxation
Chạy lại 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 }
Phát lại product CDCkích hoạt lại một lần cập nhật product trong commerce (không có replay job có sẵn)

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 sẽ không bao giờ được xử lý lại. Khôi phục qua các 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.