Skip to content

Operations

@nx/search không có bản triển khai độc lập. Nó chạy bên trong container host (commerce) và chia sẻ vòng đời, replica, và tài nguyên của host. Vận hành nó nghĩa là vận hành Typesense, Debezium connector, và CDC consumer chạy trong commerce.

1. Deployment

Thuộc tínhGiá trị
ImageN/A - đóng gói vào image của commerce
ReplicasN/A - bằng số replica của commerce
ResourcesThêm bộ nhớ cho Kafka consumer + Typesense client vào host
ProbesProbe của host; TypesenseHelper.getHealth() quyết định việc đồng bộ collection + circuit breaker
Migration modeKiểm tra schema-drift khi khởi động (không tự áp dụng); script backfill thủ công cho thay đổi
Snowflake ID rangeN/A

Phụ thuộc phải truy cập được

Phụ thuộcCần choNếu mất kết nối
Typesensesearch + indexingBootstrap bỏ qua việc đồng bộ collection (ghi log cảnh báo); circuit breaker tạm dừng CDC
Kafka + Debeziumđồng bộ CDCIndex ngừng cập nhật; consumer kết nối lại; offset không commit

Không có nhãn Traefik - route được gắn dưới base path của host service (/v1/api/commerce/...).

2. Observability

Tín hiệuNguồnNơi xem
Logsstdout của host (key-value có cấu trúc)log pod commerce - lọc theo scope component (ApplicationCdcComponent, TypesenseSearchEngineComponent)
CDC startupdòng log Starting CDC consumer | Brokers… | DLQ… | CircuitBreaker…xác nhận topic + trạng thái breaker
Schema synclog Schema divergence detected | Collection: …báo hiệu cần migration thủ công
Indexing throughputchỉ số batch của SearchIndexingServicecác trường log theo từng batch
HealthTypesenseHelper.getHealth()probe của breaker + cổng kiểm tra lúc bootstrap

Chẩn đoán đồng bộ

Thao tácLệnh
Kiểm tra số dòng Typesense ↔ nguồnSo sánh số dòng Postgres với num_documents của collection Typesense
Chạy thử migration schema chỉ-thêmbun run migrate
Chạy thử dựng lại collection (blue-green)bun run migrate:rebuild

3. Security

Vấn đềBiện pháp
AuthNRoute search kế thừa JWT/Basic của host (AuthenticateStrategy.JWT, .BASIC)
AuthZsearch:search / search:search-count; mixin yêu cầu config authorize của consumer
Tách biệt tenantresolveSearchScope() gộp một scope where vào mọi query bằng and
Typesense API keyAPP_ENV_TYPESENSE_API_KEY lấy từ secret của host; không bao giờ để trong code
Kafka SASLAPP_ENV_KAFKA_SASL_* khi broker yêu cầu xác thực
Không cho client ghiDocument chỉ thay đổi qua CDC - không có public write API

4. Runbook

4.1 Các loại Alert

AlertKích hoạtKiểm traKhắc phụcBáo cấp trên
searchSchemaDivergencelog Schema divergence detected khi khởi độngSo sánh config với schema Typesense đang chạyChạy script backfill cho thay đổi chỉ-thêm; chỉ tạo lại collection khi an toàn không mất dữ liệubackend on-call
searchCdcLagCDC consumer tụt lại / circuit OPENSức khoẻ Typesense, độ trễ consumer-group KafkaPhục hồi Typesense; breaker đóng sau cửa sổ tĩnhSRE on-call
searchDlqGrowthmessage tích luỹ trong nx.seller.cdc.dlqXem payload DLQ + metadata lỗiSửa mapper/dữ liệu, replay từ DLQbackend on-call
searchStalekết quả thiếu các dòng vừa thay đổiSo sánh số dòng Postgres với num_documents của TypesenseBackfill hoặc replay topic bị ảnh hưởngbackend on-call

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

Thao tácLệnh / Hành động
Theo dõi log CDCkubectl logs -f deploy/commerce | grep -E 'Cdc|Typesense'
Đối chiếu số liệu đồng bộSo sánh số dòng Postgres với num_documents của collection Typesense
Áp dụng thay đổi schema chỉ-thêmbun run migrate:apply (diff + PATCH lên collection đang chạy)
Dựng lại collection (thay đổi phá vỡ)bun run migrate:rebuild:apply (copy blue-green + đổi alias nguyên tử)
Backfill các dòng DB sẵn có vào CDCbun run backfill:apply (tín hiệu incremental snapshot của Debezium)
Reindex sau khi đổi schemaTạo lại collection đã sai lệch (trong cửa sổ an toàn không mất dữ liệu) rồi backfill
Replay một CDC topicReset offset của Debezium connector / consumer-group (do infra sở hữu)

5. Trang liên quan

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