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
| Field | Value |
|---|---|
| Status | Accepted |
| Date | 2026-02-15 |
| Deciders | Phat 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ả
| Ưu | Nhượ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ấn | Khô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ặp | Quá 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êng | Mộ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 | Ưu | Nhược | Lý do loại bỏ |
|---|---|---|---|
| Microservice search độc lập | Mở rộng độc lập, quyền sở hữu rõ ràng | CDC consumer trùng lặp, deploy/port/DB riêng, auth liên service | Chi 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ất | Không tái dùng được, không test cô lập được, làm phình commerce | Mấ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