Skip to content

Vận hành

1. Triển khai

Thuộc tínhGiá trị
Imageregistry/nx-seller-commerce:<tag>
Container Port3000
External Port31020
Snowflake ID2
Rolesapi (HTTP) + worker (CDC consumer + SyncProductWorker) qua APP_ENV_WORKERS
Replicas (mặc định)1 (dev) / 2+ (staging+)
Chế độ migrationjob RUN_MODE=migrate trước rollout; on-boot cho dev
Live probeGET /v1/api/commerce/healthz
Ready probeGET /v1/api/commerce/readyz

Nhãn routing Traefik

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

Hạ tầng bắt buộc

Phụ thuộcLý do
PostgreSQLDatastore chính (schema public + allocation)
Cache RedisCache authorization + cache footer-summary
BullMQ RedisSYNC_PRODUCT_QUEUE (kết nối riêng)
WebSocket RedisFanout WebSocketEmitter
Debezium / Kafka ConnectĐọc WAL commerce → CDC topics (seam tích hợp)
TypesenseEngine tìm kiếm (qua @nx/search)
MinioLưu trữ media (qua @nx/asset)
@nx/identity truy cập đượcXác thực JWKS trên mỗi JWT

Vai trò API có thể phục vụ traffic mà không cần vai trò worker; đồng bộ CDC tới search chỉ chạy nơi APP_ENV_WORKERS bật nó.

2. Observability

Tín hiệuNguồnXem ở đâu
Logsstdout (logger có cấu trúc IGNIS, key: %s)kubectl logs deploy/commerce / Loki
HealthGET /v1/api/commerce/healthz, /readyzCổng gateway
OpenAPI live specGET /v1/api/commerce/doc/openapi.jsonTrình khám phá cổng gateway
MetricsTraefik gateway (Prometheus scrape)Grafana — dashboard gateway
CDC lagMetrics Debezium / Kafka ConnectConnect REST + lag consumer-group Kafka

Trường log chính

TrườngNguồnGhi chú
requestIdheader X-Request-Idlan truyền cross-service
userIdsubject JWT
merchantIdphạm vi requestlọc theo vai trò
productId / primaryProductIdluồng aggregate + syncquan trọng để trace sync
queueName / job idlog BullMQSYNC_PRODUCT_QUEUE

Truy vấn log hữu ích

Câu hỏiTruy vấn
Lỗi worker đồng bộ sản phẩmlevel=error AND SyncProductWorker
Rollback transaction aggregatelevel=error AND (ProductCreateService OR ProductUpdateService)
Vấn đề kết nối Kafka producerDisconnected from broker
Lỗi mã hóalevel=error AND EncryptService

3. Bảo mật

Mối quan tâmGiảm thiểu
AuthNJWT (ES256, JWKS từ identity); BASIC cho service-to-service
AuthZLọc theo vai trò (SUPER_ADMIN/ADMIN đầy đủ, OWNER theo createdBy, EMPLOYEE qua PolicyDefinition, mặc định rỗng); cache trong authorization Redis
Mã hóa credentialAES-256-GCM (EncryptService, APP_ENV_APPLICATION_SECRET); hiển thị che; giải mã chỉ nội bộ
SecretsK8s Secret gắn dưới dạng env (APP_ENV_DB_URL, APP_ENV_APPLICATION_SECRET, SASL, Redis)
Soft-deletedeletedAt trên tất cả thực thể; xóa được bảo vệ bởi DeletionPolicyService
Tin cậy CDCDebezium đọc WAL với vai trò replication riêng; topic chỉ nội bộ
Network policyCilium — chỉ cho phép gateway + Postgres + Redis(×3) + identity + Minio + Typesense + Kafka

4. Runbook

4.1 Phân loại cảnh báo

Cảnh báoKích hoạtKiểm traSửaLeo thang
CommerceHighErrorRate5xx >5% trong 5mkubectl logs deploy/commerce | grep level=errorxác định endpoint lỗi; rollback deploy gần đâyon-call backend
CommerceSyncWorkerBacklogđộ sâu SYNC_PRODUCT_QUEUE tăngđộ sâu hàng đợi BullMQkiểm tra sức khỏe BullMQ Redis; tăng concurrencyon-call backend
CommerceCdcLaglag consumer Debezium tăngtrạng thái Kafka Connect + lag consumer-grouprestart connector; kiểm tra WAL sloton-call SRE
CommerceAggregateRollbackslỗi TX aggregate tănggrep ProductCreateService/MerchantServicekiểm tra payload request; kiểm tra xung đột FK/slugon-call backend
CommerceKafkaProducerDownlỗi kết nối producersức khỏe broker, credential SASL(tác động thấp — producer nhàn rỗi; sửa broker)on-call SRE
CommerceTaxInfoStaleTaxInfo không cập nhật sau khi sửa thuế merchantkiểm tra Merchant CDC → consumer invoicereplay offset Debezium; xác minh consumer invoiceon-call backend + nhóm invoice

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

Thao tácLệnh
Tail logskubectl logs -n <ns> -f deploy/commerce
Chạy migration thủ côngkubectl exec -it deploy/commerce -- bun run migrate
Kiểm tra sync queueBullMQ admin / Redis LLEN/KEYS trên SYNC_PRODUCT_QUEUE
Kích hoạt lại CDC snapshotKafka Connect connector restart / incremental snapshot
Audit tích hợp providerSELECT code, status FROM "Configuration" WHERE group='...' (ciphertext credential, không bao giờ plaintext)

4.3 Kịch bản phục hồi

Kịch bảnPhục hồi
Worker crash trước khi đưa sync vào hàng đợiaggregate đã commit; chạy lại sync bằng cách phát lại update aggregate hoặc enqueue thủ công
CDC consumer ngừngDebezium giữ offset; restart connector — sự kiện replay từ WAL slot
Drift chỉ mục tìm kiếmkích hoạt Debezium incremental snapshot để seed lại Typesense
Thiếu location mặc định inventoryreplay CDC merchant; xác nhận consumer inventory khỏe mạnh
Sai credential được chetạo lại tích hợp provider (không thể giải mã-và-hiển thị; xoay APP_ENV_APPLICATION_SECRET làm mất hiệu lực tất cả)

5. Runbook Cross-Service

Với sự cố trải dài nhiều dịch vụ, xem runbook/ trung tâm:

6. Trang liên quan

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