Skip to content

ADR-0001. Phát hành search dưới dạng thư viện các IGNIS component, không phải service độc lập

FieldValue
StatusAccepted
Date2026-02-15
DecidersPhat Nguyen
Supersedes-

Bối cảnh

  • Search cần đúng nguồn dữ liệu đã có sẵn trong commerce (products, merchants, categories, devices, sale-channels) cộng thêm pricing và inventory.
  • Một service riêng sẽ cần kết nối DB riêng, deploy riêng, port riêng, Snowflake worker id riêng, cùng một bản sao trùng lặp của CDC consumer và phần đấu nối auth.
  • Đường truy vấn nhạy cảm với độ trễ và được gọi từ chính các entity controller của commerce.
  • Typesense cùng Debezium connector là các thành phần biến động bên ngoài thực sự duy nhất; phần còn lại là logic chạy trong tiến trình (in-process).

Quyết định

Chúng tôi sẽ phát hành @nx/search dưới dạng package thư viện, export bốn lớp con của BaseComponent (ApplicationSearchComponent, ApplicationEmbeddingConfigurationComponent, TypesenseSearchEngineComponent, ApplicationCdcComponent) cùng một SearchableControllerMixin. Service chủ (commerce) đăng ký chúng theo đúng thứ tự phụ thuộc; search không có application.ts, không có port, cũng không có DB schema riêng.

Hệ quả

ƯuNhược
Không tốn thêm deploy/port/Snowflake; tái dùng auth + DB của service chủVòng đời của search bị gắn chặt với service chủ
Lời gọi SearchService chạy trong tiến trình - không nhảy mạng trên đường truy vấnKhông thể mở rộng CDC consumer độc lập với commerce
Một CDC consumer duy nhất trong service chủ, không trùng lặpQuá trình khởi động service chủ phải đăng ký component đúng thứ tự
Mixin cho phép mỗi controller tiêu thụ thêm /search với scope tenant riêngMột consumer thứ hai sẽ chạy lại cùng pipeline CDC nếu không được điều phối

Các phương án đã cân nhắc

Phương ánƯuNhượcLý do loại bỏ
Microservice search độc lậpMở rộng độc lập, quyền sở hữu rõ ràngCDC consumer trùng lặp, deploy/port/DB riêng, auth liên serviceChi phí vận hành không tương xứng với quy mô POS
Viết thẳng code search vào trong commerceĐấu nối đơn giản nhấtKhông tái dùng được, không test cô lập được, làm phình commerceMất khả năng tái dùng và ranh giới rõ ràng

Tham chiếu

  • .agents/knowledge/packages/search.md - thứ tự đăng ký component
  • Architecture

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